Why Every Platform Says Your ROAS Is Great (and How to Get a Real Number)

Why Every Platform Says Your ROAS Is Great (and How to Get a Real Number)
Three platforms, three confident bars, and one number from the bank account. Only the short one pays the bills.

Platform ROAS is the revenue an ad platform credits to itself, divided by what you spent there, measured with that platform's own attribution rules. Every platform grades its own homework, so the sum of Meta, Google, and everyone else routinely exceeds what your store actually booked. A real number takes three checks: a backend sum test, a blended MER trend, and one incrementality factor per channel.

Most of the "your ROAS is fake" content out there stops at the first problem (double counting) and then tries to sell you an attribution tool. I think double counting is the least interesting part of the story. It's real, it's measurable, and in a lot of accounts it's smaller than people assume. The bigger issue is quieter: platforms take credit for sales that were going to happen anyway, and no amount of deduplication fixes that.

This piece goes deep on the ROAS number itself. If you want the testing side, our guide to running a free geo holdout lift test covers the mechanics, and the explainer on how marketing mix modeling works and how much data it needs covers the modeling side. Both are part of our broader measurement series.

The three ways a platform inflates its own number

When someone says "Meta's ROAS is wrong," they usually mean one of three different things, and the fixes are different for each. Worth separating them before you panic.

1. Overlap (double counting). Google only sees Google clicks. Meta only sees Meta clicks and views. If a buyer touched both, both platforms report the full sale. Ruler Analytics walks through an illustrative example where Google Ads reports 80 conversions, Meta 65, and Microsoft 30, for 175 total, against 95 actual sales in the backend. That's an 84% overcount. Ruler says that across accounts it reviewed, platforms were collectively claiming 30 to 50% more conversions than actually occurred.

2. Generous attribution windows. Meta's default is still 7-day click plus 1-day view. So a customer who scrolled past your ad yesterday without clicking, then bought through an email, counts as a Meta conversion. Google Ads uses data-driven attribution as its default model, which spreads credit across Google touchpoints using Google's own model of what mattered. Neither setting is dishonest exactly. They're just tuned by the people selling you the ads.

3. Non-incremental credit. This is the big one, and it's the one people skip. Even a perfectly deduplicated, click-only number still includes buyers who would have converted with zero ads. Brand search, retargeting, and existing-customer purchases are the usual suspects. In the eBay field experiment we covered in the incrementality guide, economists found that when brand search ads were switched off, almost all of the lost paid clicks moved to the organic listing. The platform report would have shown great ROAS the entire time.

Anyway, here's why that ordering matters. Overlap you can fix with plumbing. Windows you can fix with a settings change. Non-incremental credit you can only fix with an experiment.

Double counting is probably smaller than the vendors say

This part surprised me a bit. ThoughtMetric, which sells multi-touch attribution (so it has every reason to make overlap look scary), published a real month of data from a mid-sized ecommerce brand: 3,566 orders, $586,849 in revenue. Only 66 of those orders, about 1.8%, had both a Google and a Meta touchpoint. The double-counted revenue came to $21,093.

That's not nothing. But it's a long way from "your platforms are claiming 84% more than you earned."

So where does the rest of the gap come from? In most cases I've seen discussed, it's windows and incrementality, not overlap. A store owner on the Funnelish community forum described a pretty typical version: Meta Ads Manager showing a 4 to 5x ROAS while the Shopify dashboard showed something closer to 2 to 2.5x. With one main ad channel, overlap can't explain a gap that size. View-through credit and buyers who were already on their way can.

My read: if you only run one or two paid channels, don't spend money on a deduplication tool first. Your problem is almost certainly upstream of deduplication.

Meta already admitted some of this (quietly)

Meta has been trimming its own attribution over the last year, which is about as close to a confession as you'll get from an ad platform. According to PPC Land, Meta removed the 7-day and 28-day view-through windows from the Ads Insights API effective January 12, 2026. Then in March, Jon Loomer reported that Meta redefined click-through attribution to count only conversions after a click on an ad link. Reactions, comments, and shares moved into a separate "engage-through" bucket with a 1-day window.

On paper, that's a cleaner number. And it sort of is. But the 1-day view window is still on by default, and Meta's "Incremental" attribution setting is a model predicting which conversions its ads caused, not an experiment. Loomer, to his credit, says he's seen little difference between standard and incremental results in his own accounts. Which tells you something, though I'm honestly not sure what. Either the standard numbers were already fairly incremental, or the incremental model isn't strict enough. My money is on the second.

We made a similar point when Meta said its GEM model lifted conversions 18.9%: a platform measuring its own lift is a starting hypothesis, not a result.

There's academic backing for that skepticism, too. Researchers Brett Gordon, Florian Zettelmeyer, and colleagues compared 15 large Facebook ad experiments against the observational methods the industry typically uses, and found that the observational methods often fail to produce the same effects as the randomized experiments, even with extensive demographic and behavioral data. Attribution is an observational method. That's the whole problem in one sentence.

The three-number audit that gets you a real ROAS

