Skip to content
Legend of Growth

Search the site

Attribution·

Why Meta's ROAS doesn't match your bank account

A mechanical comparator splits one stream of orders across four gauges, each showing a different reading.
Fig. 01 · One campaign, four honest readings
On this page
  1. What platform ROAS actually counts
  2. The part the cynics get wrong
  3. The Google version of the same problem
  4. Match the decision to the cheapest honest measurement
  5. Two checks you can run this week
  6. Your first real test
  7. Why this gate comes first

Meta says 4.1x. The P&L says something under 2. Every DTC operator eventually has this moment, usually mid-meeting, and the two standard reactions are both wrong: either "Meta is lying, cut the budget" or "the pixel must be broken, call an engineer."

Nothing is broken. Meta's number and your bank account's number are both computed correctly. They're answers to different questions, and almost everything that goes wrong in paid-growth measurement comes from using one question's answer to make the other question's decision.

This essay walks the gap: what platform attribution actually counts, where it over-credits, where it genuinely under-credits, and the boring, workable stack that tells you which number to use for which decision.

What platform ROAS actually counts

When Meta reports a purchase, it's answering: did someone who clicked or saw our ad buy something within the attribution window? For a standard setting, that means anyone who bought within 7 days of clicking, or within 1 day of merely seeing the ad. Since iOS privacy changes cut into observed conversions, part of that count is statistical modeling rather than observation.

Note what the question doesn't ask: would this person have bought anyway? Attribution counts buyers who touched an ad. It has no concept of the sale that would have happened regardless.

That single missing concept explains most of the gap.

Three compounding effects sit on top:

  • Every platform counts its own credit. Meta, Google, TikTok, and Klaviyo each claim full credit for conversions they touched. The same order can legitimately appear in three dashboards. Sum your platforms' attributed revenue and you routinely get a number larger than your actual revenue.
  • View-through is generous by construction. A customer who saw an impression yesterday and bought today counts, even if the "view" was a half-second scroll-past. On warm audiences, view-through collects sales the brand was getting anyway.
  • Warm traffic is easy to claim. Retargeting and branded-search campaigns stand between an existing intender and their purchase. They harvest demand and report it as if they created it. This is why retargeting is perpetually your "best" campaign in the dashboard.

The part the cynics get wrong

The fashionable conclusion from the above is "platform numbers are inflated, divide by two." The real picture is more interesting, and there's now good public data on it.

Haus's Meta Report, built on 640 incrementality experiments run since the start of 2024 (average advertiser in the study spends $14M a year on Meta), found that Meta broadly works: on average it drove roughly 19% lift to the advertiser's primary KPI, and Meta accounts for 77 of the 100 highest-lift experiments ever run on Haus.

More surprising: *for DTC advertisers reading 7-day click attribution, Meta on average under-reported incrementality by about 15%*. For prospecting campaigns measured on clicks only, the platform was modest, not boastful. Part of the story is that ads create demand that converts outside the window, off the pixel, or in other channels: for omnichannel brands in the study, about a third of Meta's measured impact landed outside DTC entirely, in retail and marketplace sales the dashboard never sees.

So the honest statement isn't "platform attribution over-reports." It's: platform attribution is unanchored. It over-credits warm-audience and view-heavy campaigns and can under-credit cold prospecting, and it does both at the same time in the same account. The error doesn't just have a size. It has a sign that flips depending on campaign type, which is why no single fudge factor fixes it.

The same report is a useful caution against autopilot in either direction: in head-to-head tests, 58% of brands saw higher incremental returns from manual campaign setups than Advantage+, with Advantage+ averaging 12% lower incremental ROAS. But 42% of brands saw the opposite. The lesson isn't "automation bad." It's that the only way to know which side you're on is to test it on your own account.

The Google version of the same problem

Everything above has a search-side twin, and it's usually easier to fix. Branded search campaigns (ads on your own brand name) report the best ROAS in the account, because they stand directly in front of people who already decided to find you. The question is never whether those campaigns convert. It is how many of those buyers would have clicked the organic result one inch lower.

