Adray

· , Co-founder

The complete guide: why Meta, Google, GA4 and your store never match

The complete guide: why Meta, Google, GA4 and your store never match

Why do Meta, Google Ads, GA4 and my store all report a different number of sales for the same days?

Open Meta Ads Manager, Google Ads, GA4 and your store's order list for the same week and you will get four different numbers of sales. It happens to every store, it has a short list of causes, and almost none of them is a broken setup. This guide names each cause in a few lines and links to the article that goes through it in detail, so you can find the one behind the gap in front of you.

Talk to SalesMulti-touch attribution anchored on your real orders.

The four sources count four different things

Each ad platform counts the purchases it can credit to itself under its own rules: its attribution window, its view-through setting, its matching of people to ad interactions. GA4 counts purchase events fired in the browser and assigns them with its own model. Your store counts orders. None of them is lying; they are answering different questions with the same word, "conversion". The deep dives: why Meta reports more conversions than your store, why Google Ads reports more conversions than your store and why GA4 disagrees with your ad platforms and your store.

Cause 1: every platform credits itself

A buyer who clicked a Google ad, then saw a Meta ad, then bought, is a conversion in Google Ads and a conversion in Meta. Each platform only sees its own interactions and has no reason to discount itself for the other's. Your store records one order. This is the single largest reason the platforms' combined total exceeds your sales.

Cause 2: attribution windows

"7-day click, 1-day view" means a platform credits itself for any purchase within seven days of a click or one day of an ad view. Two platforms with different windows, or the same platform before and after someone changed the setting, produce different numbers for the same sales. Explained in what attribution windows actually mean.

Cause 3: credit for views, not clicks

With view-through attribution, a person who saw an ad without clicking and bought later can be credited to it. Some of those sales were influenced by the ad and some would have happened anyway, and nothing in the report distinguishes them. We measure how much of it can be verified in how much of what Meta claims can you verify.

Cause 4: the same purchase counted twice

Inside one platform, a purchase sent both from the browser and from your server is counted twice unless both carry the same event ID. Across platforms, the same order is claimed by each. How to check both: how to tell if the same purchase is counted twice.

Cause 5: refunds and cancellations

Ad platforms record a purchase when it happens and do not subtract it when the order is refunded or cancelled later. Your store's settled total does. In a category with frequent returns, the difference is large, and it concentrates in the campaigns that bring in the buyers most likely to return. Covered in refunds and cancellations: the gap no ad platform subtracts.

Cause 6: time zones, currency and dates

Your store may close its day at midnight Mexico City time while an ad account reports in another zone, so the last hours of each day land on different dates. An ad account billed in dollars against a store selling in pesos converts at a rate the report does not show. And a platform may date a conversion to the day of the click instead of the day of the purchase. See time zones and currency: why your reports in MXN and USD do not match.

Cause 7: different definitions of a new customer

Each platform decides who is new from what it can see, usually a limited lookback of its own data, while the store knows the complete order history. The same buyer can be new to Meta and returning to your store. More in why platforms disagree about who is a new customer.

Cause 8: browser events that never fire

Ad blockers, tracking protection and checkouts on another domain stop the browser event that pixels and GA4 depend on. That pushes the browser-based numbers below the store, the opposite direction from causes 1 to 5, which is why the gaps you see are the net of forces pulling both ways.

Which way each cause pushes

CauseEffect on the platform's number versus your storeHow to check it
Self-attributionHigherAdd up every platform's claims for one week and compare with orders
Attribution windowsHigher with longer windowsCompare the same campaign under two windows
View-through creditHigherSplit click-through from view-through conversions
Duplicate eventsHigherCheck that browser and server events share an event ID
Refunds and cancellationsHigherCompare gross with settled revenue per channel
Time zones and datesEither way, by dayCompare weekly totals instead of days
New-customer definitionsEither wayCompare against the store's full order history
Blocked browser eventsLowerCompare browser-based purchases with store orders

Our list of the settings and habits that make reported ROAS look better than it is lives in 8 things that inflate your reported ROAS.

Pick an anchor

The way out is not to make the numbers agree, which they cannot. It is to decide which one is the ledger and read the others as claims about it. The store's settled orders are the only figure with no attribution model, no window and no dependence on a browser event, so they are the anchor. Everything else is a claim: plausible, partly unverifiable, and worth measuring against the orders that exist.

The test that proves over-counting

One check turns suspicion into proof. A platform can legitimately credit a buyer you never saw, but no platform can credit an order that does not exist. So for any window, the sum of all platforms' claimed purchases has a hard ceiling: the number of settled orders in that window. Below the ceiling, the claims are plausible. Above it, the excess is double counting, and it is provable with nothing more than a spreadsheet.

Run it on weekly totals with every platform's default reporting, and without filters that only one side applies, such as a new-customers-only view. That is also the comparison Adray Core keeps on screen permanently: each platform's claim next to the verified orders, never merged into one number.

Common questions

Which number is the right one?

For money questions, the store's settled orders: they are the only figure with no attribution model, window or browser event inside. The platforms' numbers are claims about those orders, and GA4's are measurements of behaviour on your site.

Is a gap between Meta and my store a sign of a broken setup?

Not by itself. A gap in the expected direction, with the platform above the store, is the normal result of self-attribution, windows and view-through credit. A gap that jumps suddenly, or runs in the unexpected direction, is what deserves investigation.

Can I make the numbers match by changing attribution settings?

You can make one report closer to another, and you cannot make the systems agree, because they define a conversion differently. The more useful move is to stop expecting a match and measure how much of each claim can be verified against orders.

Why is the total of all platforms bigger than my sales?

Because the same order can be claimed by several platforms at once: a buyer who clicked a Google ad, saw a Meta ad and opened an email can count as a conversion in all three. The store records one order.

Do refunds explain part of the gap?

Yes. Ad platforms record a purchase when it happens and do not subtract it when the order is later refunded or cancelled, while the store's settled total does.