Short answer
Because each platform runs its own attribution model on its own data and neither one can see the other. An order that involved a Meta ad and a Google search gets counted once by Meta and once by Google, so the two reports sum to more than your store took. That is the design working as intended rather than either platform lying, and it is why platform-reported revenue can never simply be added together.
What is actually happening
Each platform answers a narrow question: did an interaction with our ads precede this conversion, inside our attribution window? Meta looks at Meta interactions. Google looks at Google interactions. Both find one, both say yes, and neither is wrong about the question it was asked.
- Attribution windows. A click from days ago still counts. Meta's default credits a purchase up to seven days after a click and one day after a view. See attribution window.
- View-through conversions. Somebody scrolled past your ad, searched your brand two days later and bought. Meta books the view. Google books the search. The customer did one thing.
- Modelled conversions. Both platforms estimate conversions they can no longer observe directly. Two estimates of overlapping populations do not add up to a population.
- Last touch inside each platform. Every platform is the last touch in its own report, because its own report is the only place it can see.
This is a structural feature of channel-level measurement rather than a bug in your setup, and no amount of tag auditing makes it go away.
The arithmetic
Two platforms each claiming the same $100 order produce $200 of reported revenue against $100 of real revenue. Add email, affiliates and a comparison site and the reported total keeps climbing while the bank balance does not.
The overlap grows with two things: how many channels you run, and how long your attribution windows are. A single-channel advertiser on a one-day window barely notices. A four-channel advertiser on seven-day windows meets it constantly, which is why this question arrives at roughly the same point in every brand's growth.
The neighbouring version of the problem, platform against store rather than platform against platform, is in why does Meta report more revenue than Shopify.
You cannot fix it by nominating a winner
The instinct is to pick one source of truth and stop arguing. Every version of that has a known failure mode.
- Last click starves the upper funnel. It credits the search that closed the sale and none of the ad that caused the search, so you defund demand generation and then watch branded search decline six weeks later.
- Platform-reported over-credits everybody. It is the sum of biased self-reports and it reconciles to nothing.
- A third measurement tool such as GA4 gives you a different, also incomplete answer. Useful as a tiebreaker, not as truth.
- First click swings the error the other way and flatters whatever runs at the top of the funnel.
There is no free answer here. There is only a choice about which bias you would rather carry, and whether you have said out loud which one you chose.
What to actually do
- Steer on blended MER. Total revenue over total ad spend has one denominator and cannot be double-counted.
- Align attribution windows across platforms so at least the biases are comparable in size.
- Run a holdout when the spend justifies the effort. Turning a channel off in one region for a few weeks answers this in a way no dashboard can. See incrementality.
- Track the ratio of channel-claimed revenue to real revenue over time. The absolute gap does not matter much. A gap that suddenly changes shape matters a lot.
- Stop reconciling per platform in weekly meetings. It never resolves, and it eats the hour you needed for the offer.
Doing it without four exports
The mechanical part is pulling spend and claimed revenue from each platform, pulling real revenue from the store, and lining them up on the same dates in the same timezone. It is dull, so it slips, so the question stays open for another quarter.
Muze reads Meta Ads, Google Ads and Amazon Ads spend alongside read-only Shopify revenue through one connection, so the blended view and the per-channel claims come out of the same session. Seeing them next to each other is most of the argument.
Related questions
- Is one of the platforms lying?
- No. Each is reporting conversions its own attribution rules credit to its own ads. The reports are individually consistent, and they were never designed to be added together.
- How much overlap is normal?
- We are not going to publish a number we cannot source. What matters is that your gap is stable month to month. A sudden change in the gap is a signal worth investigating. The gap itself is the design.
- Will shortening my attribution window fix it?
- It shrinks the overlap and it also shrinks the revenue each platform reports, so every campaign looks worse without anything real having changed. It makes reporting more conservative, which is often the right trade, but it is not a fix.
- Does GA4 solve this?
- No. GA4 applies its own model to its own observable data and will disagree with both platforms and with your store. It is a useful third opinion rather than an arbiter.
- What number should I report to my board?
- Blended: total ad spend against total revenue, with the repeat-customer share stated so nobody mistakes loyalty for acquisition. Channel-reported figures summed together describe a business that does not exist.
Keep reading
Other answers
Ask your own account instead
Muze connects Meta Ads, Google Ads, Amazon Ads and Shopify to ChatGPT or Claude, so the answer comes from your numbers rather than a general one. Free to start, and every write previews before it runs.
See how Muze works