Marjn/Blog/Why a good ROAS still loses money
Ad spend10 min readAugust 21, 2026

Why a 3.8 ROAS Still Lost $1,082: The Break-Even ROAS Trap

Ask Shopify Sidekick how an ad campaign did and it will tell you the ROAS. Ask Marjn whether that campaign made money and you can get a very different answer. A 3.8x ROAS is a number most store owners would be happy with. Here is a real one that lost more than a thousand dollars, and the single piece of math that would have caught it in advance.

A 3.8x ROAS in Meta Ads Manager next to Marjn showing a $1,082 true loss after ad spend
In one line

A 3.8x ROAS can lose money because ROAS is a ratio against revenue, not profit. If your break-even ROAS is higher than the ROAS you got, the order is a loss. Break-even ROAS equals one divided by your gross margin, so a store at a 20 percent margin needs roughly 4.9x just to break even. At 3.8x that store keeps less than it spent, which is how $18,400 in sales turned into a $1,082 loss.

How do I know my break-even ROAS? Divide one by your true gross margin. A 50 percent margin breaks even at 2.0x, 33 percent at 3.0x, 25 percent at 4.0x, and 20 percent at 5.0x. Any ROAS below that line loses money.

The short version

  • ROAS measures revenue returned per ad dollar, with none of your costs subtracted.
  • Break-even ROAS equals one divided by your gross margin. Below it, you lose money.
  • A real store did $18,400 in sales at a 3.8x ROAS and lost $1,082, because its break-even ROAS was 4.9x.
  • Meta does not know your product costs, shipping, discounts, fees, or refunds. Marjn does.
  • A single store-wide ROAS target hides the products that are underwater. The right floor is per product.

ROAS is the metric everyone watches because the ad platform hands it to you, updated in real time, quietly implying that bigger is always better. It is useful for judging one ad against another. It is dangerous for judging whether you made money, because it has none of your costs in it. A ratio of revenue to spend can only ever tell you how much revenue an ad bought, never how much of that revenue you got to keep. The clearest way to see the trap is to watch a real campaign fall through it. These numbers come from a store owner who posted them publicly after a strong-looking month ended with less cash than it started (Shopify Community).

The waterfall: $18,400 in revenue, minus $1,082 in profit

That store spent $4,842 on Meta ads and got back $18,400 in attributed revenue. Revenue divided by spend is 3.8x. On the ad dashboard, a good month. Now watch the actual costs come out of that $18,400.

LineAmountRunning total
Attributed revenue$18,400$18,400
Cost of goods sold−$7,360$11,040
Shipping and fulfillment−$2,200$8,840
Discounts applied−$1,650$7,190
Payment processing fees−$620$6,570
Returns and refunds−$810$5,760
Meta ad spend−$4,842$918
Overhead share for the period−$2,000−$1,082

The same campaign that showed 3.8x finished at a loss of $1,082. Nothing went wrong operationally. The store spent money to generate revenue that did not carry enough margin to cover the spend, and the ad platform had no way to know, because it only ever saw the top line.

Meta does not know your costs. The ad manager sees the revenue it can attribute to a click. It does not see your landed cost, shipping subsidies, discount codes, payment fees, or refunds. Every one of those came out of the $18,400 above, and none exist in the 3.8x figure. This is exactly the gap Marjn was built to close.

The number that would have caught it: break-even ROAS

One figure predicts this before you spend a cent. Break-even ROAS is the return you need for an order to make exactly zero profit. It equals one divided by your gross margin.

Gross marginBreak-even ROASWhat a 3.8x ROAS means
60%1.67xProfitable
50%2.0xProfitable
40%2.5xProfitable
33%3.0xProfitable
26%3.8xExactly break-even
20%5.0xA loss

Now the loss makes sense. That store ran on roughly a 20 percent gross margin once landed cost, shipping, discounts, fees, and returns were counted. At 20 percent, break-even ROAS is 5.0x. The campaign returned 3.8x. It was always going to lose money, and the break-even math would have said so. The 3.8x was not a good result that went wrong. It was a losing result that looked good.

