The Margin Stack30 DAYS FREE + Free Analytics Session $500

The Math / ROAS formula

The Math · Spend and customers

The ROAS formula, and how to turn it into a margin number

ROAS is the easiest ratio in marketing to calculate and one of the easiest to misread. It divides revenue by spend, so it cannot see what the revenue cost to deliver, and the revenue in it is whatever the platform chose to claim. The fix is not a better multiple. It is two short conversions: from revenue to margin, and from claimed to caused.

The short answer

ROAS = attributed revenue ÷ ad spend. To see whether a campaign makes money, multiply the attributed revenue by your contribution margin before marketing (CM2) and divide by spend. That is POAS, and above 1.0 the campaign pays for itself.

5.0 on Google · 100+ businesses · $153M revenue influenced

The formula

ROAS = Attributed revenue ÷ Ad spend · POAS = ROAS × CM2 % · Break-even ROAS = 1 ÷ CM2 %

  • Attributed revenue
  • Ad spend
  • CM2 %
  • POAS
The formula

ROAS, and the two lines that make it useful.

TermWhat it means
Attributed revenueThe revenue the platform or attribution model credits to the campaign. It is a claim, not a receipt.
Ad spendMedia cost for the same campaign over the same period.
CM2 %Contribution margin before marketing: revenue less landed COGS, fulfilment, shipping and payment fees, as a share of revenue. Worked in full on CM1, CM2 and CM3.
POASMargin earned per ad dollar. The POAS glossary entry defines it; break-even is always 1.0.

Use CM2, not gross margin and not CM3. Gross margin still contains fulfilment and fees, so it makes the floor look easier to clear. CM3 has already taken the ad spend off, so using it counts marketing twice. The ROAS and break-even ROAS glossary entries cover the definitions.

Worked example 1

A 4.0x campaign, converted to margin.

One campaign, one month, selling discount-heavy product with a 30% CM2.

Worked example / demonstrative numbers
Ad spendA$10,000
Platform-attributed revenueA$40,000
ROAS: 40,000 ÷ 10,0004.0x
CM2 on those orders: A$40,000 × 30%A$12,000
POAS: 12,000 ÷ 10,0001.2
Break-even ROAS: 1 ÷ 0.303.33x
Margin left after ad spend: 12,000 − 10,000A$2,000

A 4.0x reads as a strong campaign. On a 30% margin it clears its 3.33x floor by a thin A$2,000, if the platform's revenue figure is right. The same 4.0x on a 62% CM2 would leave A$14,800 (A$24,800 − A$10,000). Revenue ROAS cannot tell those campaigns apart; POAS can, instantly.

Worked example 2

The same campaign, after the over-claim.

Platforms count revenue they touched, not revenue they caused. Meta over-reports roughly 26% above third-party analytics on average (Measured, 2024, as cited on The Math). Applying that average to example 1:

Worked example / demonstrative numbers
Platform-attributed revenueA$40,000
Adjusted for a 26% over-report: 40,000 ÷ 1.26A$31,746
Adjusted ROAS: 31,746 ÷ 10,0003.17x
CM2 on adjusted revenue: A$31,746 × 30%A$9,524
Adjusted POAS: 9,524 ÷ 10,0000.95
Margin after ad spend: 9,524 − 10,000−A$476

Two honest conversions turned a 4.0x winner into a campaign that loses money on every order. The 26% is an average across accounts, not your number: measure your own with a holdout or geo test, as covered on platform over-claiming. The gap can be far wider: The Math cites a documented Meta test that showed 2.1x true incremental return against 4.8x platform-reported.

Compared

ROAS, POAS and MER side by side.

Each ratio answers a different question. None of them fixes attribution on its own.

RatioFormulaBreak-evenBlind spot
ROASAttributed revenue ÷ ad spend1 ÷ CM2 % (3.33x at 30%)Ignores margin; counts claimed revenue
POASCM2 on attributed orders ÷ ad spend1.0Still inherits the attribution error
MERTotal revenue ÷ total marketing spend1 ÷ CM2 %, store-wideCannot judge a single campaign

Work out your own floor with the break-even ROAS calculator, or set an account-level target with the target MER calculator.

Common mistakes

Where the ROAS formula gets misused.

  • Judging ROAS without a floor.A 4.0x is a loss at a 20% CM2 and a comfortable win at 60%. Work out the floor first, then read the multiple. What is a good ROAS sets targets from it.
  • Using one store-wide margin.Campaigns sell different products. A campaign pushing low-margin SKUs needs a higher floor than the store average suggests.
  • Adding platform ROAS figures together.Attribution windows overlap, so one order can be claimed by several platforms. Platforms claim credit for up to 140% of actual revenue (per the sources cited on The Math).
  • Counting existing customers as acquisition.Retargeting and branded search inflate ROAS with sales that may have happened anyway. Split new from returning before judging.
How Blufire automates it

Creative and channels ranked on margin, not platform ROAS.

Section S10, Creative Analytics, ranks every creative attribute (hook, offer, CTA style, visual style, media type) by CM1-ROAS alongside spend, CTR, CPM and fatigue. The note under the ranking is explicit: the figures are never Shopify or platform-reported. An offer-led versus no-offer view compares the two sides directly.

At channel level, the Channel Read in S6 Marketing / Channels prices every source in CM1-MER, contribution margin over spend, so the account-level check runs on margin too.

  • Creative LeaderboardRanks every asset by the CM1 it earns rather than the ROAS the platform reports.
  • Winning AttributesShows what the earners have in common, so the next brief starts from evidence.
  • Fatigue BoardCatches decay before it burns budget, with a Refresh Queue for what to replace next.
  • Spend reconciliationReconciles platform spend against what the data honestly shows.
See section S10, Creative Analytics→
S10 Creative Analytics · Attribute performance ranking
Blufire attribute performance ranking showing creative hooks ranked by CM1-ROAS with spend, CTR, CPM and fatigue

Real product screen, shown on sample data.

Proof
“…no request was too hard for them. Always clear communication and amazing results with the delivered product. Highly recommend Blufire.”
LGLeo GuerreroVinos of Uruguay
Google review
Easy TigerNZ$330kin new revenue, ROAS 4 to 11, once the attribution was fixedRead the case study →

5.0 on Google · 100+ businesses · $153M revenue influenced

FAQ

Questions operators ask.

ROAS equals the revenue attributed to a campaign divided by what the campaign cost. A$40,000 of attributed revenue on A$10,000 of spend is a 4.0x ROAS. It measures revenue per ad dollar, not profit, so it only means something next to a break-even ROAS set by your margin.
Divide 1 by your contribution margin before marketing (CM2), written as a decimal. At a 30% CM2 the floor is 1 ÷ 0.30, about 3.33x. Below that, each order loses money once ad spend is paid. Use CM2 rather than gross margin, or the floor comes out too low.
Multiply ROAS by your CM2 percentage. A 4.0x ROAS on a 30% CM2 is a POAS of 1.2, so each ad dollar returns A$1.20 of margin. A POAS above 1.0 means the campaign covers its variable costs; below 1.0 it loses money on every order.
Each platform counts the revenue it claims, using its own attribution window and model, and those windows overlap. Meta over-reports roughly 26% above third-party analytics on average, and Google Ads runs 15% to 20% high under modelled conversions, per the sources cited on The Math.
POAS, whenever margins differ across products or campaigns, which for most stores is always. ROAS is still useful for comparing campaigns selling the same product at the same margin. Neither fixes attribution: both inherit whatever the platform over-claims, so pair them with incrementality testing.

Ready to see what you are actually keeping?

Free for 30 days. Free to install.