How Discount Codes Hide Negative ROI Behind 5x ROAS

Metricuno
June 23, 2026
6 min read
How Discount Codes Hide Negative ROI Behind 5x ROAS — Discount codes inflate ROAS while burning margin. Learn how promo codes erode DTC ROI, how to spot it, and how to recompute ROAS on post-discount revenue.
Quick answer

Sitewide promos and influencer codes can show 5x ROAS in the ad manager while contribution margin goes negative. Here's how to diagnose and stop the bleed.

Quick answer

Ad platforms report ROAS on gross order value, before the discount code is subtracted and before COGS, shipping, and payment fees. A 5x ROAS on a 30%-off sitewide promo with 55% gross margin can easily land at negative contribution margin once you recompute on post-discount net revenue. Fix it by reporting ROAS on net revenue and cross-checking with blended MER weekly.

Definition
Paid acquisition diagnostics

How discount codes hide negative ROI behind a 5x ROAS

Promo codes inflate the revenue numerator in ROAS while quietly cutting margin, so paid campaigns look profitable in the ad manager and lose money in the P&L.

ROAS in Meta, Google, and TikTok is calculated on the order value the pixel sees at checkout — typically the pre-discount subtotal, or the post-discount subtotal without any cost of goods, shipping subsidy, or payment fees deducted. Discount codes (welcome popups, influencer codes, sitewide sales, stacked offers) compress your contribution margin per order but barely move the reported ROAS, because the platform doesn't know what the order cost you to fulfil. The result is a quarter where Shopify shows record revenue, the ad manager shows healthy 4-6x ROAS, and the bank balance is flat or down. Recomputing ROAS on post-discount net revenue exposes the gap.

Also known as
promo-inflated ROAS
discount-masked negative ROI
the coupon ROAS trap

This is the most common reason a paid-media dashboard and a finance dashboard tell opposite stories. The campaigns aren't broken — the metric is.

Why discount codes break the ROAS number

Meta's reported ROAS is conversion value divided by ad spend. Conversion value comes from the purchase pixel, which fires at checkout completion with whatever value your Shopify or WooCommerce theme passes — usually the line-item subtotal, sometimes already discounted, sometimes not.

Neither path subtracts COGS, picking and packing, the free-shipping subsidy, payment fees, or the discount itself when it's only applied at the cart level. So a €120 order with a WELCOME15 code, 55% gross margin, €6 shipping subsidy, and €4 fulfilment can post a €102 conversion value to Meta while delivering roughly €18 of contribution margin. If you spent €20 to acquire it, ROAS reads 5.1x and contribution ROI is negative.

The 5x ROAS / negative ROI worked example

Apparel store, AOV €120, 55% gross margin, 15% sitewide code, €6 shipping subsidy, €4 fulfilment, €3 payment fees, €20 ad spend per order. Reported ROAS: ~5.1x. Post-discount net revenue: €102. Contribution after COGS + ship + fees + discount: ~€16. Subtract €20 ad cost → contribution margin after ads: −€4 per order. The campaign loses money on every sale and you scale it because the ad manager says it's working.

How to detect it in your own account

The fastest signal is a divergence between platform ROAS and blended MER (total revenue ÷ total ad spend) during a promo window. If Meta ROAS holds at 5x but MER drops from 3.8 to 2.6 the week you launch a 20% sitewide, the platform is double-counting organic and discount-stacked orders. Cross-checking with MER catches this in under 10 minutes.

The second signal lives in Shopify: pull a report of orders by discount code for the period and compute average contribution margin per code. If WELCOME15, INFLUENCER20, and SITEWIDE25 each show contribution under 8% of net revenue while non-coded orders sit at 35%, the codes are the leak. Influencer codes specifically tend to look best in the ad manager and worst in the P&L.

How to fix it without killing revenue

Step one: recompute ROAS on post-discount net revenue and overlay it on the same chart as platform ROAS in your weekly review. The gap between the two lines is the discount distortion, and watching it tracks the problem instead of just naming it.