This is why "is a 4x ROAS good?" has no answer without your margin. At a 25 percent margin, 4x is exactly break-even and makes nothing. At a 50 percent margin, 4x is comfortably profitable. The ROAS number alone tells you nothing until you compare it to your own floor, which is set by your true margin.

Know your break-even ROAS per product

Marjn calculates your true margin from your Shopify order revenue, your landed cost, and your connected Meta ad spend, then answers it inside Shopify Sidekick. Ask which products are still profitable after ads and get a real number instead of a ratio. Free plan, no card.

Get Marjn free →

Why a store-wide ROAS target still fails you

Once you learn the formula, the common next move is a single account target: "hold above 4x." Better than nothing, and still a trap, because margins are not uniform across your catalog.

Imagine two products. One is high-margin at 55 percent, break-even ROAS 1.8x. The other is a thin accessory at 22 percent, break-even ROAS 4.5x. Set one store-wide target of 4x and you kill campaigns on the high-margin product that were making good money at 3x, while funding campaigns on the thin product that are losing money at 4x. A single number applied to mixed margins is wrong in both directions at once.

The honest version is a break-even ROAS per product, so each campaign is judged against the floor that applies to it. That is a lot of arithmetic to keep current by hand, which is why it rarely gets done and losing campaigns run for weeks. Marjn holds every product's true margin for you, so the floor is always current and you can ask Sidekick which products you are funding at a loss right now.

The reported ROAS is often generous on top of everything else

The waterfall took 3.8x at face value and still found a loss. In practice the reported number is frequently better than the real one, which makes the gap wider than the example shows. The reason is attribution: when Meta reports a sale, it claims credit for a purchase within its attribution window after someone saw or clicked an ad. Some of those buyers would have purchased anyway. Some found you through search, a friend, or an email and merely passed an ad on the way. The platform counts the sale as ad-driven revenue because it is built to show its own work in the best light.

This does not mean the ad manager is lying. It means the reported ROAS is a platform-friendly estimate, not an audited fact, and it sits on top of the cost blindness already described. If your break-even ROAS is 4.9x and Meta reports 3.8x, the real return once you strip out the sales the ad did not cause might be lower still. The practical move is not to chase perfect attribution, which is its own rabbit hole, but to treat the reported ROAS as an optimistic ceiling and insist on a comfortable margin above break-even rather than hugging the line. A campaign that only just clears break-even on reported ROAS is very likely underwater once the sales the ad did not truly drive are removed.

Why the true margin is the number under all of this

Everything in this post traces back to one input: your true gross margin. It sets the break-even ROAS. It decides whether a 4x is a triumph or a break-even. It is the thing Meta cannot see and the thing a store-wide target ignores. Get it wrong, and every downstream decision is wrong with it, which is why a store with a sloppy or empty cost-per-item field is effectively flying blind on ads no matter how carefully it watches ROAS.

That is the input Marjn exists to get right. It applies the landed cost you set per product, not the supplier sticker, and holds it even when Shopify's field is blank, so the margin it reports is the real one. From there the break-even ROAS falls out automatically, per product, and stays current as prices and costs change. You are no longer maintaining a fragile spreadsheet of floors that goes stale the day you run a sale. You ask, and the answer reflects today.

The same product, two campaigns, opposite results

To make the per-product point concrete, take one product and run it through two campaigns. Say it sells for $60 with a true gross margin of 40 percent, which puts its break-even ROAS at 2.5x. That is the floor for this specific product, whatever your store-wide target is.

ScenarioReported ROASvs floor 2.5xResult per $1,000
Retargeting warm buyers4.2xAbove the floorProfit ~$680
Cold prospecting2.1xBelow the floorLoss ~$160

Same product, same margin, same store. Retargeting clears the floor and makes money. The cold campaign sits below it and loses money on every thousand dollars you feed it. Judge both against a blended account ROAS of 3.0x and you see one number that hides the split. This is the kind of thing you can ask Marjn directly: it knows this product's true margin, so it can tell you which campaigns are above the 2.5x floor and which are below, instead of leaving you to average a number that is wrong for both.

Scale that across a catalog with dozens of products at different margins and it becomes clear why so much ad spend runs at a quiet loss. The losing campaigns are not obviously bad. They post respectable ROAS figures. They just post them below a floor nobody is calculating for that specific product, which is exactly the calculation Marjn keeps current for you.

