Meta's ROAS number looks healthy because it's designed to look healthy. It overcounts conversions, takes credit for sales it didn't drive, and ignores the customers it made you pay for twice. This post breaks down the four specific ways Meta's attribution inflates your ROAS, how to calculate what it actually is, and what a truly accurate number changes about how you run your campaigns.
Your Meta Ads dashboard says 4.2× ROAS. Your finance team says margins are tighter than ever. Both are telling the truth — and that's exactly the problem.
ROAS — Return on Ad Spend — should be the clearest signal in your marketing mix. Revenue divided by spend. Straightforward. Except it isn't, because the revenue figure Meta uses to calculate it is not the revenue you actually earned from those ads.
It's the revenue Meta thinks it drove. And those two numbers can be very, very different.
Meta's attribution model has four structural flaws that systematically overstate its contribution to your revenue. None of them are accidental — they reflect genuine complexity in tracking across a fractured web. But understanding them is the difference between making decisions with real data and decisions with flattering fiction.
Meta's default attribution window is 7-day click, 1-day view. This means if someone clicks a Meta ad on Monday and buys from your store any time before the following Monday, Meta counts that as a conversion — even if they came back via Google search on Thursday, opened a Klaviyo email on Saturday, and only bought because of a 15% discount code in that email.
Meta gets 100% of the credit. So does Google, in their own dashboard. And so does Klaviyo. The same purchase gets claimed three times by three different platforms. Your blended ROAS looks excellent. Your actual margin doesn't match any of it.
The "1-day view" part of Meta's default window means that if someone saw your ad in their feed — didn't click, didn't engage, just scrolled past it — and then bought from your store within 24 hours, Meta counts that as an ad-driven conversion.
Think about what this means in practice. You're running a retargeting campaign. A customer sees your ad at 9am while commuting, doesn't interact with it, then buys at 7pm because they remembered they needed the product, went directly to your site, and completed the purchase. Meta reports that as a ROAS-generating conversion from your ad. The ad may have had zero influence on that purchase.
How to check this yourself: In Meta Ads Manager, break down your conversions by "Conversion Action Type." Compare click-through conversions vs view-through conversions. For most stores, removing view-through attribution cuts reported ROAS by 15–35%. If your reported ROAS is 4.2×, your click-only ROAS might be 2.9×.
Here's the one that stings most. A customer clicks your Meta ad. Safari wipes their cookie after 7 days. They return and buy on day 9. Meta doesn't recognise them as the same person who clicked the ad — they look like a brand new user. So Meta runs a new impression against them, they click again, and Meta counts a second conversion.
You effectively paid to acquire the same customer twice. Meta reports two conversions. Your ROAS looks strong because the denominator (ad spend) didn't change but the numerator (reported conversions) went up. Your actual margin went down because you paid acquisition cost twice for one customer.
Meta's last-click model gives 100% credit to the Meta touchpoint if it was the last click before purchase. But it gives 0% credit to Meta when it was the first touch in a journey that eventually converted through a different channel.
This creates a paradox: the same Meta campaign gets over-credited in some journeys (the 7-day window) and under-credited in others (when it was the discovery touchpoint for a later organic or email conversion). The number you see in your dashboard is not a consistent measure of anything.
Let's give this a name: Phantom ROAS. It's the gap between what Meta reports and what your campaigns actually generated. Here's the anatomy of a Phantom ROAS situation:
This is why the numbers don't add up at month end. The ad platform dashboard shows healthy ROAS, the bank account disagrees, and nobody can explain the difference. Now you can.
The hardest part is accepting the number. When you do this analysis properly, your true ROAS will almost always be lower than what Meta reports. That's uncomfortable — but it's also the moment where real improvement becomes possible. You can't fix a problem you can't see. Most stores only discover the gap when margins have already eroded badly. The ones that do this analysis proactively are the ones that scale profitably.
Here's the benchmark reality check. These are true ROAS ranges (after all adjustments) broken down by store type:
If your Meta-reported ROAS is 4.2× and your true ROAS after adjustments is 2.2×, you're right on the edge. You're not scaling a profitable channel — you're scaling a break-even one, and one unexpected cost increase (shipping, returns, CPM spike) tips it negative.
Meta isn't lying to you. It's showing you the world as its attribution model sees it — a model designed when cookies worked reliably, before ITP, before every brand ran 4 ad channels simultaneously, before view-through attribution became a standard way to pad ROAS reports.
The world changed. The attribution model didn't keep up. And the gap between what Meta reports and what actually drives your revenue has widened every year since 2017.
The good news: the correction is learnable. Every step in this post is something you can do — some in an afternoon, some over a quarter. The stores that do this work compound it into a structural advantage: they know which spend is actually working, they scale what earns margin, and they stop paying to re-acquire the customers they already own.
The Phantom ROAS disappears the moment you stop accepting the reported number at face value. Start there.
Cignify deduplicates your cross-platform conversions, identifies ITP re-acquisitions, and shows you the true incremental revenue behind every campaign.
Install Free on Shopify