NewWeather Demand Modelling is live. Forecast demand before it arrivesWeather Demand Modelling is live
Guide · Measurement

ROAS vs POAS: Why ROAS Misleads, and What to Measure Instead

Return on ad spend quietly became revenue on ad spend. It double-counts across platforms, ignores margin, and rewards demand you already owned. Here is the profit version: contribution-margin ad efficiency, break-even ROAS, the CM1/CM2/CM3 ladder, and where MER, incrementality, MMM and MTA actually fit.

Why ROAS became the default

ROAS was meant to mean Return on Ad Spend. In practice it means Revenue on Ad Spend, and the reason is structural rather than philosophical. When ecommerce analytics matured, platforms could measure revenue at the moment of conversion, but they could not see your cost of goods, your shipping, your payment fees or your returns. Profit was not available, so the readily available number, revenue, was substituted in. ProfitMetrics makes this point plainly: ROAS in practice says nothing about margins, payment fees or shipping, because the denominator platforms could populate was revenue, not return.

Once revenue became the numerator, Google and Meta wired ROAS in as the headline KPI and, more consequentially, as a bidding target. Target ROAS bidding optimises a campaign toward revenue per ad dollar. That is a coherent objective for the platform, which is paid on spend, and an incoherent one for the operator, who is paid on profit. The two only align when contribution margin is uniform across every product the campaign can sell, which is almost never true.

None of this makes ROAS useless. Revenue per ad dollar is a real, fast, available denominator, and it is the right starting point for a profit calculation. The problem is treating it as the answer. A platform has a structural incentive to inflate the number it reports back to you, because a higher reported ROAS justifies more spend. The job of profit-led measurement is to take that denominator and finish the calculation the platform stopped short of.

ROAS was meant to mean Return on Ad Spend. In practice it means Revenue on Ad Spend, and that gap is where the money leaks.

Three ways ROAS misleads

ROAS fails in three distinct ways, and they compound. It double-counts the same sale across platforms, it ignores the margin on the revenue it counts, and it rewards demand you would have captured anyway. Treat them as three separate corrections, because each has its own fix and its own calculator.

Misleads #1: it double-counts across platforms

Every ad platform applies its own attribution window and claims 100% of a conversion under its own rules. Meta counts a view-through and a modeled conversion; Google counts an enhanced or consent-mode modeled conversion; both can credit the same order. When you sum platform-reported conversions, you are adding overlapping claims, not distinct sales.

The magnitudes are documented, not hypothetical. C3 Metrics reports that platform-claimed conversion counts run 150 to 200% of actual orders in multi-channel programs. Meta platform reporting averages 26% more conversions than site-side analytics once view-through and modeled conversions are included. Google Ads over-attributes by an estimated 15 to 20% when modeled conversions are switched on. Summed across a stack, the platform reports can imply a company is 2 to 4 times its actual size, with Rockerbox cited up to 5x.

The direction of the error is predictable. Last-touch channels that sit at the conversion event, paid search and direct, are systematically over-credited. Upper-funnel channels that create demand, display, social and video, are under-credited because their contribution falls outside the converting touch's window. Optimise on platform reports and you tend to defund the channels that create demand and overfund the channels that harvest it.

This is the golden rule, and it is non-negotiable in Blufire: platform-reported ROAS and Shopify last-touch are reported, not real. Shopify's acquisition channel is a last-touch guess; platform conversions are self-serving claims. Neither is truth. The honest baseline is one conversion per order, reconciled. Our attribution-overlap-calculator quantifies the gap on your own numbers so the double-count is visible rather than assumed.

Documented platform over-reporting (per C3 Metrics / Rockerbox)
Source of inflationReported magnitudeWhy it happens
Summed platform-claimed conversions150-200% of actual ordersEach platform claims 100% of the same sale under its own window
Meta vs site-side analytics+26% conversionsView-through plus modeled conversions
Google Ads with modeled conversions+15-20%Enhanced Conversions / Consent Mode modeling
Whole stack summedImplies 2-5x real sizeOverlapping claims added together
Platform-reported ROAS and Shopify last-touch are reported, not real.

Misleads #2: it ignores margin

