Ask ten media buyers what a good ROAS is and you will get ten confident answers — 2x, 3x, 4x, "depends on the niche." All ten are wrong in the same way: they are quoting a number that belongs to someone else's business. A 3x ROAS is a triumph for one store and a slow bleed for another, and the difference is not the ads. It is the margin.
This post gives you the only honest answer to "what is a good ROAS?": a formula you compute from your own numbers in five minutes, and the reasoning to defend it when someone quotes a benchmark at you.
The Only Formula That Matters: Break-Even ROAS
ROAS is revenue divided by ad spend. The question "is 3x good?" really means "after the product cost comes out of that revenue, is there anything left to pay for the ads?" That is a margin question, and it has a clean answer:
Break-even ROAS = 1 / gross margin
If your gross margin is 50%, every $1 of revenue carries $0.50 that can absorb ad cost. To cover $1 of ad spend you need $2 of revenue. Break-even ROAS: 2.0x. Below it you lose money on every sale; above it you start keeping some.
Here is the formula worked at three margin levels — illustrative math, not benchmarks:
| Gross margin | Break-even ROAS (1 / margin) | A 3x ROAS means… |
|---|---|---|
| 30% | 3.33x | You are losing money |
| 50% | 2.0x | You keep $1 of every $3 |
| 70% | 1.43x | You keep $1.57 of every $3 |
Read that table again. The same 3x ROAS is a loss at 30% margin and a healthy return at 70%. Anyone who answers "what is a good ROAS?" without asking for your margin first is guessing.
Why Industry Benchmarks Are Gossip, Not Guidance
"The average ROAS in fashion is X" is a sentence that should set off alarms. Even when such a number comes from real data, it averages businesses with wildly different margins, repeat-purchase rates, price points, and channel mixes. A dropshipper at 25% margin and a brand selling its own manufacture at 75% margin can sit in the same "fashion" bucket — and they need targets more than 2x apart just to break even.
Worse, benchmarks create two failure modes:
- False comfort. You hit the "industry average," feel good, and keep scaling a campaign that sits below your break-even.
- False alarm. You sit "below average," panic, and kill a campaign that is comfortably profitable at your margin structure.
The benchmark tells you nothing about whether money is being made. Your margin does. Target ROAS must come from your P&L, not from a conference slide.
Gross Margin Is Optimistic — Use Contribution Margin
Gross margin (revenue minus cost of goods) is the textbook input, but it flatters you. Between the sale and the profit there is a queue of variable costs that scale with every order: shipping, payment processing fees, packaging, returns and refunds, marketplace or platform fees.
Contribution margin subtracts all of those. Illustrative math: a $100 order with 50% gross margin leaves $50. Take out $8 shipping, $3 payment fees, $2 packaging, and an average of $4 per order absorbed by returns. You are left with $33 — a 33% contribution margin. Your real break-even ROAS is not 2.0x. It is 1 / 0.33 ≈ 3.0x.
That is a brutal difference. A campaign running at 2.5x looked profitable under gross margin and is quietly losing money under contribution margin. When you compute your break-even, use the margin that survives all per-order costs — it is the only one the bank account agrees with.
A High Platform ROAS Can Still Lose Money
Two failure modes stack here, and together they explain most "we had great ROAS and somehow no profit" stories.
First, platform ROAS is inflated. Google and Meta each claim conversions the other also claims, count view-through conversions, and model the gaps. The number in the dashboard is routinely higher than revenue-in-the-bank divided by spend. If your break-even is 2.5x and the platform shows 2.8x, your real ROAS may already be below water.
Second, the platform optimizes revenue, not margin. A Target ROAS bidding strategy will happily hit its target by selling your lowest-margin, highest-return-rate products — the target was met, the contribution was not. The dashboard says 4x; the products that made the 4x carry 20% contribution margin and needed 5x.
The fix is one discipline: judge campaigns by real ROAS against your contribution-margin break-even, computed from your own clicks and your own orders — refunds subtracted. This is precisely what Decisa's attribution pipeline exists for: every order matched to the click that produced it, so the ROAS you compare against your break-even is the one your bank statement confirms.
Setting an Actual Target, Not Just a Floor
Break-even is the floor, not the goal — at break-even you work for free. To set a target, decide what share of revenue you want to keep as profit and extend the same formula:
Target ROAS = 1 / (contribution margin − desired profit share)
Illustrative math: at a 40% contribution margin, wanting to keep 10% of revenue as profit gives 1 / (0.40 − 0.10) = 3.33x. Wanting 15% gives 1 / 0.25 = 4.0x. Same business, two legitimate targets — the difference is ambition, not arithmetic. New-customer campaigns where repeat purchases are common can justify a target closer to the floor; that is a deliberate decision about lifetime value, made with the formula in hand, not a vibe.
Find Your Number This Week
- Compute contribution margin per order: revenue minus COGS, shipping, payment fees, packaging, and average refund cost. Do it per product line if margins vary widely.
- Derive your break-even ROAS: 1 divided by that margin. Write it down where the whole team sees it.
- Pick a target above the floor using the profit-share formula, and configure it in your bidding strategies.
- Measure against real ROAS, not platform ROAS — first-party clicks joined to actual orders, refunds netted out — so the number you compare to your break-even is real.
- Recompute quarterly. Shipping rates, COGS, and refund rates drift; your break-even drifts with them.
"What is a good ROAS?" has no universal answer — and that is good news. It means the right answer is sitting in your own numbers, one division away, where no competitor and no benchmark report can see it.