Metric Discrepancies & Attribution

Your GA4 Numbers Don't Match Your Ad Platform. Here's the Decision Tree

By Chinmay Raibagkar·September 10, 2026·9 min read·Some SQL

The 60-second version

A step-by-step way to figure out which discrepancy you're looking at — attribution window, sampling, or a broken tag — before you file a bug report.

  • Step 1: is it a tagging problem?
  • Step 2: is it a window problem?
  • Step 3: is it a sampling/thresholding problem?

Your GA4 revenue for last week is ₹22.6 lakh. Meta claims ₹31.4 lakh attributed to its ads over the same days. Google Ads claims another ₹18.9 lakh. Your warehouse says ₹44.8 lakh in net revenue. Four numbers, one week, and your first instinct is to file a bug report against the tag.

Do not file it yet. In our experience, roughly four out of five GA4-vs-platform gaps are explained by four structural causes — tagging, windows, sampling, or definitions — and they arrive in that order of likelihood. This post gives you the decision tree that checks them in sequence, cheapest test first, so you either find the break in twenty minutes or prove there is no break at all.


Step 1: Is it a tagging problem?

Tagging is the only step where something is actually broken, so check it first — but check it narrowly. A broken tag has a signature: a sudden step change in the ratio, not a stable gap. If GA4 has always reported ~30% below the warehouse and still does, the tag is probably fine and the gap is definitional (Step 4). If the ratio fell off a cliff on a specific date, something changed in your instrumentation.

Run the tag-health query below: it compares GA4 session and purchase counts against the warehouse order count by day, so a deploy that halved event collection shows up as a visible step, not a vague feeling.

Tag-Health Check: GA4 Events vs. Warehouse Orders

Show query

While the query runs, check the three usual suspects by hand: consent banner changes (a new CMP defaulting to opt-out can remove 20–30% of EU traffic from GA4 overnight while the ad platforms keep modeling it), ad-blocker-sensitive inline snippets vs. server-side tagging, and checkout changes that dropped the purchase event — a new one-page checkout or a payment redirect is the classic killer. If capture ratio is stable and above ~0.7, the tag is healthy. Move to Step 2.

What "healthy" looks like. GA4 will essentially never match the warehouse row-for-row. Consent rejection, ad blockers, and data thresholding remove a permanent 10–30% of events. A stable capture ratio of 0.7–0.9 with no step changes is a working tag. Chasing 1.0 is the trap.


Step 2: Is it a window problem?

If the tag is healthy, the next suspect is the attribution window — and this one explains the largest stable gaps. GA4's default reporting attribution is data-driven with a 30-day lookback for acquisition dimensions and its own session logic; Meta defaults to 7-day click + 1-day view; Google Ads conversion actions carry their own per-action windows. The same purchase lands in different weeks — or different channels — in each system.

Three window effects to verify, in order:

  1. Lookback length. A customer who clicked 20 days ago and bought today counts in GA4 and Google Ads but has aged out of Meta's 7-day window entirely. For high-AOV catalogues where consideration runs 2–4 weeks, this alone creates a permanent 15–25% gap between GA4's conversion count and Meta's.
  2. Click vs. view credit. Meta's default 1-day view window credits impression-driven purchases that GA4 attributes to direct, organic, or another click. Split Meta's revenue into click vs. view before comparing anything — buyers who compare Meta's blended column against GA4's click-based model are measuring the view window, not performance.
  3. Cross-channel credit. GA4's data-driven model gives fractional credit across the whole journey, including organic and direct touches. The ad platform gives itself full credit for the same purchase. One ₹3,499 order becomes 0.5 in GA4's paid-search row and 1.0 in Google Ads — both "correct," different rulers.

The 34% gap that was two windows, not a bug

Common diagnosis
Meta reported₹31.4L attributed7-day click + 1-day view
GA4 data-driven₹20.7L to paid socialFractional credit, view excluded
Meta click-only₹22.1LAfter splitting out view-through
Residual gap~6%Consent + thresholding, within normal band
Splitting Meta's view-through out closed three-quarters of the gap in one step. The remainder was the normal structural undercount. No bug was ever filed.

Step 3: Is it a sampling or thresholding problem?

Small numbers lie with confidence. GA4 applies data thresholding (hiding rows when user counts are low, to protect anonymity) and, on large properties, sampling in exploratory reports. Both silently shrink small slices while leaving totals plausible — which is exactly why a campaign-level GA4-vs-platform comparison can disagree violently while the account totals reconcile.

Symptoms that point here rather than at tagging: the gap is worst on low-traffic breakdowns (single campaign, single day, single region) and disappears when you aggregate to weekly account level; GA4 shows "(data thresholding applied)" banners you have been ignoring; or the explorations report disagrees with the standard report for the same query. The fixes are boring and effective: compare at weekly grain, prefer standard reports over explorations for reconciliation, ensure Google Signals and thresholding settings are a conscious choice, and treat any slice under ~100 conversions as directional.

