View-through, modeled conversions, overlap.
The most expensive spreadsheet I ever built had three columns: Meta purchases, Google conversions, Klaviyo orders. I summed them. The total was 160% of what Shopify had recorded. I assumed Shopify was missing orders. It was not. I had just discovered that "purchase" means something different in every column.
The one-sentence version
Ad platforms count a sale whenever it falls inside their rules, and their rules never require the ad to have caused it. Four mechanisms do most of the inflating: view-through, long windows, modeled conversions, and overlap.
The setup
Try it: stack the layers
How does 100 real orders become 180 reported purchases?
Reported in Ads Manager
146
Orders in Shopify from ads
100
Reported ROAS is 1.5x the real one
Every layer is 'true' by the platform's rules. None of them requires the ad to have caused the order. Scaling on this number means scaling into your own existing customers.
Five true numbers. Only one of them is your revenue.
The four mechanisms
View-through
Someone saw your ad, did not click, and bought within a day. Counted. Most of these people were already customers on their way back.
Long windows
A click on day 1, an email on day 5, a purchase on day 6. Meta's 7-day click window says: mine. Klaviyo's 5-day window says: mine.
Modeled conversions
Purchases Meta could not observe but estimates happened. Labelled in the UI, blended into your ROAS.
Overlap
Retargeting and prospecting both touched the same order. Each campaign reports it. The account total quietly exceeds the orders.
Why it matters
If every campaign over-reported by the same 80%, you could divide by 1.8 and move on. They do not. Retargeting might report 3x its real contribution while prospecting reports 0.7x. A single correction factor keeps the ranking wrong, and the ranking is what decides your budget.
My spreadsheet's conclusion was "scale retargeting". Retargeting was the column with the most inflation. I spent a quarter buying my own customers back from Meta.
The fix
Start from Shopify. Every order exists exactly once. Attach every touch that led to it, from every platform, plus the survey answer. Split the credit with a model built on your own journeys. Now the campaign totals sum to the order total, and a campaign that is 3x inflated shows up as exactly that when you flip to the platform view for comparison. This is what TrueROAS's dashboard does by default.
Honest footnote
One channel, no retargeting, no email, mostly new customers: Ads Manager and Shopify will roughly agree. The moment you add retargeting, the gap opens, and it opens fastest on the campaign that looks best.
Questions people actually ask
Is Meta lying?
No. Every reported purchase meets Meta's stated definition. The definition is generous because Meta is paid by advertisers who like big numbers. Expect the same from any platform that grades its own homework.
Which campaigns over-report the most?
Retargeting and brand campaigns, by a wide margin. They target people already on the way to buying, so view-through and long windows catch them in bulk. Prospecting usually under-reports.
Should I turn off view-through attribution?
It is a reasonable first step for reporting hygiene. It does not solve overlap between platforms or long-window claims on returning customers. Verified attribution does both.
Does Google over-report too?
Yes, differently. Google's default 30-day click and last-click habit hand it credit for brand searches that other channels created. See the brand search page.
See your own numbers, verified against your orders.
Free under $10k/month in revenue. 14-day trial above that. Nothing changes in your ad accounts. You will know within a week which platform has been telling stories.

"I built this because I was making $50k-a-month decisions on numbers I knew were wrong. If TrueROAS does not show you something Meta or Google got wrong in the first two weeks, tell me and I will help you cancel."
Rasmus Arvidsson
Founder, TrueROAS. Answers support himself.
Keep going