This is one of the oldest findings in ad measurement: eBay's landmark experiments turned off paid search at scale and found that for branded terms, organic clicks absorbed almost all of the traffic the ads had been claiming. Your brand isn't eBay, and the honest answer for a smaller brand with real competitors bidding on its name will be different. But the test is the same and it's nearly free: pause branded search in a few regions for four weeks and watch what total branded-path revenue does there. Many brands discover the true incremental cost per order on branded terms is a multiple of what the dashboard shows. Some discover competitor pressure makes the spend worth it. Either way, you replaced the account's most confident number with an actual answer.

Match the decision to the cheapest honest measurement

The way out isn't a better dashboard. It's matching each decision to the cheapest measurement that can actually answer it:

DecisionUse thisWhy it works
Which ad or angle is better (within a channel)Platform metrics: CTR, CPA, relative ROASThe bias is roughly constant within a channel, so relative comparisons survive it
Weekly budget pacingMER + blended CACAttribution-proof arithmetic: dollars out, revenue and new customers in
Scale a channel up or down, keep or kill itIncrementality test (geo or audience holdout)The only method that answers 'what would happen without it'
Annual channel mix at larger budgetsMedia mix modeling, calibrated with holdout resultsWorth it once spend and channels justify the effort, usually $10M+ revenue
The measurement stack for a $1M-$25M DTC brand.

The chart below is the same idea from another angle: one illustrative campaign, four readings, all "correct."

The expensive mistake is diagonal reads: using platform ROAS (top row) to make scale-or-kill decisions (third row). That's how retargeting budgets grow all year while new-customer counts stay flat.

PLATFORM ROAS4.1×CLICKS ONLY2.9×BLENDED MER2.4×INCREMENTAL1.7× SAME CAMPAIGN · FOUR CORRECT ANSWERS
Fig. 02 · One campaign, four honest readings

Two checks you can run this week

Before any formal testing, two afternoon-sized diagnostics will tell you how big your gap is:

  • The over-claim ratio. Sum attributed revenue across every platform for last month. Divide by your actual revenue from new customers. If your platforms collectively claim 1.8x the revenue that exists, you know precisely how much over-claiming is happening, and which platform's share grew last quarter.
  • A post-purchase survey. One question at checkout: "Where did you first hear about us?" It's biased and imperfect, and it's still the cheapest independent signal you can get. When Meta's attributed share is double its survey share while TikTok's survey share is double its attributed share, you have a working map of who over-claims and who under-claims in your specific mix.

Your first real test

A geo holdout is the entry-level incrementality test, and a $3M brand can run one without a data team:

  1. Pick the question. One channel, one question: "is retargeting incremental?" or "what happens if we cut Meta 30%?" Not five questions at once.
  2. Split regions. Choose a set of states or regions that historically behave like the rest of your market. Turn the channel (or the budget change) off there. Keep everything else identical.
  3. Run it for 4-6 weeks. Shorter tests drown in noise. Longer starts to cost real signal elsewhere.
  4. Compare against the counterfactual. Sales in held-out regions vs what those regions historically do relative to the others. The gap, scaled up, is your incremental effect.
  5. Expect an honest limitation. At smaller spend levels you can only detect large effects. A test that says "retargeting's true lift is somewhere between 0 and 15%" has still told you something valuable, because the dashboard said 400%.

Run one per quarter, biggest budget line first. Within a year you have real coefficients on your top channels, which puts you ahead of most brands your size, and gives you grounds to argue with any dashboard in the building.

Why this gate comes first

Measurement is the fifth of the five gates we use to diagnose rising CAC, and it's the one to fix first, because until the numbers are honest, every other fix is a guess graded by the thing it's supposed to be fixing.

If you want a second pair of eyes on your own gap, book a CAC audit: a free 30-minute review, no deck, no pitch. You leave with the top three things to fix first, whether or not we work together.

Related essays

Back to resources