Why Meta shows more revenue than your shop
Why Meta reports more purchases than your shop, what view-through counts and how to check tracking, counting rules and real impact in three steps.
The gap measures counting rules
Meta and your shop answer different questions. Meta asks: was there contact with my ad before this purchase that falls within my window? The channel report in the shop asks: which single channel gets this purchase? A discrepancy is therefore not an error in the first place, nor evidence that Meta is performing well or badly.
My assessment: closing the gap is not a goal. If you take view-through out of the report, the gap shrinks without a single euro of revenue changing. And retargeting people who were going to buy anyway can show almost no gap and still produce zero additional revenue. The useful question is which kind of discrepancy you are looking at.
| Finding | Assessment | Next step |
|---|---|---|
| Meta shows more purchases than the Meta line in the shop's channel report | normal | Break down the counting rule |
| All channels together claim more than total revenue | normal, double claiming | Quantify the overlap |
| Meta shows more purchases than the shop has orders in total | measurement error | Check the tracking, evaluate nothing before that |
How one purchase gets counted twice
According to its help pages, Meta uses three ways of counting website conversions, configurable per ad set:
- Click-through: events within 1 or 7 days after a link click.
- View-through: events within 1 day after an impression. No click is needed.
- Engage-through: events within 1 day after an interaction without a link click. For video ads, 5 seconds of playback is enough.
When reports are pulled via the API, the default is 7-day click plus 1-day view. Shopify works the other way round: depending on the report, last non-direct click or last click is the default, and both give 100% to a single channel. Other shop systems have their own rules, so check which model your report uses.
Suppose someone sees an ad in their feed on Monday evening, does not click, and buys at lunchtime on Tuesday via a Shopping ad. Meta records the purchase as view-through, Google as a click, and Shopify gives it entirely to Google. All three count correctly by their own rules, and you see one order with two claims. If the same person clicks the Meta ad on Monday and buys from the newsletter on Sunday, the same picture emerges through the 7-day window.
Two further things shift the figures. Via the API, the same purchase can fall on the day of the impression or on the day of the conversion, so comparing daily figures with the shop achieves little. And since March 2026 Meta has been gradually restricting click-through to link clicks, while some accounts still use the old definition. A jump in a period comparison may therefore be down to the definition.
Step 1: more Meta purchases than orders is a measurement error
Attribution can credit one order to several channels, but it cannot create an order. That is the hard limit, and you can check it in five minutes.
Take a closed period of at least four weeks and put the Meta purchases in the widest window next to all of the shop's orders, including those later cancelled or returned. Compare the count, not the revenue. Revenue brings in questions about shipping, tax and returns, the count does not. At the edges of the period individual purchases can slip, so only a clear excess counts.
If Meta is above the order count, the counting is wrong. I would search in this order:
- Pixel and Conversions API together: they need deduplication via an identical event ID and identical event name, otherwise one purchase can count as two events. More on this in the article on the Conversions API.
- Order confirmation: does reloading the page fire another purchase event?
- Pixel scope: do several shops or countries run through the same pixel while you are only comparing one of them?
The check only catches gross errors. Double counting of 20% stays invisible as long as Meta is below the total order count. A test order, with a look at the events sent, is therefore part of it. If the count matches but the revenue does not, compare the Meta order value with the shop average: a large deviation points to a wrong value in the purchase event.
Step 2: compare click and view-through with the shop separately
This step shows how much of the Meta figure depends on the most generous rule. Use the comparing attribution settings feature for this rather than simply switching the ad sets: according to Meta, the chosen model and its settings also influence delivery.
A worked example with invented figures for four weeks:
| Figure | Orders |
|---|---|
| Shop total | 1,000 |
| Meta line in the shop's channel report | 180 |
| Meta, 7-day click only | 270 |
| Meta, 7-day click plus 1-day view | 420 |
| Google Ads, own report | 470 |
| Email tool, own report | 210 |
The tracking passes here: 420 is below 1,000. Of the gap between 420 and 180, 150 comes from view-through and 90 from clicks that the shop does not credit to Meta, for instance because a later channel followed or UTM parameters were missing. Add up the claims and you reach 1,100, and therefore at least 100 orders claimed twice. The real number is probably higher, because direct orders without any channel contact are not yet in this sum.
This breakdown tells you what the test needs to look out for, but it is not an evaluation in itself. A high view share does not mean Meta has no effect, only that the reported figure is particularly poorly supported. For the overall picture, the calculation with total revenue and total costs helps, because no order appears twice there.
Step 3: only total revenue measures impact
Meta itself calls incrementality experiments the gold standard for the question of what would not have happened without the ad, not attribution. There is no flat discount. A study with Meta involvement covering 998 experiments found that 7-day last click overstated results by a factor of 1.33 on average, averaged across many campaigns and conversion types. That does not work as a correction factor for your account.
You can run the test without any tool and without access to lift studies:
- Export orders per day and delivery region. The GeoLift documentation from Meta's ecosystem recommends daily data over weekly data and at least 25 pre-test periods.
- Split the regions into test and control and calculate the revenue ratio in the pre-test period.
- Exclude the test regions in Meta and cut the budget by their share, otherwise the money moves into the control. All other channels stay stable. Duration: at least one purchase cycle, and at least 15 days with daily data.
- Calculate the expectation: control revenue during the test times the ratio. The difference from actual revenue is the additional revenue.
Suppose a shop has a ratio of 0.25 and €80,000 of revenue in the control during the four test weeks:
| Calculation step | Value |
|---|---|
| Expected revenue in the test regions | €20,000 |
| Actual revenue without Meta | €15,000 |
| Additional revenue from Meta | €5,000 |
| Ad spend saved in the test regions | €2,500 |
| ROAS on the additional revenue | 2.0 |
| ROAS reported by Meta in the control | 4.0 |
| Break-even ROAS at a 40% contribution margin | 2.5 |
In this example the report shows a profit, while the test shows a loss on the first order. Calculate the break-even ROAS with your own contribution margin before ad spend. If the result is below it, I would not switch Meta off, but lower the budget, check the retargeting share first and test again. If it is clearly above, you have a sounder reason for more budget than any platform figure. The result then feeds directly into the split between Google and Meta.
If you sell heavily through repeat purchases, or Meta mainly wins new customers, the calculation underestimates the value, because it ends with the test period. That then belongs alongside it as a separate assumption, not in the measured figure.
Germany's 16 federal states fall short of the recommendation
For reliable regional tests, the documentation recommends at least 25 pre-test periods across 20 or more regions. With Germany's 16 federal states you are below that. Postcode areas work too, provided the Meta exclusion and the shop export use the same division. Otherwise a simple comparison is only a rough estimate: it tells you whether the additional revenue is closer to the Meta figure or far below it, but not a factor you should calculate with.
With small volumes it gets tighter. According to the testing vendor Haus, which has its own interest here, small audiences and infrequent purchases need very long tests or large holdouts. With only a few orders per day I would therefore not interpret a narrow effect, and I would not schedule test weeks during promotions. Instructions for a more precise set-up are in the article on the geo test, and the logic applies to Meta in the same way.
In these cases, steps 1 and 2 remain useful. They cost almost nothing and prevent an expensive misreading: taking a platform figure that is correct as revenue that would not have existed without the ad.
Further questions
Does Meta's incremental attribution model replace the test against total revenue?
I do not consider it a replacement. According to Meta, this model predicts whether an ad caused a conversion. That remains a model calculation by the platform, which it also evaluates itself. The regional test, by contrast, measures against your own orders.
Which figure belongs in the monthly report to management?
My advice: total revenue and contribution margin from the shop, plus the ad spend of all channels and the latest test result. The Meta figure remains a steering metric within Meta, for example for comparing ad sets under the same setting. It is no proof of revenue.
Sources
- About attribution models and attribution settings, Meta Business Help
- Ad Account Insights, Marketing API Reference, Meta for Developers
- Simplifying Ad Measurement for a Social-First World, Meta for Business
- Handling Duplicate Pixel and Conversions API Events, Meta for Developers
- Marketing reports, Shopify Help Center
- Predicted Incrementality by Experimentation (PIE) for Ad Measurement, arXiv
- GeoLift Best Practices, GeoLift Documentation
- Understanding Meta incrementality testing, Haus