Revenue per ad dollar says nothing about the cost of the revenue. A ROAS of 6 on a product line that nets 25 cents of contribution margin per dollar of revenue is a very different business outcome from a ROAS of 6 on a line that nets 60 cents, yet the headline number is identical. ROAS counts the top line and stays silent on COGS, shipping, payment fees and returns, which is where the profit actually lives.

ProfitMetrics provides the canonical illustration. Across four products in one store, the break-even ROAS ranges from 2.12 for a high-margin branded frying pan to 8.88 for a low-margin mixer. A single blended ROAS target of 10 would have shut down the three campaigns that were, on a contribution-margin basis, the most profitable in the store. Identical revenue logic, opposite profit verdicts. A blended target does not just blur the picture; it actively kills your best orders because they happen to carry a lower revenue multiple.

The fix is to stop measuring ad efficiency on revenue and start measuring it on margin. That is the next section.

A blended ROAS target of 10 would have shut down the three most profitable campaigns in the store.

Misleads #3: it rewards demand you already owned

A high ROAS can simply mean the ad took credit for a sale that would have happened anyway. Brand-search campaigns are the clearest case: someone who types your brand name was already going to buy, and a paid click on top of a strong organic listing harvests intent you already owned. The conversion gets attributed to the ad, the ROAS looks excellent, and the incremental contribution can be close to zero.

One honest counterweight comes from Google's own research. Across more than 400 Search Ads Pause Studies on paused accounts, an average of 89% of paid search ad clicks were incremental, meaning they were not made up for by organic clicks when the ads were paused. Google reports this number was consistently high across verticals. That is the pro-ad headline, and it is real. But note the scope: this is an average across non-brand and brand search combined, and the blog does not segment the two.

The brand-keyword caveat is a separate, separately established finding. eBay's large-scale paid-search experiments (Blake, Nosko and Tadelis, published in Econometrica) found that returns to brand-keyword search ads were close to zero, because consumers searching the brand name would have reached the site through organic results or direct navigation anyway. Different study, same conclusion the Google headline does not reach: the 89% average does not license you to assume your brand campaign is incremental.

Separating caused conversions from claimed conversions requires incrementality testing, not attribution. Platform ROAS measures correlation; a holdout measures causation. We return to iROAS and holdout design in the measurement section, but the point here is that ROAS structurally cannot tell you whether an ad created a sale or merely stood next to one.

The profit version: contribution-margin ad efficiency (POAS as the synonym)

The correction for the margin problem is to put profit in the numerator. Contribution-margin ad efficiency divides the contribution margin a channel generated by the ad spend that generated it. Above 1, the channel made money on a contribution basis; below 1, it lost money. The industry shorthand for this is POAS, Profit on Ad Spend, trademarked and popularised by ProfitMetrics and framed by others (Judeluxe) as contribution margin generated per pound of ad spend. We lead with contribution-margin ad efficiency and treat POAS only as the noted synonym, because the profit you put in the numerator should be true contribution margin, not an undefined gross profit.

The identity that links the two metrics is simple when margin is uniform: POAS = ROAS x contribution margin %. That single multiplication is what platforms leave out, and it reorders your campaigns. The worked example below is Demonstrative, but the arithmetic is exact.

Campaign A returns a ROAS of 6.0 on a product line carrying a 25% contribution margin. POAS = 6.0 x 0.25 = 1.5, so $1.50 of contribution margin per ad dollar. Campaign B returns a ROAS of 4.0 on a 60% contribution margin line. POAS = 4.0 x 0.60 = 2.4. The lower-ROAS campaign is 60% more profitable per ad dollar. A revenue-ROAS target would have favoured the wrong one and starved the better one. This is the high-ROAS-low-margin trap, and it is invisible until you finish the calculation.

Blufire computes this number on TRUE contribution margin, revenue minus COGS, shipping, returns and fees, then hands the operator the highest-value move with the dollar impact attached. The output is not a ratio to admire; it is profit-per-channel you can act on. The contribution-margin-calculator gets you the margin input; the true-roas-calculator turns a reported ROAS into the profit figure.