The small-slice rule: below about 100 conversions per slice per period, GA4-vs-platform gaps are dominated by thresholding, sampling, and modeling error — not by anything you did. Aggregate up before diagnosing. Almost no real tagging bug manifests only in small slices while totals reconcile.


Step 4: Is it just two different definitions of "conversion"?

If tagging is stable, windows are normalised, and slices are large enough — and a gap remains — congratulations: you have reached the actual answer. GA4 and the ad platforms define conversion differently, and the residual gap is structural, not fixable:

  • Counting rules differ. Google Ads conversion actions set to "every" count repeat purchases; GA4's key events and Meta's columns count differently again. One loyal customer buying twice is one or two conversions depending on who you ask.
  • Attribution models differ. Data-driven fractional credit (GA4, Google Ads) vs. last-touch full credit (Meta default) vs. no attribution at all (blended CAC from the warehouse). Fractions and wholes cannot reconcile, by design.
  • Revenue definitions differ. Gross vs. net, tax-in vs. tax-out, shipping included or not, refunds excluded with different delays. A permanent 8–12% revenue gap is often just tax and shipping policy, and it will never close no matter how healthy the tags are.

At this point the decision tree terminates in a policy, not a fix: GA4 for journey analysis, platforms for in-platform optimisation, warehouse for money. Write the residual gap down — "GA4 paid-social runs ~25% under Meta click-only, stable for 12 weeks" — and stop re-investigating it.


The decision tree, as a flowchart

GA4 vs. Ad Platform: Which Discrepancy Is This?

Process Flow
1

Tagging? Check the capture ratio

Run the tag-health query. Stable capture above ~0.7 with no step change means the tag is healthy — move on. A sudden drop means a deploy, consent change, or checkout break: fix that first.

2

Window? Normalise the rulers

Align lookbacks, split Meta click from view, and compare like with like. If the gap collapses when windows match, it was never a data problem — log the window settings with dates.

3

Sampling or thresholding? Aggregate up

If the gap lives in small slices but totals reconcile, it is thresholding or sampling. Move to weekly grain and standard reports; treat sub-100-conversion slices as directional.

4

Definitions? Accept the residual gap

Different counting rules, models, and revenue definitions leave a permanent stable gap. Document it, route each number to its decision, and report money from the warehouse.

Each Number's Job After the Tree

Reporting Hierarchy
Tier 1
GA4

Journey analysis: paths, landing behaviour, cross-channel sequences. Answers how people move, never how much money was made.

Modeled + thresholded behavioural events
Tier 2
Ad platforms

In-platform optimisation: which ad set, creative, or keyword wins. Bid on each platform's own number and compare only within its walls.

Attributed value ÷ platform spend, per window
Tier 3
Warehouse

Money: revenue, blended CAC, contribution. The only numbers that leave the marketing team for finance or the board.

Net revenue ÷ total spend, no attribution

Frequently asked questions

How big a gap is "normal" between GA4 and Meta?

There is no universal benchmark — it depends on your windows, AOV, iOS share, and consent regime. What matters is stability, not level. A 30% gap that has held for twelve weeks is your measurement system's fingerprint; a gap that moved 15 points this week is an event. Track the ratio weekly and alert on movement.

Should I switch GA4 to last-click to match the platforms?

Only for a one-off diagnostic comparison, never as the standing configuration. GA4's data-driven model is the better description of cross-channel journeys; last-click exists in the comparison toolkit precisely so you can quantify how much of the gap is model vs. missing data. Switch, measure, switch back.

My capture ratio fell from 0.85 to 0.5 on one date. What now?

That signature — a step change on a date — is the one case in this post that is usually a real break. Check the deploy log for that date first: checkout changes, CMP/consent changes, tag-manager publishes, and app releases. Nine times out of ten the culprit shipped that day.

Can server-side tagging close the gap to zero?

It shrinks the tagging slice of the gap — server-side collection recovers events ad blockers and ITP would have eaten — but it cannot touch windows, models, or definitions. Expect a healthier capture ratio (often +10–20 points), not reconciliation. Buy server-side tagging for signal quality, not for matching numbers.


The summary

  • Check discrepancies in order: tagging → windows → sampling → definitions, cheapest test first. Most gaps resolve at Step 2.
  • A healthy tag means a stable capture ratio of ~0.7–0.9, not 1.0. Alert on step changes, and join them to the deploy log before suspecting platforms.
  • Normalise attribution windows before comparing — split Meta click from view, align lookbacks, and remember fractional vs. full credit.
  • Aggregate small slices up: thresholding and sampling dominate below ~100 conversions and vanish at weekly account grain.
  • The residual gap is definitional and permanent. Document it, route GA4 to journeys, platforms to bidding, and the warehouse to money — and compute blended CAC from the warehouse alone.
Free tool

Blended CAC Calculator

Total spend across every channel, divided by total new customers — the acquisition cost number that reconciles with what you actually spent.

CR

Chinmay Raibagkar

About author →

Founder of DataLens AI. He helps non-technical teams read their ad and database numbers with confidence — which number to trust, what to do next, and what to ignore.

Glossary terms referenced