Why Meta and GA4 never agree (and which one is right)
The conversation I have most with marketing teams new to working with me: "Meta says 80 conversions last week. GA4 says 64. Which one is right?"
Both. Neither. Somewhere in between.
That's not a deflection — it's the honest answer. Meta Ads Manager and GA4 are not measuring the same thing. They use different attribution windows, different click definitions, different views of the user, and different timing rules for when a conversion is counted. Expecting them to match is like expecting a thermometer and a barometer to agree.
A 20% gap is normal. When clients see less than that, I tell them the setup is healthy. When it's more, that's when I start hunting for actual bugs.
The mechanical reasons, roughly in order of how much they typically explain:
Different attribution windows. Meta defaults to 7-day click. GA4 used to use 30-day default; it's configurable now but most teams have it wider than Meta. That alone is a 5–10% swing.
Click counting versus session counting. A user clicks your Meta ad three times in twenty minutes — Meta records three clicks, GA4 records one session. Same human, different denominator.
View-through conversions. Meta credits conversions to users who saw your ad but didn't click. GA4 cannot see those at all.
Timezones. If your Meta account is on UTC and your GA4 property is on Amsterdam time, a midnight conversion lands on different calendar days in the two systems. Lines up over a long period; never lines up day to day.
Cross-device. Meta knows when the same logged-in human used your site on phone and then desktop. GA4 doesn't, unless you've wired up User-ID — and most teams haven't.
The in-app browser hop. Customer taps your Meta ad on Instagram, lands on your site in Instagram's in-app browser, then taps "open in browser" before checkout. Meta sees the click. GA4 sees a brand-new session with no fbclid, classifies it as direct, and gives Meta no credit. Hugely underreported in industries with long checkouts.
Ad-blockers and iOS tracking prevention. Both Meta-pixel fires and GA4 hits are blocked by Brave, Safari ITP, and most ad-blockers. CAPI helps for Meta. Server-side GTM helps for GA4. Together they close most of the gap.
What I actually recommend to clients, in order:
1. Install Meta CAPI alongside the pixel, server-side. Closes the iOS and ad-blocker gap on the Meta side.
2. Move GA4 to server-side GTM. Closes the same gap on the GA4 side.
3. Align lookback windows where possible.
4. Sync timezones. Cheapest fix, most often overlooked.
5. Stop comparing daily numbers. Compare 4-week rolling totals instead.
When the residual gap settles at 10–15% after all of that, you're done. That's the noise floor for cross-platform comparison and no amount of further engineering will close it. The truth lives between the two numbers, and the best decision you can make is to stop debating which one to report and start using both as bounds.