POAS (contribution-margin ad efficiency) = channel contribution margin / ad spend; POAS > 1 means the channel is profitable
POAS = ROAS x contribution margin % (the identity, when margin is uniform)
Campaign A (Demonstrative): POAS = 6.0 x 0.25 = 1.5
Campaign B (Demonstrative): POAS = 4.0 x 0.60 = 2.4
Same store, opposite verdicts (Demonstrative)
CampaignROASContribution margin %POAS (CM per ad $)Verdict
A6.025%1.5Profitable, but the weaker line
B4.060%2.460% more profit per ad dollar

Break-even ROAS = 1 / contribution margin %

Before you can judge a campaign, you need the line in the sand. Break-even ROAS is the revenue multiple at which an ad dollar exactly covers the cost of the goods it sold. The formula is the reciprocal of margin: break-even ROAS = 1 / contribution margin % (RedTrack states it as 1 / gross profit margin). At a 25% contribution margin, break-even ROAS = 1 / 0.25 = 4.0. At a 60% margin, break-even ROAS = 1 / 0.60 = 1.67. At a 50% margin, it is 2.0.

Reading the Demonstrative example back through this line: Campaign A at ROAS 6.0 on a 25% margin clears its break-even of 4.0 by 1.5x, so it is genuinely profitable. A ROAS 3.5 campaign on the same 25% line is below the 4.0 break-even and is losing money despite looking respectable. The break-even threshold is what turns a ROAS number from decoration into a decision.

Triple Whale derives the same line from unit economics, which is useful when you think in AOV and CAC rather than margin percentages. If AOV x gross margin minus CAC equals zero, then break-even ROAS = AOV / CAC. Their verified example: AOV $50, gross margin 50% gives $25 of gross profit; a CAC of $25 leaves zero net income, so break-even ROAS = $50 / $25 = 2.

One caveat that both Triple Whale and honest practice insist on: break-even ROAS clears variable cost only. It excludes G&A, salaries, legal, banking, tax and interest. Clearing your break-even ROAS is necessary for net profit but not sufficient. It tells you the ad paid for the product it sold, not that the business made money. Set the threshold with the true-roas-calculator and the contribution-margin-calculator, then treat it as a floor, not a finish line.

Break-even ROAS = 1 / contribution margin % (equivalently 1 / gross profit margin)
At 25% margin: break-even ROAS = 1 / 0.25 = 4.0
At 60% margin: break-even ROAS = 1 / 0.60 = 1.67
Unit-economics form: if AOV x gross margin - CAC = 0, then break-even ROAS = AOV / CAC
Triple Whale (real): AOV $50, 50% margin, CAC $25 -> break-even ROAS = $50 / $25 = 2
Profit from ROAS: profit = spend x (ROAS / break-even ROAS - 1)

Measurement sits on contribution margin: the CM1/CM2/CM3 ladder

POAS and break-even ROAS both depend on getting the margin number right, and margin is not a single figure. It is a ladder, and ad efficiency must be measured on the right rung. Each rung strips out a further layer of variable cost, so the profit you credit to a channel is the profit that actually survives the sale.

CM1 is revenue minus COGS. It is the gross contribution before any of the costs of selling and fulfilling the order. CM2 takes CM1 and subtracts the variable selling costs that scale with each order: shipping, payment and processing fees, fulfilment, and returns. CM3 takes CM2 and subtracts the variable marketing and ad spend attributable to the order. Ad efficiency belongs on CM2 (the margin available to pay for marketing) or CM3 (after marketing), never on revenue.

The reason this matters in practice is that the gap between revenue and CM2 is exactly the gap ROAS ignores. A line can look strong at the revenue line, lose most of it to shipping and payment fees by CM2, and turn negative once ad spend lands at CM3. Measuring on CM2/CM3 is what makes the high-ROAS-low-margin trap visible before you scale spend into it.

This is the number Blufire computes before handing over the move. We build the ladder on true contribution margin, reconcile the attribution underneath it, and then surface the highest-value action with its dollar impact, not just a ratio. The marketing-profitability and profit-led-measurement guides walk the full ladder; the contribution-margin-calculator gets you the per-order figure to start.

CM1 = revenue - COGS
CM2 = CM1 - variable selling costs (shipping, payment fees, fulfilment, returns)
CM3 = CM2 - variable marketing / ad spend
Measure ad efficiency on CM2 or CM3, never on revenue

MER, the blended view, and where incrementality, iROAS, MMM and MTA fit

