Why Free Shipping Thresholds Below Break-Even Make ROAS Lie

Metricuno
June 24, 2026
7 min read
Why Free Shipping Thresholds Below Break-Even Make ROAS Lie — When your free shipping threshold sits below the break-even AOV, every paid order loses money while ROAS still looks healthy. Here's how to fix it.
Quick answer

A free-shipping threshold set below your true break-even AOV makes ROAS report a profitable campaign that's actually burning cash on every incremental order. Here's how to detect and fix it.

Quick answer

If your free-shipping threshold is below the AOV that covers product COGS + fulfillment + the subsidized shipping itself, then every incremental order Meta or Google delivers compounds your loss — even though ROAS still reads 3x or 4x. Recompute the threshold using fully-loaded order economics (including returns), then bid against profit-per-order, not revenue.

Definition
Paid acquisition economics

Free shipping threshold below break-even (ROAS lie)

When your free-shipping threshold sits below the AOV required to cover fulfillment, ROAS overstates profitability on every paid order.

A free-shipping threshold below break-even means the cart value at which you stop charging for shipping is lower than the AOV needed to cover product cost, pick-pack, the shipping label you're now absorbing, payment fees, and returns. Every order between the threshold and true break-even is a paid loss the platform reports as revenue. Because ROAS divides gross revenue by ad spend, that loss is invisible — the campaign looks like it's scaling, and Meta's algorithm cheerfully spends more to find more of the same losing orders. The fix is structural: recompute the threshold with fully-loaded economics, then change the bid signal.

Also known as
shipping subsidy ROAS distortion
sub-break-even free shipping

The trap is mechanical, not strategic. ROAS is a ratio of revenue to ad spend — it has no opinion on whether the order you just shipped made or lost money. If your average paid order clears the threshold by €3 and you eat €8 of shipping, ROAS still reads strong while contribution margin is already negative.

Why this happens (the mechanism)

Most stores set the free-shipping threshold by copying a competitor or by anchoring on a round number — €50, €75, €100. Almost no one rebuilds it from unit economics. The threshold gets set once during launch and then quietly drifts out of sync as shipping carriers raise rates, product mix shifts toward lighter-margin SKUs, or you start running discount codes that stack on top.

Paid social makes the distortion worse. Meta's bid optimizer targets purchase events weighted by conversion value (your reported revenue). It doesn't see your fulfillment cost. So as soon as a campaign finds a pocket of buyers who add just enough to clear free shipping, the algorithm scales that audience — and you ship more loss-making orders at higher volume.

The compounding effect

Once you stack a 10% welcome code on top of a sub-break-even free-shipping order, you're often €4–€12 underwater per order before you factor in returns. A 35% return rate on apparel (typical for fit-sensitive categories) means roughly one in three of those losing orders also generates a return shipping label and restocking cost. Read more in our note on stacking coupon codes on subsidized shipping orders and return rate as the hidden multiplier on shipping subsidy.

How to detect it in your numbers

Pull every order from the last 90 days that came through a paid channel. Bucket them into three bins: below threshold (paid shipping), €0 to €15 above threshold (the danger zone), and €15+ above threshold (clean profit). If more than 35% of paid orders sit in the danger zone, your threshold is doing the work — but for the algorithm, not your P&L.

Then compute true contribution margin per order: revenue − product COGS − shipping label − pick-pack − payment fees − pro-rated return cost. Compare it to your reported ROAS for the same orders. The gap is the lie. A €72 apparel order on a €60 threshold with €9 shipping, €4 pick-pack, and a 30% return reserve clears revenue but lands at roughly −€2 contribution.

Benchmark

Reported ROAS vs true profit on sub-break-even orders (illustrative, Shopify apparel)

Order scenarioOrder valueReported ROAS (at €20 CAC)Loaded costTrue contribution
€60 threshold, order €62, no return€623.1x€56+€6
€60 threshold, order €62, return reserve 30%€623.1x€68−€6
€60 threshold, order €62, 10% code stacked€562.8x€64−€8
€80 threshold (true break-even), order €82€824.1x€68+€14

How to fix it

