When Contribution Margin Drops After a Discount Campaign
Why a 15-20% promo can wipe out more contribution margin than the discount itself — the compounding mechanics, breakeven depth by margin tier, and how to fix the next campaign.
Quick answer
A 15-20% discount almost always destroys more than 15-20% of contribution margin because fixed per-order costs (shipping subsidy, payment fees, pick-and-pack) don't shrink with the discount — they get absorbed by a smaller gross profit. On a 45% gross-margin SKU, a 20% off code typically cuts contribution margin by 50-65%, not 20%.
Contribution Margin Drop After a Discount Campaign
The disproportionate collapse in per-order contribution margin caused by stacking a promo discount on top of fixed order costs.
Contribution margin is what's left after every variable cost tied to fulfilling an order — COGS, payment processing, shipping subsidy, pick-and-pack, return reserve. When you run a 15-20% storewide promo, the discount comes straight off revenue, but the fixed-per-order costs stay flat in euros. The result is a non-linear margin collapse: a 20% discount on a SKU with 45% gross margin and €6 of fixed order costs can wipe out 60-70% of contribution.
This is the gap between a promo that looks profitable on the P&L summary (revenue up, ROAS healthy) and one that quietly funds itself out of next quarter's marketing budget.
Most post-mortems blame the discount depth. The real culprit is usually the interaction between three things: discount depth, gross margin tier, and the euro value of fixed costs absorbed per order. Get any one of those wrong in your pre-campaign model and the actual CM will undershoot the forecast by 30-50%.
Why the drop is non-linear
Take a €60 apparel order with €33 COGS (45% gross margin) and €6 of fixed order costs — €3 shipping subsidy, €1.80 payment fee, €1.20 pick-and-pack. Baseline contribution margin: €60 − €33 − €6 = €21, or 35%.
Apply a 20% promo. Revenue drops to €48. COGS stays €33. Fixed costs stay €6 (the warehouse still picks the same box). New contribution: €48 − €33 − €6 = €9. You lost €12 of margin to deliver €12 of customer discount — and the payment fee actually grew slightly because more shoppers used Klarna at checkout.
The compounding rule of thumb
For every 1% of discount depth, expect contribution margin to drop by roughly (1% × revenue) ÷ (baseline CM €). On the example above: each 1% of discount = €0.60 of margin lost, against a €21 baseline = ~2.9% CM erosion per 1% of discount. A 20% promo → ~58% CM gone.
How to detect it in your data
Pull order-level data for the promo window and the four weeks prior. For each order, compute: revenue minus COGS, minus payment fees from the gateway export, minus the actual shipping cost from your 3PL invoice, minus a return reserve (use your trailing 90-day return rate × average refund amount).
The signal you're looking for: median CM% during the promo is more than 1.5× lower than discount depth would suggest. If your 20% promo cut CM% from 35% to 15%, that's a 57% relative drop on a 20% discount — exactly the fixed-cost absorption pattern. Cross-check with the Contribution Margin Calculator to model the breakeven before the next send.
How to fix it on the next campaign
Three levers, in order of effort. First, raise the free-shipping threshold to AOV +15% during the promo window — this neutralises the shipping-subsidy absorption on smaller orders. Second, exclude your lowest-margin SKUs (anything under 35% gross margin) from the code; on a beauty refill at 28% margin a 20% promo goes negative immediately.
Third, switch from a percentage off to a tiered amount-off (€10 off €60, €25 off €120). This caps the discount on cheap orders where fixed costs dominate, and rewards basket-building where you actually have margin headroom. The breakeven table below shows the maximum discount depth you can run by gross-margin tier without going CM-negative.
Maximum discount depth before contribution margin goes negative, by gross-margin tier (assumes €6 fixed order costs, €60 AOV)
| Gross margin tier | Baseline CM% | Max discount (CM = 0) | Discount that halves CM |
|---|---|---|---|
| 25% (low — refills, basics) | 15% | 9% | 4-5% |
| 35% (mid — apparel core) | 25% | 15% | 7-8% |
| 45% (healthy — branded apparel) | 35% | 21% | 10-11% |
| 55% (strong — beauty, accessories) | 45% | 27% | 13-14% |
| 65% (premium — own-label, niche) | 55% | 33% | 16-17% |
The 4x ROAS trap
A promo can hit 4x ROAS on the paid-media report and still produce negative contribution margin once you net out the discount and fixed costs. See Why a 4x ROAS Campaign Can Have Negative Contribution Margin for the full walkthrough — it's the same mechanic as this page, viewed from the acquisition side.
Experiments worth running next quarter
Test a tiered amount-off against your usual percentage-off, on matched audience cells. Primary metric: CM per visitor, not conversion rate. Run for one full purchase cycle (typically 10-14 days for apparel, 21-28 days for beauty replenishment) so you capture the AOV-mix shift, not just the click response.
Second test: raise free-shipping threshold during promos only. Measure CM% delta and check for cart-abandonment lift — if abandonment climbs more than 3 points the threshold went too high. Third: gate the deepest discount behind a minimum-margin product filter, so the code only applies to SKUs above 40% gross margin.
Frequently asked questions
Because fixed per-order costs — shipping subsidy, payment fees, pick-and-pack — don't shrink with the discount. They get absorbed by a smaller gross profit. The deeper the discount and the higher the fixed-cost share of your basket, the bigger the gap between discount depth and CM loss.
With typical €6 fixed order costs on a €60 AOV, you can discount up to about 18% before contribution margin hits zero. Past that, every order costs you money to fulfil. Use the Contribution Margin Calculator to model your actual numbers.
No — that's the most common error. Free shipping to the customer is not free to you; your 3PL still invoices for it. Always book the real shipping cost as a variable order cost, otherwise your CM model will systematically overstate profitability on every discounted order.
On margin, usually yes — for two reasons. It caps the discount on low-AOV orders where fixed costs dominate, and it nudges basket size upward where you have headroom. Expect 15-30% better CM per visitor in matched tests, though gross conversion rate may be slightly lower.
They usually grow as a share of revenue, not shrink. BNPL options (Klarna, Clearpay) tend to take a higher share at promotional checkout — often 3-5% versus 1.5-2% for card — and discount codes don't reduce the fee base on most gateways. Model fees at 2.5-3% during promo windows to be safe.
Discounted orders return at 10-30% higher rates in apparel and footwear (impulse buys, size-bracketing). Add a return reserve to your CM model: trailing return rate × (refund amount + reverse logistics cost + restocking labour). Skipping this is how a promo looks profitable in week 1 and underwater by week 6.
Not necessarily — it depends on your gross margin and fixed-cost share. A 15% promo on a 25% gross-margin SKU still goes CM-negative. The relevant question is discount depth relative to baseline CM%, not the headline number on the code.
One full purchase cycle plus the return window. For apparel that's typically 6-8 weeks (14-day purchase response + 30-day return window + buffer). Judging at day 7 will overstate CM because returns haven't landed yet.
Sometimes — for genuine new-customer acquisition where LTV justifies a first-order loss, or for inventory clearance where the alternative is markdown to zero. But the decision needs to be explicit, modelled, and tracked separately — not discovered after the fact when the CFO asks why margin dropped.
Build a per-SKU model: gross margin %, fixed order costs in euros, expected discount uptake rate, expected AOV shift. Run the new code through the model on last quarter's order mix. The Contribution Margin Calculator handles the per-order math; layer your expected redemption rate on top.
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.