The double-count problem (misleads #1) has its own family of fixes, and they sit alongside the margin fix rather than replacing it. Start with the blended view. MER, the Marketing Efficiency Ratio, is total revenue divided by total marketing spend, also called blended ROAS or eROAS (Northbeam, Common Thread Co, Upstack and Triple Whale all define it identically). Because it counts all revenue against all spend, it cannot double-count the way summed platform ROAS does. MER is table stakes, not a differentiator, but it is the fastest way to see the double-count gap: put blended MER next to the sum of your platform-reported ROAS and the size of the discrepancy is the inflation.

MER tells you the blended truth but not the causal truth. For causation you need incrementality testing. A holdout or geo holdout withholds ads from a comparable group and measures the lift, isolating conversions the ads actually caused from conversions that would have happened anyway (Haus). The output is iROAS, incremental ROAS: iROAS = incremental revenue (test minus holdout) / ad spend. A Demonstrative case shows why it matters: a brand-search campaign reports platform ROAS 8.0, but a geo holdout finds 70% of those conversions would have come through organic anyway, so incremental revenue is 30% of attributed revenue and iROAS = 8.0 x 0.30 = 2.4. The best campaign by ROAS is mostly harvesting owned demand. Platform ROAS measures correlation; iROAS measures causation.

MMM and MTA are the two attribution lenses, and they are complements, not rivals (Funnel). MMM, marketing mix modeling, is top-down, aggregate, regression-based and privacy-durable; because it does not depend on user-level tracking it is the right tool for business-level budget and incrementality decisions. MTA, multi-touch attribution, is bottom-up, granular and user-level; it assigns each conversion exactly once, distributing fractional credit across the touchpoints so the shares sum to 100% of one conversion, not 100% each for a 400% total (C3 Metrics). That deduplication alone produces a more honest count than summing platform reports, independent of how accurately the journey is stitched. Incrementality testing is the experimental ground truth that calibrates both.

Where Blufire differs: the double-count narrative is well-owned by C3 Metrics, Rockerbox, Northbeam and Haus, who tie dedup to a cleaner conversion count. Blufire ties deduplicated attribution to contribution margin, so the output is profit-per-channel you can act on, not a fractional-credit chart. We show each platform's self-reported figures next to our reconciled, deduplicated attribution and the Shopify total, with the over-report made explicit, and we never present Shopify last-touch or platform claims as truth. The build-vs-rent-attribution guide covers why we build the reconciliation rather than rent a last-touch pipe.

MER (Marketing Efficiency Ratio) = total revenue / total marketing spend (blended ROAS / eROAS)
Blended ROAS = total order revenue / total ad spend
iROAS = incremental revenue (test minus holdout) / ad spend
iROAS (Demonstrative): 8.0 x 0.30 = 2.4 when 70% of conversions are non-incremental
MTA: one conversion = one assignment; fractional credit sums to 100%, not 100% per platform
Four lenses, four jobs
LensShapeAnswersCaveat
MER / blended ROASAll revenue / all spendIs the whole program efficient?Blended, not per-channel; no causation
MTABottom-up, user-levelWhich touchpoints share the credit?Privacy-fragile; needs journey stitching
MMMTop-down, aggregateHow to set budget across channels?Lower granularity; modeling assumptions
Incrementality / iROASExperimental holdoutDid the ad actually cause the sale?Requires test design; calibrates the others
Platform ROAS measures correlation. iROAS measures causation. The two are not the same number.

What to do this week

You do not need a new attribution stack to start. Five moves, in order, close most of the gap between reported and real.

1. Pull blended MER alongside the sum of your platform-reported ROAS. The difference is your double-count, made visible. Use the attribution-overlap-calculator to put a number on it.

2. Compute your contribution margin % per product line or per campaign, then set break-even ROAS = 1 / CM%. The contribution-margin-calculator gets you the input; the true-roas-calculator turns reported ROAS into the profit figure and the break-even line.

3. Reframe your targets in POAS / contribution-margin terms. Replace the single blended ROAS target with a per-line break-even ROAS, and judge campaigns on CM2/CM3, not revenue.

4. Flag your brand versus non-brand spend and schedule an incrementality test on the brand campaign. Assume nothing from the 89% average; measure your own lift and compute iROAS.

5. Stop reporting Shopify last-touch as truth. Label platform-reported and Shopify-sourced channel figures as reported, not real, until a reconciled, deduplicated number sits behind them.

Deeper reading: ROAS lies (/blog/roas-lies), three platforms one sale (/blog/three-platforms-one-sale), profit-led measurement (/resources/guides/profit-led-measurement), build vs rent attribution (/resources/guides/build-vs-rent-attribution), and marketing profitability (/resources/guides/marketing-profitability). Calculators: true ROAS (/free-tools/true-roas-calculator), attribution overlap (/free-tools/attribution-overlap-calculator), contribution margin (/free-tools/contribution-margin-calculator).

Questions

No. ROAS divides ad-attributed revenue by ad spend, so it measures revenue per ad dollar and ignores the cost of that revenue. POAS (Profit on Ad Spend), which we call contribution-margin ad efficiency, divides the contribution margin a channel generated by the ad spend, so a POAS above 1 means the channel actually made money. When margin is uniform, POAS = ROAS x contribution margin %. ProfitMetrics notes that ROAS, meant to be Return on Ad Spend, became Revenue on Ad Spend because profit was not available in ecommerce analytics, so revenue was substituted in.
Break-even ROAS = 1 / contribution margin % (equivalently 1 / gross profit margin, per RedTrack). At a 50% margin, break-even ROAS = 2; at 25%, it is 4; at 60%, it is about 1.67. Triple Whale derives the same line from unit economics: if AOV x gross margin minus CAC equals zero, then break-even ROAS = AOV / CAC, so AOV $50 at 50% margin with a $25 CAC gives a break-even ROAS of 2. Note that this clears variable cost only and excludes G&A, so clearing it is necessary but not sufficient for net profit.
Each platform applies its own attribution window and claims 100% of the same conversion under its own rules, so summing them adds overlapping claims. C3 Metrics reports platform-claimed conversions running 150 to 200% of actual orders, Meta over-reporting by about 26% versus site-side analytics, and Google by 15 to 20% with modeled conversions, with summed stacks implying a company 2 to 5 times its real size. Blended MER (total revenue / total spend) and deduplicated multi-touch attribution reconcile back to one conversion per order. This is why platform-reported ROAS and Shopify last-touch are treated as reported, not real.
No. A high ROAS can mean the ad harvested demand you already owned, especially on brand-search terms where a strong organic listing would have captured the click anyway. Google's Search Ads Pause Studies found 89% of paid search clicks were incremental on average, consistently high across verticals, but that figure combines brand and non-brand search and does not segment the two. A separate body of work isolates the brand case: eBay's controlled paid-search experiments (Blake, Nosko and Tadelis) found returns to brand-keyword ads close to zero, because those buyers arrive via organic or direct anyway. Only an incrementality test (a holdout or geo holdout) separates caused conversions from claimed ones, producing iROAS = incremental revenue / ad spend. Platform ROAS measures correlation; iROAS measures causation.
They are complements (Funnel). MMM (marketing mix modeling) is top-down, aggregate, regression-based and privacy-durable, which makes it suited to business-level budget and incrementality decisions because it does not rely on user-level tracking. MTA (multi-touch attribution) is bottom-up and granular, assigning each conversion exactly once with fractional credit that sums to 100% of one conversion rather than 100% per platform. Incrementality testing is the experimental ground truth that calibrates both. Blufire ties the deduplicated attribution to contribution margin, so the output is profit-per-channel you can act on.

Sources

  1. ProfitMetrics - ROAS vs POAS
  2. RedTrack - Break-even ROAS
  3. Triple Whale - Break-even ROAS
  4. Northbeam - Marketing Efficiency Ratio (MER)
  5. C3 Metrics - Deduplication
  6. Google Research - Search ads drive 89% incremental traffic
  7. Blake, Nosko & Tadelis - Consumer Heterogeneity and Paid Search Effectiveness (eBay experiments, Econometrica)
  8. Haus - Meta incrementality testing
  9. Funnel - MTA vs MMM
Measure ad efficiency in margin, not revenue.Blufire computes break-even ROAS, POAS and the CM ladder on your live data, then hands you the move.