First, recompute the threshold from the ground up. Use the formula in computing the true free-shipping break-even AOV: target contribution margin per order, working backward through returns, shipping, pick-pack, and payment fees to the minimum cart value that clears zero. Don't pick a round number — pick the number your unit economics demands.

Second, change the bid signal. Stop optimizing Meta and Google campaigns on revenue. Send a profit-per-order conversion value into the ad platform — see replacing ROAS with profit-per-order as the bid signal. The algorithm will quietly stop scaling the losing pockets, because they no longer report as valuable conversions.

Don't just raise the threshold blindly

A naive jump from €60 to €85 can tank conversion rate by 8–14% if your category buyers anchor at lower carts. Raising the free-shipping threshold without killing conversion rate covers the staged playbook — bridge offers, gift-with-purchase, and tiered thresholds by customer cohort that protect new-customer CVR while pushing repeat AOV up.

Experiments worth running

Run a geo-split test: raise the threshold in one matched region by €15–€20 and hold the other constant for 21 days. Measure contribution margin per session, not ROAS. For heavy-SKU Shopify stores where shipping is variable, not fixed (furniture, supplements in bulk), test product-weight-aware thresholds — a single threshold across SKUs is the wrong shape of incentive.

Then test cohort-specific thresholds: keep the low threshold for first-purchase visitors to protect acquisition CVR, raise it for returning customers who already trust the brand. The tiered shipping thresholds by customer cohort spoke walks through the segmentation logic and the Shopify Scripts / Functions implementation. Track average order value alongside contribution margin so you can see both levers moving.

Frequently asked

Frequently asked questions

Compute fully-loaded cost per order: COGS + pick-pack + the shipping label you absorb + payment fees + a return reserve based on your category's return rate. If your current threshold doesn't cover that with at least a small contribution margin, it's below break-even. Most stores discover the gap is €15–€30.

ROAS divides gross revenue by ad spend — it ignores COGS, fulfillment, shipping subsidy, and returns entirely. A 4x ROAS on €40 orders with €15 of loaded cost and €8 of absorbed shipping is reporting a profitable campaign that's actually losing €3 per order before you even count returns.

Not in one step. A sudden €20+ jump typically drops conversion rate 8–14% on first-purchase traffic. Stage it: raise by €5–€10, monitor CVR and AOV for two weeks, then raise again. Or segment — keep the low threshold for new visitors and raise it for returning customers who are less price-sensitive on shipping.

Meta optimizes toward purchase events weighted by the conversion value you send (revenue, by default). When it finds an audience that consistently lands just over your threshold, it scales spend on that audience. You ship more of the orders that lose money, and the campaign looks like it's working. See why Meta scales spend on shipping-subsidized orders for the full mechanic.

Profit-per-order (revenue minus product COGS, shipping, fees, and a return reserve) sent as the conversion value. Meta and Google will still optimize toward 'high-value' events — but now 'high value' means actually profitable. Losing-pocket audiences naturally de-scale because they report as low-value conversions.

Yes, especially in apparel, footwear, and beauty where return rates run 20–40%. A 30% return rate means roughly one in three orders generates an additional return label, restocking labor, and often a refunded payment fee. Loading a return reserve into your break-even calculation typically pushes the true threshold €8–€15 higher than the naive version.

A single threshold is the wrong tool. Shipping cost on a 0.3kg t-shirt and a 4kg jacket are completely different, but a flat €60 threshold treats them the same. Use weight-banded or SKU-banded thresholds, or quote real-time carrier rates and only absorb shipping above a much higher per-SKU break-even.

Badly. A 10% welcome code on an order that just clears the free-shipping threshold often pushes it back below cost — and the buyer now gets both the code and the absorbed shipping. Either disable code stacking on sub-threshold-anchor orders, or build the discount cost into your break-even calculation upfront.

Usually yes, by 5–15% depending on category and how big a jump you make. The trade is intentional: you're trading some volume for positive contribution margin per order. Often AOV rises enough that contribution margin per session goes up even as CVR drops. Measure both.

Free-shipping subsidy is one of the most common drivers of the broader ROAS-vs-ROI gap. See why your ROAS looks great but ROI is negative for the parent diagnosis — shipping is one cost line; product margin compression, return rates, and platform fees are the others.

Get an AI expert review of your site

Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.