GA4 and Meta Ads almost never show the same conversion count, and neither one is wrong. They answer different questions on different windows. Meta counts conversions from people it exposed to an ad, including views without a click, on a default setting of 7-day click and 1-day view, per Jon Loomer. GA4 counts sessions that reached your site and shares credit across channels, excluding direct traffic unless the whole path is direct, per Google Analytics Help.

A gap of 10 to 20 percent between the two platforms is completely normal, according to Ruler Analytics. So the useful question is not which platform is lying. It is which one to trust, and for which decision.

Why don’t GA4 and Meta report the same number?

Because they measure two different things. Meta is a people-based system that counts the people it showed an ad to. GA4 is a session-based system that counts what happens on your website. Those are not two readings of one truth, they are two truths about two different events.

Three design choices make the totals drift apart:

  • View-through crediting. Meta credits a conversion to an ad someone saw but never clicked. GA4 has no impression modelling at all, so that same conversion lands in GA4 as direct, organic or another channel.
  • Counting logic. As a people-based platform, Meta can credit the same person with several conversion events across a journey. GA4 records one credit per key event and, by default, distributes it across channels with data-driven attribution.
  • Attribution windows. Meta’s default is 7-day click and 1-day view. GA4’s acquisition lookback runs up to 30 days and excludes direct traffic from receiving credit unless the entire path is direct, per Google Analytics Help.

This is why a director who spends a quarter trying to reconcile GA4 and Meta is chasing a target that does not exist. It is one of the biggest time sinks in paid acquisition, and the same confusion sits underneath a stalling or inflated Facebook Ads cost per result.

What actually creates the gap?

Four mechanisms explain almost all of it. Watching these is far more productive than accusing either platform.

DimensionGA4Meta Ads
Unit countedOn-site sessionAd-exposed person
Credit ruleCross-channel, data-drivenClick and view-through
Default windowLookback up to 30 days7-day click, 1-day view
IdentityFirst-party cookie, per devicePeople-based across logged-in devices
Main blind spotView-through and capped cookiesOnly its own ad inventory

The fourth mechanism is the quietest and the most damaging: client-side data loss. GA4 leans on a first-party cookie set in the browser. When a visitor declines consent, runs an ad blocker or uses Safari, that cookie is weakened or missing. Safari’s Intelligent Tracking Prevention caps JavaScript cookies at seven days, and at 24 hours when the referrer is classed as a tracker, per Simo Ahava. GA4 then treats a returning Safari user as a brand-new visitor, and Meta, which recognises logged-in people, keeps a link that GA4 has already lost.

Why GA4 and Meta Ads count different conversionsTwo side-by-side panels comparing how GA4 and Meta Ads count a conversion. The left panel, GA4, counts on-site sessions: it shares credit across channels with data-driven attribution, gives one credit per key event, uses a lookback window of up to 30 days, and excludes direct traffic unless the whole path is direct. Its blind spot is that it cannot see view-through conversions and that Safari caps its cookies. The right panel, Meta Ads, counts ad-exposed people: it credits both clicks and views without a click, uses a default window of 7-day click and 1-day view, can credit one person several times, and recognises logged-in people across devices. Its blind spot is that it only sees its own ad inventory. A band across the bottom states that a 10 to 20 percent gap between the two totals is normal because the two systems answer different questions.GA4 and Meta count two different thingsGA4 counts on-site sessionsCross-channel, data-driven creditOne credit per key eventLookback window up to 30 daysExcludes direct unless all-directBlind spotView-through and capped SafaricookiesMeta counts ad-exposed peopleCredits both clicks and view-throughDefault 7-day click, 1-day viewCan credit one person several timesPeople-based across logged-in devicesBlind spotSees only its own ad inventoryA 10 to 20 percent gap is normal: the two totals answer different questions.
GA4 counts on-site sessions; Meta counts ad-exposed people. The totals differ because the two systems answer different questions, so a 10 to 20 percent gap is expected rather than a fault.

How big a discrepancy is normal?

A 10 to 20 percent gap is normal, and Meta almost always reports the higher number. That direction is expected: view-through crediting and people-based counting both push Meta’s total up, while consent loss and cookie caps push GA4’s total down.

