Every Shopify operator has, at some point, looked at a Meta campaign running at a 2.1x ROAS and wondered: is this actually good, or am I losing money?
The answer depends on your breakeven ROAS, which is the exact return on ad spend you need to cover every cost on a given product or order. Below that number, the campaign is draining your margin. Above it, you are making money. The problem is that most brands use one store-wide breakeven ROAS number for every campaign, and that number is both wrong for reporting and useless for decisions.
This post explains what breakeven ROAS actually measures, why it has to be calculated per product, the full formula, and what to do with the number once you have it.
The short definition
Breakeven ROAS (often written as BER, for "breakeven ROAS") is the minimum ROAS at which revenue equals total cost on a product or order. It is the line between a profitable ad and a losing one. For a typical Shopify brand with 40-50% COGS, 2.9-3.5% payment processing fees, and 1-2% refund rate, BER usually lands between 2.0x and 2.5x. But the real number depends entirely on the specific costs of each product.
The formula
Here is the math, step by step. Breakeven ROAS is 1 divided by your net contribution margin, where net contribution margin accounts for every cost except ad spend.
All percentages are expressed as decimals of revenue. If net margin is 45%, BER = 1 / 0.45 = 2.22.
In plain English: if you keep 45 cents of every revenue dollar after all costs except ads, you need to generate $2.22 of revenue for every $1 of ad spend just to break even. Anything below 2.22x ROAS and you are losing money, even if the campaign looks superficially profitable on Meta's report.
Why store-wide BER is misleading
Most brands calculate a single breakeven ROAS using blended store-wide numbers: average COGS across all products, average processing fee, average refund rate. This gives you one number, say 2.2x, and you apply it to every campaign.
The problem: costs vary significantly by product. A t-shirt with 35% COGS and a 1% return rate has very different economics from a consumable skincare product with 60% COGS and a 5% return rate. The first product might break even at 1.7x, the second at 3.0x. If you use a store-wide 2.2x across both, you will kill profitable t-shirt campaigns and scale unprofitable skincare campaigns.
This gets worse at scale. Brands with 50+ SKUs often have products breaking even anywhere from 1.5x to 4x ROAS. Applying one number to all of them means half your decisions are wrong.
Worked example: two products, very different BER
Here is what per-product BER looks like in practice. Same store, two products, completely different thresholds.
Product A: premium vinyl record ($40 retail)
| Line | % of price |
|---|---|
| COGS (wholesale + packaging) | 38% |
| Shipping absorbed | 4% |
| Payment processing fee | 3.1% |
| Refund cost (at 2% rate) | 0.1% |
| Chargeback + dispute (at 0.3% rate) | 0.3% |
| Net margin | 54.5% |
| Breakeven ROAS | 1.83x |
Product B: audio equipment ($180 retail)
| Line | % of price |
|---|---|
| COGS | 52% |
| Shipping absorbed (bulkier, fragile) | 6% |
| Payment processing fee | 3.0% |
| Refund cost (at 8% rate, common for audio) | 0.7% |
| Chargeback + dispute (at 0.5% rate) | 0.4% |
| Net margin | 37.9% |
| Breakeven ROAS | 2.64x |
Same store, same ad accounts, but these two products have breakeven ROAS numbers that differ by 0.81x. A store-wide 2.2x would kill profitable vinyl campaigns (since they break even at 1.83x) and scale unprofitable audio campaigns (which need 2.64x just to break even).
What to do with BER once you have it
BER is the anchor for every campaign decision. The practical rules most serious brands use:
Kill threshold
Kill a campaign when its 7-day rolling ROAS drops below BER at the current spend level. Give it three consecutive days below before actually pulling it, to avoid reacting to noise.
Scale threshold
Scale a campaign when its 7-day rolling ROAS stays at 1.3x BER or above for three consecutive days. A product with a 2.0x BER should be scaled when ROAS holds above 2.6x. This gives you a cushion for performance drift at higher spend.
Target ROAS
Your target ROAS (what you set in Meta or Google's automated bidding) should generally be 1.2-1.3x BER. Setting it equal to BER leaves no margin for the inevitable performance drop when campaigns mature, and leaves zero profit after ads.
Kill: 7-day ROAS < BER for 3 consecutive days
Hold: 7-day ROAS between BER and 1.3x BER
Scale: 7-day ROAS > 1.3x BER for 3 consecutive days
Target ROAS setting: 1.2-1.3x BER for automated bidding
The gap between BER and true profit
One thing worth clarifying: breakeven ROAS is not the same as profit. BER only covers costs up to the ad spend line. It tells you whether a specific campaign is self-funding. It does not cover fixed overheads like salaries, software, rent, or loan repayments. To cover those, you need to run above BER by a margin, not just hit it.
How much above BER? Depends on your fixed cost base. A brand with $180k/yr in overheads doing $2M in revenue needs overheads to be covered by the 9% of revenue that sits above ads. If all of your ads are running right at BER, you have no money to pay the overheads. If they are running at 1.3x BER across the board, you have roughly 5-6% of revenue flowing to true profit, which covers overheads on a typical $2M brand.
For the full true-profit calculation that includes everything below the ad line, see our guide to calculating true profit on Shopify.
The practical problem: where do these cost numbers come from?
Calculating BER per product requires knowing accurate per-SKU COGS, shipping cost, processing fee rate, refund rate, and chargeback rate. Most Shopify brands have COGS in Shopify, shipping in ShipStation or a 3PL invoice, fees in their payment provider dashboards, and refund/chargeback rates nowhere obvious.
Pulling it together manually is a several-hour-a-week job, and it is stale the moment you finish. The alternative is either a SaaS tool that does some of this (Triple Whale and Lifetimely handle simple cases) or a custom dashboard that pulls from every source via API.
At Perch we build BER per SKU directly into every dashboard, alongside the full true-profit calculation. Media buyers open the dashboard and see "kill" or "scale" flags on each campaign against each product's real BER, not a made-up store average. Removes the emotion, surfaces the math.
Bottom line
Breakeven ROAS is the minimum ROAS at which a campaign covers all costs except ads. The formula is 1 divided by your net margin after COGS, shipping, fees, refunds, and chargebacks. BER varies significantly by product because cost structure varies by product, so a single store-wide number will lead you to kill profitable campaigns and scale unprofitable ones.
The kill/scale rule most serious brands use: kill below BER, scale above 1.3x BER, both over a 3-day rolling window. Set automated target ROAS at 1.2-1.3x BER.
If you are using a single store-wide BER across 50 SKUs, you are guessing. The solution is per-product BER, which requires pulling cost data from five to eight sources and keeping it current. However you build that, the math is what matters.
See every SKU's real BER in one view.
Every Perch dashboard calculates breakeven ROAS per product automatically, using live data from your COGS, fees, and refund rates. Tell us about your stack and we'll email your quote.
Get your quote →