Meta Ads

The Real Reason Your Meta ROAS Looks Good but Profits Are Down

C
Cignify Team
June 2025
⏱ 8 min read
TL;DR

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.

The four ways Meta inflates your ROAS

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.

1. The 7-day click window counts sales that weren't driven by the ad

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.

3×
Avg platforms claiming the same conversion
20–40%
Typical conversion overcount due to overlap
Real ROAS
Usually 40–60% of what Meta reports

2. View-through attribution claims sales from people who never even clicked

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×.

3. ITP makes returning customers look like new acquisitions — and Meta takes credit twice

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.

Reported ROAS vs Real ROAS — Where the gap comes from
4.2×
Meta Reports
3.4×
−View-through
2.6×
−Cross-platform
2.2×
−ITP doubles
1.9×
True ROAS
Platform-reported
Remove view-through
Deduplicate channels
Remove ITP doubles
True ROAS

4. The attribution model ignores assisted conversions entirely

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.

What "Phantom ROAS" actually looks like

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:

Phantom ROAS: A Real Example
Meta reports: £48,000 revenue attributed to £11,400 ad spend = 4.2× ROAS ✓

Reality: £48,000 £32,000 genuinely incremental revenue
(after removing view-through, cross-platform overlap, ITP doubles)

True ROAS: £32,000 ÷ £11,400 = 2.8× ROAS

At a 30% gross margin: 2.8× ROAS still barely breaks even after COGS, shipping, returns.
The 4.2× ROAS felt like strong performance. The 2.8× reveals a structural profitability problem.

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.

How Meta's attribution stacks up against reality

f
Meta Attribution Model — What It Claims vs What's Real
👁️
View-through conversions (1-day) Counts sales from people who saw but didn't click the ad
Overstated
🔁
Cross-platform overlap Same conversion claimed by Meta, Google, and Klaviyo simultaneously
Duplicated
🍎
Safari ITP re-acquisitions Returns customers count as new, Meta charges twice for one person
Double-counted
📧
Email-assisted conversions When Meta was first touch but email closed the sale, Meta takes full credit
Misattributed
🔍
Brand search conversions Meta gets credit for purchases driven by organic brand awareness it helped build
Contested

Before and after: what changes when you fix this

❌ Before — Running on Phantom ROAS
Scaling campaigns that look profitable but aren't
Cutting channels that "underperform" but were actually assisting
Setting ROAS targets based on inflated benchmarks
Paying to re-acquire customers lost to ITP
No idea which campaigns are truly incremental
✓ After — Running on True ROAS
Scale decisions based on real margin contribution
Credit email and organic for their real role in conversions
Set ROAS targets that actually protect margin
Suppress existing customers from acquisition audiences
Run incrementality tests to measure true ad impact

How to calculate your real ROAS — step by step

Step 1 — Switch to click-only attribution in Meta In Campaign Settings, change from "7-day click, 1-day view" to "7-day click" only. This removes view-through inflation immediately. Your reported ROAS will drop — that's the point. The new number is more honest.
Step 2 — Pull order-level data and deduplicate Export your Shopify orders for the same period. Match each order by email/date against what Meta claimed. Orders that appear in both Meta and Google reports count once. Remove the duplicates from Meta's conversion count and recalculate ROAS.
Step 3 — Identify and remove ITP re-acquisitions Cross-reference "new" customers in Meta's report against your Shopify customer database. Anyone with a prior order is a re-acquisition — their purchase shouldn't inflate your acquisition ROAS. This requires first-party identity matching across sessions.
Step 4 — Run a geo holdout incrementality test The definitive answer on what Meta actually drives. Turn off Meta in one geographic region for 4 weeks, keep it running in a matched region. Compare new customer revenue between the two. The difference is Meta's true incremental contribution — and therefore its true ROAS.
Step 5 — Set a new ROAS floor based on your actual margin Work backwards from your gross margin. If your blended gross margin is 45% and you want to break even on first purchase, your minimum true ROAS is 1 ÷ 0.45 = 2.2×. Add your target profit margin on top of that. That's your real floor — not whatever Meta suggests.
💡

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.

What a healthy true ROAS actually looks like

Here's the benchmark reality check. These are true ROAS ranges (after all adjustments) broken down by store type:

2.5–3.5×
Healthy true ROAS for most Shopify DTC stores
3.5–5×
Strong true ROAS — room to scale aggressively
<2×
Danger zone — likely losing money on first purchase

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.

The bottom line

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.

Find out what your real Meta ROAS is

Cignify deduplicates your cross-platform conversions, identifies ITP re-acquisitions, and shows you the true incremental revenue behind every campaign.

Install Free on Shopify