The number becomes a warning sign, not a definition, once it drifts past 20 to 30 percent and stays there. At that point you are usually looking at a real collection fault: a mistagged event, a pixel firing late on mobile, a time-zone mismatch between the ad account and the GA4 property, or a Conversions API that is missing conversions. As one implementation guide notes, if the Conversions API is missing more than 20 percent of confirmed conversions, something is broken. Below that, the gap is definitional and you should stop trying to close it.

Which one should you trust, GA4 or Meta?

Neither on its own, and the more money a decision moves, the less you should lean on a single self-reported dashboard. Use each source for the job it is built for:

  • Meta for daily bid and creative decisions. It is the only system that sees its own auction and inventory in real time.
  • GA4 for on-site journeys and page diagnosis. It follows the session and the sequence of pages.
  • Your CRM or order system for revenue. It is the only record of money that actually landed.

For the biggest decision, whether to scale or cut a channel, none of the three settles it, because observational attribution overstates the causal effect of advertising. On 663 randomised experiments run at Facebook, Gordon, Moakler and Zettelmeyer found that a real bottom-funnel lift of 5 percent showed up as 64 percent under propensity matching, an overstatement of roughly 13 times. Only an incrementality test, a geo holdout or a controlled pause, produces a causal answer.

That cuts both ways, and it is the counter-intuitive part. Platforms do not uniformly inflate. Across 640 geo-randomised experiments, Haus found that Meta under-reports its impact in direct-to-consumer sales. So the honest posture is neither trust nor suspicion, it is measurement.

Does the Conversions API fix the mismatch?

Partly, and it is worth being precise about which part. The Conversions API sends conversion events from your server rather than the browser, which recovers signal that Safari, iOS App Tracking Transparency, ad blockers and consent prompts strip out on the client side. To avoid double counting, the pixel and the API send the same event with a shared event_id, and Meta deduplicates the pair inside a 48-hour window.

What the Conversions API does not do is reconcile GA4 with Meta. It narrows the collection gap, the events lost before they were ever recorded. It leaves the attribution gap untouched: Meta still credits view-through, still counts on its own window, and still recognises people across devices, while GA4 stays session-based. A useful way to hold it, from the same implementation guidance: the pixel captures attempted conversions, the Conversions API captures confirmed ones, so a residual difference is healthy rather than a defect. If your event_id is inconsistent between the browser and server events, deduplication fails and you double count, which looks like the opposite problem.

How do you reconcile GA4 and Meta in practice?

Stop reconciling totals, and instead give each number a defined job. The workflow that actually holds up:

  1. Name one source of truth for revenue. Your CRM or order system, not a platform. Every revenue debate ends there.
  2. Compare like with like. When you do line GA4 up against Meta, match the windows and note that GA4 counts sessions while Meta counts people. Unmatched windows manufacture a gap on their own.
  3. Ship the Conversions API with a consistent event_id. This recovers lost signal without inflating counts, and it is the single highest-value fix for a gap driven by browser blocking.
  4. Steer with blended metrics for the big calls. A spend-to-revenue ratio over the same period depends on no attribution rule and cannot be tuned by a setting. We compare it with the platform metrics in our guide to ROAS, MER, CAC and LTV, and we apply the same logic to splitting budget between Google and Meta in B2B.

In short

  • The totals are meant to differ. GA4 counts on-site sessions with cross-channel credit; Meta counts ad-exposed people including view-through on a 7-day click, 1-day view window. A 10 to 20 percent gap is normal, and Meta usually reads higher.
  • Trust each source for its job. Meta for bids, GA4 for journeys, your CRM for revenue, and an incrementality test for scale-or-cut decisions, because observational attribution can overstate a real 5 percent lift as 64 percent, per 663 randomised experiments.
  • The Conversions API helps, but only halfway. It recovers signal lost to Safari, iOS and ad blockers through server-side events deduplicated by event_id, yet it does not remove the definitional gap between the two platforms.

If your two dashboards have been contradicting each other for months and nobody can say which one to follow, the problem is method, not tooling. You can see how we run this inside our B2B paid acquisition work, or book a diagnostic and we will map which source should drive which decision on your own account.