Step two: set promo guardrails. Calculate the maximum discount depth that keeps contribution margin positive at your current CAC, and refuse codes deeper than that — including stacked codes. For a 55%-margin apparel SKU at €25 CAC, that ceiling is usually around 20-22% before contribution goes negative; for a 35%-margin electronics SKU it's closer to 8%.

The three-line weekly dashboard that fixes this

Replace your single ROAS chart with three lines: (1) platform-reported ROAS, (2) ROAS recomputed on post-discount net revenue, (3) blended MER. When line 1 diverges from lines 2 and 3 by more than 20%, a discount code is inflating the number — investigate before scaling spend.

Experiments worth running this quarter

Test the welcome popup at 10% instead of 15% (or replace the discount with free shipping over €60). Welcome popup discounts cannibalize full-price buyers more than most teams measure, so the lift from removing or shrinking the code often shows up in contribution margin within two weeks while AOV barely moves.

For subscription brands, audit first-order discount payback. A 50%-off box one only works if month-three retention clears your CAC plus the discount subsidy; if churn after box one is above 45%, the offer never pays back. Pair this with a moratorium on stacking — welcome + sitewide + free shipping triggered together is where margin most reliably goes negative.

Frequently asked

Frequently asked questions

Meta's ROAS uses the conversion value the pixel reports, which is order subtotal before COGS, shipping subsidies, payment fees, and often before the discount code is subtracted. A 5x ROAS on a discounted order with 55% gross margin can still leave you with negative contribution after ad spend. Recompute ROAS on post-discount net revenue to see the real number.

ROAS is revenue divided by ad spend. Contribution ROI is (net revenue − COGS − shipping − fees − discount − ad spend) divided by ad spend. ROAS can be 5x while contribution ROI is negative if your margin and discount stack don't leave room for the ad cost.

Influencer codes attribute orders to paid social campaigns (because the buyer often clicks a paid ad after seeing the influencer post) while also triggering a 15-25% discount. The ad manager credits the full pre-discount subtotal against the spend, so reported ROAS climbs while per-order contribution drops. Many influencer codes show 8x ROAS and lose money per order.

By default the Shopify Meta pixel sends the order subtotal after line-item discounts but before order-level discounts and shipping. So a code applied at the cart level often doesn't reduce the reported conversion value at all — which is exactly how discount-inflated ROAS happens.

MER (marketing efficiency ratio) is total store revenue divided by total ad spend across all channels. Because it's calculated on actual Shopify revenue and total spend, it doesn't double-count and isn't fooled by pixel-side discount handling. A divergence between platform ROAS and MER during a promo is the cleanest signal that a code is inflating reported numbers.

It depends on your gross margin and CAC. As a rough starting point: a 55%-margin apparel SKU can usually absorb 20-22% before contribution goes negative at typical CAC; a 35%-margin electronics SKU is closer to 8%. Calculate it from your own unit economics rather than copying a competitor's promo.

Often less than the lift suggests. A meaningful share of popup redemptions come from buyers who would have purchased at full price, so the popup converts margin into discount without adding new orders. Test a free-shipping threshold or a lower 10% code against the 15% default before assuming the popup pays for itself.

When a buyer applies welcome 15% + sitewide sale 20% + free shipping on a thin-margin product, the combined deductions can exceed the gross margin entirely. Stacking is the single most common path from healthy 4x ROAS to negative contribution. Block code stacking in your Shopify checkout rules unless you've modelled the unit economics.

Weekly during normal periods and daily during any promo window. Promo-week ROAS distortion compounds quickly because spend usually scales with the offer, so a one-week delay in spotting the gap can cost a full month of contribution margin.

Top-line revenue usually drops 5-15% in the short term; contribution margin typically rises. The question isn't whether revenue dips — it's whether the dip is smaller than the margin you reclaim. For most stores in the €1M-€15M band, it is, especially when popup and influencer codes are pruned rather than sitewide sales.

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.