Attribution 7 min read

Why GA4 and Meta Ads never match

GA4 and Meta Ads disagree because they measure different events, over different windows, dated to different days, under different attribution models. The gap is expected behaviour rather than a tracking fault, and trying to close it is the wrong goal. Here is what causes it and what to do instead.

Published 22 August 2026

GA4 and Meta Ads will never match, and nothing you configure will make them. They count different events, over different time windows, dated to different days, under different attribution models. Meta typically reports more conversions than GA4 attributes to it. That gap is expected behaviour, not a tracking fault, and the goal is to understand its size rather than close it.

Most teams lose days a year to this. Usually it ends with someone declaring one platform "wrong" and quietly trusting the other, which is the worst of the available outcomes.

The five causes, in order of impact

CauseWhat Meta doesWhat GA4 doesEffect on the gap
View-through conversionsCounts people who saw the ad and did not clickCannot see the impression at allLarge. Usually the biggest single cause
Attribution window7-day click plus 1-day view by defaultSession-scoped, credits the last non-direct clickLarge
Conversion datingDates to the ad impression or clickDates to when the conversion happenedDistorts any single day or short period
Attribution modelCredits itself for any touch in windowData-driven or last non-direct clickModerate to large
Modelled conversionsStatistically models what iOS opt-outs hideReports only what it observedModerate

1. View-through conversions

This is the big one. Meta's default attribution includes a 1-day view window: somebody scrolled past your ad, did not click, and bought within twenty-four hours. Meta counts that as a conversion it caused.

GA4 has no idea the impression ever happened. There is no click, no landing page, no UTM. When that person arrives later by typing your name into Google, GA4 attributes the sale to organic search or direct.

Both records are accurate. They are describing different things.

2. Attribution windows

Meta's default is 7-day click plus 1-day view. A click on Monday and a purchase on Friday is a Meta conversion.

GA4 is session-scoped. Its Traffic Acquisition reports credit the last non-direct source of the session in which the conversion happened. If that person came back on Friday via a Google search, GA4 credits Google, not Meta.

Note that GA4's conversion attribution model and its session-scoped traffic reports can disagree with each other, which is why the same GA4 property sometimes gives you two different answers depending on which report you opened. That is worth knowing before you accuse anyone of breaking the tracking.

3. Conversion dating

Meta dates a conversion to the ad impression or click that earned it. GA4 dates it to the moment it happened.

A sale on the 3rd, from an ad seen on the 28th of the previous month, appears in Meta in the old month and in GA4 in the new one. Compare a single week and the two systems can be reporting on materially different sets of events.

This is also why Meta's numbers for last week keep rising after you have already reported them.

4. Attribution model

Meta credits itself for any touch inside its window. It is not modelling your funnel; it is answering "did this person see or click my ad before buying". Multiple platforms answer that "yes" for the same person, which is why adding your channels together can exceed your actual revenue.

GA4 applies an attribution model across the channels it can see, which excludes every impression that was never clicked.

5. Modelled conversions

Since Apple's App Tracking Transparency, a share of iOS users cannot be observed directly. Meta statistically models those conversions and reports them alongside observed ones without distinguishing between them. GA4 reports what it observed. Some of Meta's number is therefore an estimate by design.

How big should the gap be?

Wide enough that a single expected figure would be misleading, and any source quoting you one precise percentage is guessing. It varies with your view-through share, your sales cycle, your iOS traffic mix and your channel overlap.

What matters is not the size of the gap but its stability. A gap that sits steady month to month is measurement working as designed. A gap that suddenly moves is a signal worth investigating: a broken pixel, a changed attribution setting, a tracking template that stopped firing.

Track the ratio over time. Stop trying to explain the absolute number.

Before you blame attribution, check these

A genuine tracking fault looks different from an attribution difference. Rule these out first:

  • Timezone mismatch. Your ad account, your GA4 property and your CRM can each sit in a different timezone. Days shift and short comparisons break.
  • Currency. Multi-currency ad accounts report in account currency. A blended figure built from mixed currencies is meaningless.
  • Missing UTMs. If Meta traffic arrives untagged, GA4 files it under referral or direct and the gap widens for a reason that has nothing to do with attribution windows.
  • Duplicate pixel fires. A pixel firing twice on a thank-you page inflates one side only.
  • Consent mode. Depending on configuration, denied consent can suppress GA4 events while Meta's server-side signal still lands.

What to manage against instead

Stop reconciling and change the question. The number worth deciding on is blended: total marketing spend across every channel, against revenue that actually landed in your CRM or your checkout. Our blended ROAS calculator works it out, and shows you how much more revenue your platforms are collectively claiming than you actually took.

That figure has three properties the platform numbers do not. It cannot be double-counted, because revenue is counted once at the point it arrived. It cannot be inflated by a vendor with an interest in the result. And it is the number your finance team already recognises, which makes the marketing conversation a great deal shorter.

Platform-reported return is still useful. Use it to decide which ad to turn off, because within one platform the comparison is like-for-like. Do not use it to decide whether marketing worked.

What not to do

Do not force them to match. Some teams change Meta's attribution window to 1-day click to make it look more like GA4. It does narrow the gap. It also throws away real conversions and makes your Meta optimisation worse, because the algorithm now trains on a smaller signal. You have made the reporting tidier and the marketing worse.

Do not pick a winner. "We only trust GA4" means ignoring view-through conversions that genuinely happened. "We only trust Meta" means trusting a vendor's account of its own worth.

Do not rebuild it in a spreadsheet every month. It is the same reconciliation each time, and doing it by hand guarantees it stops happening the first busy month.

Doing it continuously

This is the problem we built the platform for. Agentcroft Insights reads Meta Ads, GA4 and your CRM (HubSpot, Salesforce or GoHighLevel), reconciles them into one model, and reports blended return against revenue that actually arrived. The gap between what each platform claims and what closed is shown rather than argued about.

Because the same brain reads every period, it also knows what the gap looked like last month. When it moves, that is surfaced as a change worth investigating rather than a number you would have had to notice yourself.

If you are earlier in this than tooling, start with what marketing intelligence is, or the buyer's guide if you are already comparing options.

The short version

The platforms disagree because they were built to answer different questions, and every one of them has an interest in its own answer. Track the gap rather than closing it, watch it for sudden movement rather than absolute size, and manage the business on blended spend against real revenue. That number belongs to you rather than to any vendor.

Stop reconciling spreadsheets.

See your own channels joined up in one place, or talk to us about running it for you.