"meta says my best month ever. my accountant found a $15k loss."
That is not a hypothetical. A Shopify brand came to DTC growth operator Curtis Howland showing 4.2x ROAS on Meta and thought things looked amazing. He pulled the contribution margin picture the ROAS column hides: a 35% new-customer ratio, so 65% of the "conversions" were returning customers who probably would have bought anyway; COGS at 48%; platform fees eating another 8%. The 4.2x ROAS translated to a $15,000 loss that month. His line for it: "When Meta says ROAS is 4x and your P&L says you lost money, your P&L is right."
This is for the founder-operator at the first real scaling push, and the growth lead whose CFO has started asking the question nobody in marketing can answer. You are about to raise a budget on a healthy-looking ROAS. Here is the check the raise should pass first: contribution margin, per product, before the money moves. The calculator at the bottom does the arithmetic from numbers you already have.
Key Takeaways
- → Contribution margin for a Shopify order is price minus COGS, shipping and fulfilment, payment and platform fees, returns and discounts, before ad spend. Most brands have it for the store. Almost none have it per SKU.
- → Break-even ROAS is 1 ÷ contribution margin, and it is a per-product number. An account-level break-even of 2.5x hides the 21%-margin SKU that loses money at 4x.
- → The same ROAS on four products can mean scale, stop, wait-for-repeat and don't-strand-the-budget. Margin is the first gate; repeat behaviour and stock cover are the second and third.
- → The scale-readiness check runs economics first. If a SKU fails it, "no increase" is the decision, and constraining, re-pricing or clearing are the moves.
Contribution Margin, Defined for a Shopify Order
Revenue is what Shopify shows. Contribution margin is what you keep from an order before you pay for the ad that brought it. Everything between the two is variable cost, and there is more of it than the ROAS column suggests.
For one order of one product:
Contribution margin = price − discount − COGS − shipping and fulfilment − payment and platform fees − the expected cost of returns.
Worked on a $60 product:
| Line | Per order | Note |
|---|---|---|
| List price | $60.00 | |
| Average discount (10%) | −$6.00 | Welcome codes, sale weeks, bundles |
| COGS (landed) | −$18.00 | Product plus freight and duty |
| Shipping and fulfilment | −$7.50 | Postage, pick-pack, packaging |
| Payment and platform fees (~4%) | −$2.16 | Processing plus Shopify's cut on the net price |
| Expected returns cost (8% return rate) | −$2.88 | You refund the price and eat the shipping both ways |
| Contribution margin per order | $23.46 | 43.4% of net revenue, before ad spend |
Two things people forget. Discounts come off the top, so a 10% code is a 10% cut in revenue but nearly a 25% cut in this product's contribution. And returns cost more than the refund: the outbound shipping is gone, the return label is yours, and the unit may not go back on the shelf.
Now do that for each product, or at least for each margin band. That is the version most brands have never computed, and it is where the scaling decision actually lives.
Break-Even ROAS per SKU, Not per Account
Break-even ROAS = 1 ÷ contribution margin %. At 43.4% margin, this product breaks even at 2.30x. Every point of platform ROAS above that is contribution; every point below is a subsidy.
| Contribution margin before ads | Break-even ROAS | A 4.2x ROAS means |
|---|---|---|
| 20% | 5.00x | A loss on every order |
| 30% | 3.33x | Thin, and one discount away from a loss |
| 40% | 2.50x | Comfortable |
| 50% | 2.00x | Room to scale into a falling marginal number |
| 60% | 1.67x | Very profitable; the ceiling is stock or demand, not economics |
Here is why the account-level version is dangerous. Say your blended margin is 40%, so the store breaks even at 2.5x, and the ad account runs at 4x. Healthy. But the catalog is a mix: a 62%-margin hero and a 21%-margin accessory line that gets a third of the spend because it converts well. The accessory line breaks even at 4.8x. It is losing money at 4x, and the account average is laundering it. Sean Frank of Ridge puts the floor at the account level as "You need to be able to survive, I think, a 1.5X ROAS"; the per-SKU version of his rule is that you need to know which products survive it.
A published profit-analytics example makes it concrete: a t-shirt at 3.5x ROAS, with 25% returns and $10 shipping, that loses $2.40 on every sale once COGS is in. The ROAS column will never show you that. Only the margin math does.
Same ROAS, Four SKUs, Four Different Decisions
Take four products all running at 4.2x platform ROAS. Same number, four different calls.
| Product | Contribution margin | Break-even ROAS | The other facts | Decision at 4.2x |
|---|---|---|---|---|
| A | 62% | 1.6x | 90 days of stock, steady conversions | Scale. Passes economics, stock and volume; the only question is the marginal read |
| B | 21% | 4.8x | Converts well, sits in the same catalog campaign | Stop. 4.2x is a loss on every order; constrain exposure or fix the offer economics |
| C | 38% | 2.6x | First-order ROAS actually 2.2x, but customers who start here repeat at three times the store average | Wait for the cohort. Below break-even on the first order; the 90-day cohort by first product decides |
| D | 55% | 1.8x | Eight days of stock left, restock in three weeks | Don't raise. Scaling strands the budget on a sold-out page in a week |
That is the whole argument in one table. The same ROAS should not lead to the same budget decision, and the ad platform cannot make the distinction because it holds none of the columns except the last one.
Product C deserves a word, because it is where operators either get brave or get burned. Buying a customer below first-order break-even is correct when the repeat behaviour of customers who start on that product pays it back inside a window you can afford. That is a cohort question: LTV by first product, measured on Shopify orders, three, six and twelve months out. It is never a campaign-level question, because there is no reliable join from an ad to the order it caused. If you want the shape of the data, our repeat-purchase benchmarks by month show how far first products diverge.
The Scale-Readiness Check, With Margin as the First Input
Every budget increase should pass this, in this order. The order matters: economics runs first because if a product fails it, nothing downstream can save the raise.
| Gate | Pass looks like | Fail looks like |
|---|---|---|
| 1. Economics vs your real target | The products the spend lands on clear their break-even with room, at the ROAS you actually run at (not the one you hope for) | A meaningful share of the spend sits on SKUs below break-even, or the raise only works at a target the account has never hit |
| 2. Conversion volume and stability | Enough orders in the window that the ROAS reading is not one big basket | A "4.2x" built on nine orders |
| 3. Time since the last material edit | A full conversion cycle since the last budget, creative or audience change | You changed something on Tuesday and it is Thursday |
| 4. Stock cover | Weeks of cover on the products the raise will sell, at the higher run rate | Days of cover; the raise sells out the hero and the ads keep spending. That leak is its own piece: ad spend on out-of-stock products |
| 5. New-customer share of that product's orders | Most of the product's orders are first orders, so the spend is buying growth | Howland's 35%: two-thirds of the "conversions" are existing customers the ad did not need to reach |
| 6. Marginal ROAS trend so far | The last step earned close to the average | The last step earned a fraction of the average. How to read it |
Gate 5 is measured from Shopify orders at shop or product level, or from the platform's own new-customer reporting at account level. It is never measured per campaign or per ad, because the ad-to-order join does not exist and pretending otherwise is how the 4.2x month happened.
What to Do When a SKU Fails the Check
Three moves, and a fourth that is the most under-used decision in paid media.
- → Constrain exposure. Exclude it from the scaled catalog campaign or product set, give it a custom label with a lower target, or cap the budget of the campaign it lives in. You are not killing the product. You are stopping the ads from buying it below cost.
- → Fix the offer economics. A price change, a bundle that lifts the order value, a shipping threshold that cuts fulfilment cost per order, or a smaller default discount. Recalculate the margin after every one of these; a "10% off" test is a margin decision wearing a conversion-rate costume.
- → Clear within margin rules. If it is stock you need gone, set the ROAS floor at break-even for that SKU, treat the spend as harvest rather than growth, and stop the moment the floor breaks.
- → Don't increase. Not "increase 10% and watch". Leave the budget where it is and put the effort into the gate that failed. No raise is a decision, and on a failing SKU it is usually the right one.
Where the Numbers Come From on a Shopify Stack
You do not need a data team for this. You need three sources and one spreadsheet.
- → Orders, order items, inventory: direct from Shopify. Revenue by product, discounts as applied, refunds, units on hand by variant. High confidence.
- → Margins: yours to provide. Shopify does not hold landed COGS in a form you can trust, and Datadrew does not ingest COGS or compute contribution margin. A margin-band sheet per SKU (A: over 55%, B: 40–55%, C: under 40%) is enough to start, and it is the version you share with Drew.
- → Spend per product: approximate. Meta's product breakdown and Google's product report give spend per item for catalog and Shopping formats. Single-product ads map to a product by landing page or creative subject. Datadrew holds spend at campaign, ad and account level and allocates it to products by approximation, so treat per-SKU ROAS as a range and let the margin band do the deciding.
The account-level backstop still matters: blended ROAS on Shopify revenue tells you whether the whole business is efficient even when the per-product split is fuzzy. What it can and can't tell you, and how to set the break-even MER for the store as a whole.
Contribution Margin and Break-Even ROAS Calculator
Enter one product. Everything below is computed from your inputs; nothing is pulled from your store.
Per-SKU contribution margin and break-even ROAS
Any currency. Returns are assumed to refund the price and cost you the shipping and fees.
Computed from your inputs. Datadrew does not ingest COGS; the margins Drew works with are the ones you share with it. Per-product ROAS is an approximate split.
How Drew fits. Share your margin bands with Drew and ask which products can afford the next budget increase. Its budget recommendations weigh the margins you share, stock cover and repeat behaviour, not platform ROAS alone, and Drew knows the Shopify business behind the ads: orders, inventory by variant, and cohort repeat by first product, next to Meta and Google spend, refreshed daily. Finding the SKUs sitting below break-even is an analysis you run or ask Drew to run against the bands you have shared; it is not a sweep Drew runs on its own, and Drew does not compute your contribution margin from COGS it doesn't hold. Per-product spend is an approximate split, and Drew says so when it shows it.
To see it on your own catalog, pricing is published and flat and the free plan doesn't need a card.
Key Takeaway
ROAS is a revenue multiple. What you keep is contribution margin: price minus discount, COGS, shipping and fulfilment, fees and the expected cost of returns, before ad spend. Break-even ROAS is 1 ÷ that margin, and it is a per-product number, because a 4x account can hide a 21%-margin SKU losing money on every order. Before any budget increase, run the readiness check with economics first: per-SKU margin against your real target, then conversion volume, time since the last edit, stock cover, new-customer share and the marginal read. The same ROAS on four products can mean scale, stop, wait for the cohort, or don't strand the budget. If a product fails the check, no increase is the decision, and the work is on the gate it failed.
Frequently Asked Questions
Walk me through contribution margin for a Shopify store. What am I forgetting?
Start with the net price after the discount actually applied, then subtract landed COGS (product plus freight and duty), shipping and fulfilment per order (postage, pick-pack, packaging), payment and platform fees, and the expected cost of returns (the refund plus the shipping both ways, weighted by your return rate). The lines people forget are the discount coming off the top, the return label, and platform fees charged on the net price. Do it per product or per margin band, not just for the store.
What contribution margin do I need before increasing ad budget?
Enough that the products the increase will sell clear their break-even ROAS (1 ÷ margin) at the ROAS the account actually runs at, with room for the marginal figure to fall as you scale. At 40% margin, break-even is 2.5x; if the account runs at 3x and the last budget step earned 2.2x, the increase does not pass. Margin is the first gate; stock cover, new-customer share and the marginal trend follow it.
Is ROAS or contribution margin more important?
Margin decides what ROAS means. A 4x ROAS is excellent at 60% margin (break-even 1.67x) and a loss at 20% margin (break-even 5x). Use platform ROAS for direction inside a channel and Shopify-based blended ROAS for whether the business is efficient, but let per-product contribution margin decide where the next budget increase goes.
My ROAS is good but I'm losing money. Why?
Usually one of three things. Returning customers are inside the "conversions", so the ads are being credited for revenue that would have arrived anyway (Howland's client had a 35% new-customer ratio). Or the spend is landing on low-margin products whose break-even sits above the ROAS you are hitting. Or discounts, returns and fees have pushed the real margin well below the number in your head. Compute contribution margin per product and the answer is usually in the table.
What is break-even ROAS and how do I calculate it per product?
Break-even ROAS is the return on ad spend at which an order's contribution margin exactly covers the ad cost that produced it: 1 ÷ contribution margin %. Calculate the margin per product from net price, COGS, shipping and fulfilment, fees and returns, then invert it. A 43.4% margin product breaks even at 2.30x; a 21% margin product at 4.76x. The calculator above does it for one SKU at a time.
Should I keep advertising a product that is below break-even on the first order?
Only as a deliberate acquisition subsidy with a measured payback: if customers whose first order is that product repeat strongly enough that the 90-day cohort covers the first-order loss. Measure that at product and cohort level from Shopify orders, never per campaign or per ad, and set a floor on how far below break-even you will go and for how long.
Written by Sumit Bansal, co-founder of Datadrew. Published 3 September 2026. Quotes are linked to their sources inline. Margins in Datadrew are the ones a merchant shares; we don't compute contribution margin from COGS, and we don't claim campaign-level LTV or CAC.