Guide
Why your Google, Meta and TikTok numbers never agree.
The reconciliation problem every multi-platform advertiser hits, and why fixing your tracking won’t solve it.
You open four tabs. Meta says 240 conversions. Google Ads says 182. GA4 says 156. Your CRM, the only place an actual sale leaves a paper trail, says 138. Four systems, four versions of reality, and a budget meeting in an hour where someone is going to ask which number is right.
The honest answer is that none of them is right, because none of them is measuring the same thing. The numbers were never built to match, and the time most teams spend trying to force them into agreement is time spent solving the wrong problem.
This is not a tracking failure. Your pixels are probably fine. The discrepancy is structural, and once you understand where it comes from, you stop asking “which platform is lying” and start asking the question that actually moves budget correctly: what did each channel genuinely contribute, and how do I see it without pretending these four systems agree?
Is it a bug, or is it structural?
Before you reinstall the pixel for the third time, it is worth knowing which problem you actually have, because most people are trying to fix the one that has no fix.
A genuine bug tends to be binary. The conversion event was never configured, or it fires on the wrong page, or the pixel is missing from checkout entirely, or your domain was never verified. When that happens you do not see a 30 per cent gap, you see almost nothing, or you see one event type recording and another recording zero. Bugs are usually all or nothing on a segment, and they are worth chasing down: confirm the event fires through both browser and server, check it loads on the actual confirmation page, make sure the click identifiers and UTMs are arriving. If reinstalling fixes it, it was a bug.
The structural mismatch looks completely different. It is a steady, proportional gap that survives every reinstall. The classic signature is a platform reporting consistently fewer conversions than your backend, often in the range of 20 to 40 per cent below, and staying there no matter what you do. The other signature is the opposite: your platform totals added together exceed the real number of orders in your shop, because each one is claiming the same customers. And the dead giveaway is that the numbers move when you change the attribution window, because nothing is broken, you are simply asking a different question and getting a different honest answer.
The simple test: if the gap is stable and proportional and it shrugs off every fix you throw at it, it is not a bug. It is the floor. No pixel work removes it, because it was never tracking that produced it.
Each platform defines a conversion differently
Start with the word itself. A “conversion” is not a fixed unit. Each platform decides what counts, when it counts, and to whom the credit goes, and those decisions are made to serve the platform, not you.
Google Ads, by default, leans on data-driven attribution and a configurable conversion window that often runs to 30 days and can stretch to 90. Meta offers click windows of one or seven days and a one-day view window, with seven-day click the common setting. TikTok gives you one, seven, fourteen or twenty-eight day click windows, with view-through optional. LinkedIn typically works across one, seven, thirty and ninety day windows. Amazon Ads applies its own last-touch logic inside the Amazon ecosystem, commonly on a fourteen-day window. YouTube sits inside Google Ads but counts engaged-view conversions on its own terms, crediting a view that lasted long enough rather than a click.
Line those up and the problem is obvious. A sale that happens eight days after a Meta click falls outside Meta’s seven-day window but comfortably inside Google’s thirty. Same sale, same customer, counted by one platform and invisible to the other. Nobody made a mistake. The windows simply disagree.
The same sale gets claimed twice
Now add the part that makes the totals balloon past your real sales count.
A customer clicks your Meta ad on Monday, thinks about it for a week, gets retargeted on YouTube, searches your brand on Google on the following Tuesday, and buys. That is one sale. Meta sees a click inside its window and reports a conversion. Google sees a click inside its window and reports a conversion. YouTube may log an engaged view. Your platform totals now show two or three conversions for a single purchase.
This is not double counting in the sense of a bug. Each walled garden is answering its own question honestly: “did someone who touched my ad go on to convert?” The trouble is that every platform answers yes to the same customer, and no platform deducts the credit the others are also claiming. Stack six platforms and the sum of their self-reported conversions can run well ahead of the number of real orders in your CRM.
Modelled numbers are not observed numbers
Even the conversions a platform does report are increasingly estimates rather than counts.
Since the shift away from third-party cookies and the arrival of app tracking restrictions, the platforms lost a large share of the direct signal they used to rely on. They filled the gap with modelling. When a user declines tracking, or the click identifier never arrives, the platform infers what probably happened from the conversions it can still see.
The practical effect is a systematic skew that runs in different directions per platform. Modelled and last-event logic tends to push Meta’s reported conversions materially above what a server-side or analytics tool observes. Google’s modelled conversions, switched on through enhanced conversions and consent mode, lift its numbers in the same direction. Analytics tools like GA4 lean the other way and under-report paid conversions when users reject cookies, because a declined session is simply never recorded. So one half of your stack is rounding up and the other half is rounding down, on the same traffic, at the same time.
Identity and consent fracture the join
Underneath all of this is the join that no longer holds. To know that the Meta click on Monday and the Google purchase on Tuesday were the same person, you need a stable identifier that survives across platforms, devices and a week of elapsed time. That identifier has been steadily dismantled.
Cross-device behaviour breaks the chain. Someone scrolls past your ad on a phone, researches on a laptop, and buys on a tablet. Without a logged-in identity tying those sessions together, each platform sees a fragment and guesses at the rest. Consent rules fracture it further. In much of the world a site must ask before tracking, and when a user declines, the analytics layer goes dark while the ad platform, working from its own first-party context, may still record the interaction. The two systems are now looking at different subsets of the same audience and will never reconcile by construction.
The structural reason: the scorekeepers are also players
Step back and the deeper issue is not technical at all. Every ad platform is both a scorekeeper and a player. Meta marks Meta’s homework. Google marks Google’s. Each has a direct commercial interest in attributing as much of your success to itself as the rules allow, and each sets those rules.
This is why “better tracking” does not fix the problem. Cleaner UTMs, a tighter pixel, server-side events: all worth doing, none of them resolves the fact that six interested parties are each claiming credit for the same outcomes using definitions they control. You cannot reconcile six self-serving accounts into one truth by improving the bookkeeping inside each account. The reconciliation has to happen above them, in a layer none of them owns.
What actually works
Accepting that the platform numbers will never agree is not defeatist. It is the precondition for measuring properly. Three things follow.
First, stop chasing a single true number. There is no single source of truth waiting to be configured into existence, and building your reporting around the hunt for one produces a brittle dashboard that breaks every time a platform changes its windows. Keep each platform’s native number visible as what it is: that platform’s own account of its own contribution, useful for in-platform optimisation and nothing more.
Second, separate counting from causation. Attribution allocates credit. It does not tell you what a channel actually caused. The only way to know whether Meta drove incremental sales is to test it: hold out a region, switch spend off and on, watch what moves in the CRM. Incrementality testing answers the question attribution cannot, and it is the discipline most teams skip because the platform dashboards feel like an answer.
Third, build a reconciliation layer that normalises rather than overwrites. The work that genuinely helps is unglamorous data engineering: pull each platform’s data through its API, normalise the definitions so a conversion means the same thing across sources, deduplicate the customers who appear in more than one platform’s claim, and reconcile against the CRM as the one place a real sale is recorded. The output is not a single number that pretends the platforms agree. It is a coherent view that shows where they disagree, why, and what the deduplicated, CRM-anchored reality underneath actually is.
Where this leaves you
The teams that handle multi-platform measurement well are not the ones with the cleanest pixel. They are the ones who stopped expecting the platforms to agree, kept the native numbers for what they are good for, ran incrementality tests for the questions that matter, and built or bought a federation layer that normalises and deduplicates across the walled gardens instead of forcing a false single truth.
That federation layer is the hard part, and it is precisely the problem Marque was built to take off your plate. Marque federates across Google Ads, Meta, TikTok, LinkedIn, Amazon Ads and YouTube, normalises their conflicting definitions, deduplicates the customers each platform double-claims, and reconciles the result against your own sales data, while keeping a human checkpoint on the decisions that move real budget. You still see every platform’s native number. You also, for the first time, see what they add up to once the double-counting is stripped out.
You will never make Meta and Google agree. You can stop needing them to.