The macro reason this keeps happening

Break-even ROAS is not static, and it has moved against store owners for years. Ad prices are up more than 30 percent since the end of 2022, and Meta CPMs peaked above $25 in late 2025 (Eightx, 2026). Median direct-to-consumer customer acquisition cost now runs $130 to $156 (Eightx, 2026). When the cost of a customer rises and the price on the product does not, your effective ROAS drifts down toward break-even and eventually crosses it. It reaches the largest brands too: the median public direct-to-consumer company ran a negative operating margin last year on a 47 percent gross margin. Their ROAS dashboards looked fine. Their P&L did not.

How to read your ad manager without fooling yourself

You can keep using Meta's dashboard. You just have to translate what it shows into what it means for your bank account. Three habits do most of the work, and Marjn is built to make each one a glance rather than a spreadsheet.

1 Put break-even ROAS next to the reported ROAS

Every time you look at a campaign's ROAS, look at the break-even ROAS for the products it sells in the same glance. A 3.5x means nothing until it is sitting beside a 2.0x floor (great) or a 4.5x floor (a loss). Because Marjn already holds each product's true margin, that floor is a question you can ask, not a calculation you have to redo every week.

2 Watch blended profit, not just per-campaign ROAS

Per-campaign ROAS can look fine while the account as a whole loses money, because retargeting campaigns often show inflated returns by claiming credit for sales cold campaigns paid to create. Total spend against total contribution margin for the period is the number that cannot be gamed by moving credit between campaigns, and it is the number Marjn reports across the store.

3 Require headroom above break-even

Because the reported ROAS is optimistic, a target that merely matches break-even loses money in reality. Decide how much margin of safety you want above the floor and hold campaigns to that higher bar. The thinner your margin, the more headroom you need, because a low-margin product has a high break-even ROAS and very little room for error.

What to do with this

1 Calculate your true gross margin

Use landed cost, not the supplier sticker, and include the costs the ad platform ignores. Marjn does this per product so the number is right before you set a floor.

2 Set the break-even floor, per product where you can

One divided by the margin gives the floor. Do it for your top sellers first. Any campaign below the floor for that product is losing money, full stop.

3 Judge campaigns against the floor, not against zero

A 3.8x ROAS is not a pass mark. It is only a pass mark if it clears your break-even ROAS for that product. Turn off the ones buying revenue at a loss.

The deeper point is that revenue is not profit, and Shopify's dashboard shows you the first, not the second. The full picture of where the money goes is in why your Shopify store is not profitable, and if you suspect the campaigns losing money are on your most popular products, you are probably right: why your bestseller is your biggest loser.

None of this asks you to abandon ROAS. It asks you to stop reading it in isolation. A ROAS with a break-even floor beside it is a genuinely useful signal, because now the ratio has something to be measured against. That is the small shift that turns ad reporting from a vanity number into a profit decision, and it is the shift Marjn is built to make routine: every product carries its true margin, so every campaign has a floor, and the question "did this make money" stops being a quarterly spreadsheet and becomes something you can ask in the moment you are about to scale or kill the campaign.

Frequently asked questions

Can you have a good ROAS and still lose money? Yes. ROAS is measured against revenue, not profit. If the return is below your break-even ROAS, the order loses money even when the number looks strong.

What is break-even ROAS and how do I calculate it? One divided by your gross margin. A 50 percent margin needs 2.0x, 33 percent needs 3.0x, 25 percent needs 4.0x. Use true gross margin based on landed cost.

Why does Meta report a higher ROAS than my real profit suggests? Meta only knows the revenue it can attribute to an ad, with none of your costs removed. It also claims credit for some sales the ad did not cause.

Is a 4x ROAS good? It depends on your margin. At 25 percent it is exactly break-even; at 50 percent it is comfortably profitable. There is no universal good ROAS, only your own floor.

How does Marjn help with break-even ROAS? It calculates your true margin per product from Shopify revenue, landed cost, and connected Meta ad spend, and answers which products are still profitable after ads inside Sidekick.

HomeBlogPrivacyTerms·Marjn by Extensions Market