None of this means you throw platform ROAS away. It's still the best tool for comparing ad set A against ad set B inside the same platform, because both sides of that comparison carry roughly the same bias. Kirk Williams put it well in a PPCChat discussion, saying his team uses "softer channel-specific ROAS targets so we have a translated number for setting bids and reporting", while a blended number sets the overall direction. In the same thread, William Harris was blunter: "the platforms aren't TRULY reporting on ROAS."

So here's the audit. You can do the first two in about an hour with a spreadsheet.

Number 1: the sum test. Pull last month's platform-reported revenue from every paid channel and add it up. Compare it to net revenue in your backend (Shopify, your CRM, wherever money actually lands) for the same dates. Use net of refunds and, ideally, excluding tax and shipping, since platforms often report the full order value.

  • If summed platform revenue exceeds total backend revenue, you have a hard proof of overclaiming. Nobody can argue with that one.
  • Ruler's rule of thumb is that a combined platform total 30% or more above backend sales is a common signal of cross-platform duplication. I'd treat that as a flag, not a verdict.
  • Also check what share of backend revenue the platforms collectively claim. If paid channels claim 90% of all revenue and you have a real email list and decent organic traffic, something is getting double-dipped.

Number 2: blended MER, as a trend. Marketing efficiency ratio is total revenue divided by total marketing spend, with no attribution at all. It can't double count because it doesn't count anything. A single MER number is less useful than its direction. Track it weekly. When platform ROAS goes up and MER goes flat or down, the platforms are claiming credit they didn't earn. When both rise together, you're probably fine.

A quick benchmark for whether your MER is any good: compare it against break-even, which is 1 divided by your contribution margin. A 40% margin means you need a 2.5 MER just to break even on marketing. If your platform ROAS says 4x and your MER says 2.2, you're very likely losing money on paid, no matter what the dashboard color is.

Number 3: one incrementality factor per major channel. This is the step that turns "Meta says 4x" into "Meta is really about 2.6x." Run a holdout (geo or audience) on one channel, measure how much revenue actually disappears, and compare it to what the platform claimed for the same period. If Meta claimed $50,000 for the holdout regions' equivalent and only $32,000 actually vanished, your incrementality factor is 0.64. From then on, multiply Meta's reported ROAS by 0.64 for planning purposes.

It's a crude multiplier and it drifts. Re-test every 6 months or after a big change in spend (say, a 30%+ budget shift). But a crude real number beats a precise fake one. Meta and Google both offer lift studies, though the entry gates are real: Meta's Conversion Lift needs at least 10% of your audience in each test cell and a seven-day minimum, per Haus (which sells independent testing, so factor that in). The free geo holdout in our incrementality guide works without either platform's permission.

What to do with brand search and retargeting first

If you only have time to audit one thing, look at the campaigns where the platform ROAS is highest. That sounds backwards. It isn't. The highest-ROAS campaigns are usually brand search and retargeting, which are exactly the ones most likely to be harvesting demand rather than creating it.

A rough way to sort them, before you run any test:

  • Platform ROAS above 10x on any campaign: assume most of it is non-incremental until proven otherwise. That's almost always brand terms or warm retargeting.
  • Retargeting audiences that include recent purchasers: exclude anyone who bought in the last 30 days and watch whether total revenue moves. Usually it doesn't. (Meta has started doing a version of this for you in new-customer ad sets, as we noted when it began auto-excluding two years of buyers.)
  • Prospecting campaigns at 1.5 to 2.5x: these often look worst on the dashboard and turn out to be the most incremental. Don't cut them based on platform ROAS alone.

One small, messy caveat. Some brands genuinely need brand search because competitors bid on their name, and pulling it hands those clicks to a rival. The eBay result was on a SERP with very little competition. So I wouldn't kill brand search on principle. I'd test it.

Common questions about platform ROAS accuracy

Why is Meta ROAS higher than Shopify ROAS?

Mostly attribution windows and view-through credit. Meta counts conversions within 7 days of a click and 1 day of a view by default, and it often reports the full order value including tax and shipping. Shopify reports what actually landed, net of refunds. A 30 to 50% gap is common and doesn't necessarily mean anything is broken.

Is MER better than ROAS?

They answer different questions. MER tells you whether marketing as a whole pays for itself. Platform ROAS tells you which ads inside one platform work better than others. Use MER for budget decisions and the business case, and platform ROAS for creative and ad set decisions.

How often should I re-check my incrementality factor?

Every six months as a baseline, and any time you move spend by more than about 30% on a channel. Incrementality tends to drop as you scale a channel, because you run out of people who weren't going to buy anyway.

A dashboard number that nobody signed off on

The most useful mental shift here is small. Stop treating platform ROAS as a fact about your business and start treating it as the platform's opinion about itself. Useful, often directionally right, and never neutral.

If you also want the analytics side cleaned up before any of this, our list of GA4 settings to fix before trusting any report is a decent place to start, since GA4 will happily add a fourth opinion to the pile.

My prediction: within 18 months, most DTC brands spending over $1M a year on paid will report an incrementality-adjusted ROAS to finance instead of the platform number, and the ones who start now will have three or four test readings to calibrate against when they do. The rest will still be arguing about why Meta says 4x and the bank account says otherwise.