The same business, four different break-even ROAS numbers
A $100 AOV product with a 50% gross margin, 3% fees, a 7% shipping subsidy, and 5% returns keeps an effective contribution margin of (50 − 3 − 7) × 0.95 = 38% of attributed revenue. Its break-even ROAS is 1 ÷ 0.38 ≈ 2.63× — every attributed sale below that multiple loses money — and its max CAC is 38% of revenue, or $38 on a $100 order. Held at 100% paid attribution, that one margin stack produces four floors, not one. Each answers a different question, and quoting the wrong one is how a 3× campaign gets signed off as profitable.
Four break-even ROAS floors from one ecommerce input set, and the question each floor answers| Floor | Value | What it tests |
|---|
| Marginal floor | 2.63× | Does one more attributed sale pay? |
|---|
| Business-level floor | 3.85× | Does the month clear fixed overhead? |
|---|
| Target ROAS | 6.25× | Does it leave the net margin you want? |
|---|
| Break-even MER | 26% | Total spend against total revenue, unattributed. |
|---|
The gap between the first two rows is entirely the 12% of revenue that fixed overhead takes before ads get a share: the same 38% margin funds a 2.63× floor per sale but a 3.85× floor per month.
Read the subtraction behind that: a 38% return-adjusted margin minus the 12% of revenue that overhead takes leaves 26% to fund ads — and with every sale attributed to paid, 1 divided by that share is the 3.85× floor. The engine divides paid share by available margin, so attributing less of the revenue to paid lowers that floor. Because overhead comes out of that denominator, the business-level floor does not rise in step with overhead, and it cannot be scaled off the marginal floor by a fixed multiple.
Mixing the first two rows up is the most common reading error. The marginal floor (Simple ROAS Floor mode) answers whether one more ad-driven sale pays for itself — it needs only your effective contribution margin. The business-level floor (Full P&L mode) asks whether the whole month clears fixed overhead, and two forces pull it in opposite directions: overhead raises it, while a paid-attributed revenue share below 100% lowers it, because the ad budget is funded by margin on all your revenue while only the paid slice is measured against ROAS. On this 38% margin stack, $12,000 of overhead against $100,000 of revenue lifts the floor from 2.63× to 3.85× at 100% paid attribution — but the same stack at 60% paid attribution floors at 2.31×, below the marginal one. Neither floor is automatically the stricter one, so plan against whichever is higher: a campaign can clear the marginal floor and still bleed the P&L, and when fixed overhead eats a wide enough slice of your margin the diagnosis card calls that out.
If an agency’s target sits below your business-level floor, that is usually because agencies quote a marginal or platform ROAS that ignores fixed overhead altogether. Budget against whichever of the two floors is higher: the marginal floor is what each extra sale has to clear, while the business-level floor is the paid ROAS at which your monthly P&L breaks even, once attributed ad revenue matches the paid share you entered.
The fourth row is the attribution-free cross-check. Break-even MER measures total spend against total revenue, so it cannot be gamed by overlapping attribution windows the way per-channel ROAS can — and when several channels each claim the same sale, that double-counting is exactly what inflates per-channel ROAS. Cross-check against blended MER (ad spend ÷ total revenue), then use SKU / Channel mode for per-channel floors and MER to cap total spend. It is worth the second look because platform-reported ROAS may over- or under-attribute revenue (attribution windows, view-through conversions, channel overlap) and usually excludes returns, refunds, fees, taxes, shipping, and chargebacks.
Two modelling assumptions sit under that table. The full P&L model treats fixed overhead as constant for the month and spreads it against total revenue, and only the paid-attributed share of revenue answers to ROAS. The four modes are independent models that share identities, not one merged dataset — each uses its own inputs, exactly as exported to the workbook.
Feed tROAS bidding the 6.25× target, not the 3.85× floor
A floor only keeps you at zero; the target reserves your desired net margin first. On the margin stack above at 100% paid attribution, that corridor runs from a 3.85× business-level floor to a 6.25× target once a 10% net margin is reserved. Bidding to the floor in Google or Meta target-ROAS bidding and then wondering where the profit went is a classic ecommerce mistake.
Break-even ROAS is the minimum return that covers your costs with zero profit. Target ROAS builds your desired net margin on top of it, so within a given mode it is never below the floor — at a 0% target the two coincide, and above that the gap widens faster than the margin you reserve, because that margin comes out of the denominator: reserving 10% here lifts a 3.85× floor to a 6.25× target. This calculator computes both, plus the marginal (ad-only) and business-level (after fixed overhead) versions of each — and which of those two binds depends on your overhead and on how much of your revenue is paid-attributed, so plan against the higher one.
A 20% return rate adds $0.63 of required revenue per $1 of spend
Returns scale the contribution margin multiplicatively — a returned order is assumed here to lose its full contribution — so the floor rises faster than the return rate does, and every further five points costs more than the five before them. The first five take the floor from 2.50× to 2.63×; the five from 15% to 20% take it from 2.94× to 3.13×.
Effective contribution margin and break-even ROAS at return rates from 0% to 20%, on a 50% gross margin with 3% fees and a 7% shipping subsidy| Return rate | Effective contribution margin | Break-even ROAS | Extra revenue needed per $1 of spend |
|---|
| 0% | 40% | 2.50× | $0.00 |
|---|
| 5% | 38% | 2.63× | $0.13 |
|---|
| 10% | 36% | 2.78× | $0.28 |
|---|
| 15% | 34% | 2.94× | $0.44 |
|---|
| 20% | 32% | 3.13× | $0.63 |
|---|
Dividing 1 by gross margin authorises $1,200 of overspend per $10,000
The most common ROAS error is dividing 1 by gross margin. Fees, shipping subsidy and returns are not inside gross margin, and the gap between the two floors authorises real overspend.
Naive gross-margin ROAS floor against the contribution-margin floor across gross margins from 30% to 70%, with the resulting overspend at $10,000 of attributed revenue| Gross margin | Naive floor (1 ÷ GM) | True floor (3% fees, 7% shipping, 5% returns) | Overspend authorised at $10,000 revenue |
|---|
| 30% | 3.33× | 5.26× | $1,100 |
|---|
| 40% | 2.50× | 3.51× | $1,150 |
|---|
| 50% | 2.00× | 2.63× | $1,200 |
|---|
| 60% | 1.67× | 2.11× | $1,250 |
|---|
| 70% | 1.43× | 1.75× | $1,300 |
|---|
Dropshipping sits at the thin end of that table and uses exactly the same inputs: your supplier cost is the COGS, since there is no inventory to hold, alongside the payment-processing and marketplace fees your store actually pays. Thinner margins push the true floor higher and widen the gap to the naive one, which is precisely what this page is built to surface.
From 2.11× to 4.58×: what the fee and shipping stack does to the floor
At a 50% gross margin and a 5% return rate. Rows are the fee load; columns are the shipping subsidy you absorb.
Break-even ROAS grid at a 50% gross margin and 5% returns: rows are the platform and payment fee load, columns are the shipping subsidy absorbed| Fee load | Shipping 0% | Shipping 5% | Shipping 7% | Shipping 10% | Shipping 15% |
|---|
| 0% | 2.11× | 2.34× | 2.45× | 2.63× | 3.01× |
|---|
| 3% | 2.24× | 2.51× | 2.63× | 2.84× | 3.29× |
|---|
| 6% | 2.39× | 2.70× | 2.84× | 3.10× | 3.63× |
|---|
| 9% | 2.57× | 2.92× | 3.10× | 3.40× | 4.05× |
|---|
| 12% | 2.77× | 3.19× | 3.40× | 3.76× | 4.58× |
|---|
Which cell you are in is a question for your payout statements, not an estimate. Fee % is total processing and marketplace fees ÷ revenue (Stripe, Shopify Payments, Amazon referral/FBA); shipping subsidy is the shipping cost you absorb ÷ revenue; return rate is refunded orders ÷ orders for the same period.
Every percentage on this page — margin, fees, shipping, returns, discounts — is a share of revenue, and the grid assumes each holds across the volume range you are analysing. Fee schedules, return rates and fixed overhead also drift over time, so a cell you read once does not stay true on its own: refresh the inputs from real statements (Shopify, Amazon, Meta, Google Ads, Stripe, your processor).
At a $25 average order value, no bid clears
ROAS is a ratio and hides scale. Max CAC is the number a media buyer can actually bid to, and it collapses at low AOV.
First-order contribution, maximum break-even CAC and break-even ROAS across average order values from $25 to $250, at a 38% effective contribution margin and $12 fulfilment per order| AOV | First-order contribution | Max break-even CAC | Break-even ROAS |
|---|
| $25 | −$2.50 | — | — |
|---|
| $50 | $7.00 | $7.00 | 7.14× |
|---|
| $100 | $26.00 | $26.00 | 3.85× |
|---|
| $150 | $45.00 | $45.00 | 3.33× |
|---|
| $250 | $83.00 | $83.00 | 3.01× |
|---|
At a $25 AOV the $12 fulfilment cost exceeds the $9.50 of margin the order produces, so no bid clears. Every row above it is a real bid ceiling — and the LTV-adjusted max CAC raises that ceiling only as far as your cohort data will carry it. LTV assumptions are uncertain by nature: treat an LTV-justified CAC as a hypothesis to verify against real repeat behaviour, and watch the cash-payback window while you do.
A 3× campaign that clears the per-sale floor and misses the monthly one
At $2,500 of ad spend and $7,500 of attributed revenue (a 3.0× ROAS), profit after ads = 7,500 × 0.38 − 2,500 = $350 — about 14% above the marginal floor: profitable, but tighter than the headline 3× multiple suggests. Here is that worked example condensed into the five numbers a spend decision actually turns on.
- Effective contribution margin
- 38%
- Marginal floor
- 2.63×
- Business-level floor
- 3.85×
- Yesterday’s ROAS
- 3.00×
- Gap to the binding floor
- -22% against 3.85×
Loss-making — a 3× return clears the per-sale floor comfortably and still misses the monthly one by 22%, which is why the binding floor is the only one worth quoting before a budget step-up.
Read that verdict as relative, not absolute: no universal “good ROAS” exists, and every verdict here is measured against YOUR margin structure, never an industry benchmark. The optimistic and pessimistic scenarios move attributed revenue at constant spend, so treat them as a sensitivity band rather than a forecast — real-world scaling usually changes efficiency too. Those are the limitations worth stating plainly: this is an educational planning estimate, not bookkeeping, and it does not replace your P&L, your accounting records, or professional advice.
For the full order-level cost stack see the ecommerce profit calculator; for volume break-even see the break-even calculator; for lifetime acquisition economics see the LTV:CAC calculator.
Read the guides
For the full walkthrough of ROAS vs MER, the margin waterfall, and target-ROAS bidding with more worked examples, see Break-Even ROAS Explained for Small Business Advertising.
For the fees, shipping, and returns math that feeds this calculation, see Ecommerce Profit: Fees, Shipping, Ads, Returns, and Real Margin.
Sources and methodology
Both floors on this page are arithmetic on the margin, fee, shipping, return and overhead figures you enter. Nothing is fetched from an ad account, and no benchmark ROAS is imported from anywhere.
The one genuine outside definition here is ROAS itself, and it belongs to the ad platforms rather than to any regulator or standards body. Google defines it as conversion value divided by ad spend, which is why a platform-reported ROAS knows nothing about your cost of goods, fees or returns, and why the floor this page computes is almost always higher than the number the dashboard celebrates. The contribution-margin and fixed-overhead arithmetic that turns that definition into a floor is standard cost accounting, cited below.
Links open in a new tab.