First-party data
Rhobin
July 28, 2026
7 min read
None of them is lying: Google Ads, Meta and GA4 count different events, over different windows, under different attribution rules, so they were never built to agree. The number you can defend is the one you can rebuild from your own event data, where the metric is defined once.
The symptom
Three tabs, one client, one week, three answers. Google Ads is confident. Meta is more confident. GA4 is the pessimist in the room, and the client's own back office quietly disagrees with all three. Nothing is broken, and you are still about to spend the first ten minutes of the performance call explaining arithmetic instead of results.
Everyone on that call has a favourite, and each of them is being reasonable. The media buyer trusts the platform the bidding responds to. The client trusts whatever sits closest to invoiced revenue. Your analyst trusts GA4, the only tool that sees every channel. No agreed number, and next month's budget waiting behind it.
At Archon Labs we hear the follow-up more often than the complaint: which one is lying? Right instinct, wrong question. They are answering different questions, on different dates, about different people, and at least one of them is missing events that never arrived. Two separate problems, and until you can tell them apart, every reporting conversation is a negotiation.

Why do the numbers never match?
Two things are happening at once, and most writing on this topic blends them into one list of causes. The first is a counting difference: the same conversion, seen by every tool, reported on a different date, over a different window, under a different attribution rule. The second is a collection gap, where the event never reached one of the tools. Arithmetic against a hole, and only the hole costs you money.
They report on different days
Google Ads books a conversion against the click that caused it, not the day it happened. The primary conversion columns "are calculated based on the time of the click, not the time of the conversion", and the example is unambiguous: "if your ad was clicked on last week and that traffic converted this week, both the click and the conversion are reported back to last week", per Google Ads Help. GA4 does the opposite and records the key event on the day it fired.
That rule alone explains most month-end panics: a campaign that ran hard on the 29th keeps posting conversions backwards into a month you already reported on.
They count a different number of things per click
Before attribution is even involved, the counting setting changes the total. Google Ads can count "every conversion (per tracked conversion action) that happens after an ad interaction", or "only one conversion per ad click", the first recommended for sales and the second for leads, per Google Ads Help on conversion counting. For a client whose customers routinely submit three forms, those two settings describe the same reality with very different totals.
Meta has its own version. When a client runs the pixel and the Conversions API together, which most now do, the same purchase arrives twice and has to be matched back into one event. Meta for Developers is direct about it: advertisers "must set up a deduplication method", the pixel's event ID must match the Conversions API event_id, and "events are only deduplicated if they are received within 48 hours". Wire that loosely and the platform reports purchases that only happened once.
They credit different channels for the same sale
Each platform answers a question about itself. Meta reports what Meta influenced, inside Meta's window, and Google Ads does the same for its own clicks. GA4 tries to split one conversion across every channel that touched it, and by default "data-driven attribution distributes credit for the key event based on data for each key event", per Analytics Help. The same page carries the rule almost nobody accounts for in a client report: "all attribution models exclude direct visits from receiving attribution credit, unless the path to key event consists entirely of direct visits". Credit moves before you ever see it.
Add windows that differ per platform and per ad set, and the sum of the platform numbers exceeds reality by design: each one counts the conversion it can plausibly claim, and nobody subtracts.
And some tools never saw the event at all
This is the half that costs money. Browser-side collection is the weakest link, and it is exactly what GA4 and a standard pixel depend on. Ad blockers strip 30-40% of events before they leave the page. Consent choices remove more, and a misconfigured banner more again, which is its own conversation in how much data your cookie banner throws away. Browser restrictions shorten the identity window until returning visitors look like strangers. Across the accounts we audit, 15-30% of conversions are never captured anywhere, and the mechanism is set out in why conversions never reach GA4.
GA4 also withholds rows for reasons unrelated to your setup: thresholding is "applied to prevent anyone viewing a report or exploration from inferring the identity" of individual users, per Analytics Help.
There is a test worth running before your next reporting call. Take one conversion action and one week, change the attribution window and the model in each platform, and watch the gap. If the gap moves, it is a counting difference and there is nothing to repair. If it barely moves, the tools are not disagreeing about how to count, they are working from different amounts of data. That is a defect, and defects are fixable.
What good looks like
The instinct here is to build a dashboard that lines the platforms up side by side. It feels like the answer, and it produces a fourth number to argue about. Reconciliation does not create truth, it moves the argument into a tool you now maintain.
The version that holds up is duller. Every event lands first-party in a dataset the client owns, before any platform gets a say in it, and the metric is defined once. The platform numbers then get demoted to what they always were: each platform's view of its own contribution, useful inside that platform, unusable as a company total.
That is the job Archon Pixel does. It is a first-party analytics pixel that streams events straight into the client's own BigQuery project, and on a typical account it captures around 25% more than a standard GA4 setup, because it does not depend on what a browser allows a third-party script to keep. With that baseline in place, a platform disagreement becomes a measurable difference rather than a guess.
Three things change in the meeting, and none of them touch your campaigns.
One number is the company number. The client's dataset carries the total, the platforms report their claimed contribution to it.
Gaps become explainable. Ads reads higher because it books on the click date, and you can show the same week counted both ways.
Your specialists stop doing forensics. The hours spent reconciling exports go back into the work the client pays for.

Frequently asked
So which number goes in the client report?
The one from the dataset the client owns, with the platform figures beside it, labelled platform-reported. That labelling change ends most of the argument, because it stops pretending the numbers ever measured the same thing. If that dataset does not exist yet, report GA4 as the site total and the platform figures as claims, in writing, before anyone asks.
How big a gap is too big?
There is no universal threshold, and anyone quoting one is guessing. Stability is what matters. A gap that sits in the same range week after week is structural, and you can explain it. A gap that jumps in a week when nothing was released means something broke, and that is the moment to look at collection rather than attribution.
We already run server-side. Why do the numbers still differ?
Because server-side fixes delivery, not definitions. Attribution windows, counting settings and each platform's own model still apply after your events arrive safely, so a healthy setup still produces different totals. It should produce a smaller and steadier gap though. Having the tool is not the same as having it right, and the deduplication rules above are one of the quieter places a real setup goes wrong.
Does this mean GA4 is wrong?
No. GA4 is usually the most conservative number in the room, and conservative is not the same as wrong. Being browser-dependent, it feels every blocker, every declined consent and every expired cookie, and it is still the only tool trying to see all channels at once. Keep it, and stop asking it to be the source of truth for a business total.
If you want to know whether your gaps are counting differences or missing data, request a free tracking audit and we will measure one client account against its own events and tell you which of the two you have.