August 5, 2026 · CostSentry

Discount Codes on Thin Margins: What 15% Off Actually Costs

A discount is quoted in percentage points of the price, but it is paid entirely out of the profit. Those are two very different bases, and the gap between them is why a code that sounds modest in a marketing meeting can remove a third of a product's earnings before anyone checks. The arithmetic is short, it fits on one line, and every store selling wholesale-bought goods should know it by heart.

The one line that explains everything

Write margin the usual way — m = (price − cost) ÷ price — and let d be the discount as a decimal. Gross profit per unit before the code is price × m. After the code, the customer pays price × (1 − d) while the cost doesn't move, so:

profit after discount = price × (m − d)

The cost term cancels out completely. What's left says that a discount of d subtracts d from your margin in absolute points, which means it destroys d ÷ m of your gross profit. A 15% code against a 40% margin: 15 ÷ 40 = 37.5% of the profit, gone. Against a 25% margin, the same code removes 60%. Against a 15% margin it removes everything.

The second formula tells you what margin you're actually left holding:

margin after discount = (m − d) ÷ (1 − d)

The denominator is why the new margin isn't simply m − d: you're now measuring a smaller profit against a smaller price. It softens the blow slightly on the percentage view — and that softening is exactly what fools people, because the dollars are already gone.

One SKU · 40% margin · 15% off code
Retail$42.00
Supplier cost$25.20
Gross profit before$16.80 · 40.0%
Price paid after 15% off$35.70
Gross profit after$10.50 · 29.4%
Profit given away$6.30 · 37.5% of it

Six dollars and thirty cents per unit. If that SKU moves 25 units a month, the code costs $157.50 a month while it runs — which is a perfectly reasonable thing to spend, provided somebody decided to spend it rather than discovering it later.

The table to keep near your promo calendar

Two numbers per cell: the margin you're left with, and the volume increase required to earn back the same gross profit dollars you were making before the code. That second number is pure arithmetic — m ÷ (m − d) — not a forecast. It's what the discount commits you to, not what it will achieve.

Margin before10% off15% off20% off
25%16.7% · +67% units11.8% · +150%6.3% · +400%
30%22.2% · +50% units17.6% · +100%12.5% · +200%
35%27.8% · +40% units23.5% · +75%18.8% · +133%
40%33.3% · +33% units29.4% · +60%25.0% · +100%
50%44.4% · +25% units41.2% · +43%37.5% · +67%
60%55.6% · +20% units52.9% · +33%50.0% · +50%

Read down a column rather than across a row and the shape of the problem appears. The same 20% code asks a 60%-margin brand for half again as many units and asks a 25%-margin distributor for five times as many. This is the entire reason discounting culture differs so sharply between a fashion label and a parts warehouse — not temperament, arithmetic. If you sell wholesale-bought goods at 25–35%, the discount ladder that works for a 65%-margin DTC brand will bankrupt you on the same volume.

Percent off is not the only lever. Free shipping, a bundled accessory, an extended warranty, a next-order credit and net-30 terms all cost something specific and often much less than the equivalent percentage. The reason percent-off dominates is that it's easiest to configure, not that it's cheapest. Before reaching for it, price the alternatives in the same units — dollars of gross profit per order — and compare.

The maximum discount your floor allows

If you run a margin floor — the line where a SKU stops paying its way — then the floor also defines a discount ceiling. Rearranging the formula above for the largest d that still lands on a floor f:

max discount = (m − f) ÷ (1 − f)

A 40%-margin SKU with a 20% floor: (0.40 − 0.20) ÷ 0.80 = 25%. Check it on the $42.00 example — 25% off gives $31.50, minus the $25.20 cost is $6.30 of profit, and 6.30 ÷ 31.50 is exactly 20.0%. A 30%-margin SKU with the same floor tolerates only 12.5%, and a 25%-margin SKU tolerates 6.3% — which is to say, in practice, nothing.

Margin beforeMax discount, 15% floorMax discount, 20% floor
25%11.8%6.3%
30%17.6%12.5%
35%23.5%18.8%
40%29.4%25.0%
50%41.2%37.5%
60%52.9%50.0%

You may notice these cells repeat the first table's margins. That isn't a copy-paste error — the relationship between "discount applied" and "margin left" is its own inverse. Whatever discount takes a 40% SKU down to 25% is the same discount that takes it to 25% from 40%. One table, read two directions.

Where the arithmetic quietly breaks

The margin you typed in is last quarter's

Every number above starts from m, and m comes from the cost field. Shopify stores exactly one cost per variant with no history and no supplier attached, so if a price file landed since you last touched it, your whole discount plan is calibrated to a margin that no longer exists.

Take the same SKU after a modest 8% supplier increase — cost $25.20 → $27.22, retail untouched at $42.00. The margin is now 35.2%, not 40%. Run the 15% code anyway and you get $35.70 − $27.22 = $8.48, a 23.8% margin. The code still costs its $6.30 — that part never depended on cost — but you planned to land on $10.50 a unit and you landed on $8.48, and against the $16.80 this SKU earned before either event, a discounted unit now brings home barely half. The promotion didn't change; the ground under it did.

Order of operations matters here. A cost increase and a discount compound in the direction you'd least like. Check current costs before setting promo depth, not after the campaign report comes back thinner than the model said. The post-increase repricing math is the same set of formulas, run one step earlier.

Order-level discounts hit a blended margin

A code applied to the cart works against whatever mix happens to be in it, and mixes are rarely flattering. Two lines — a $42.00 item at 40% and a $19.00 accessory at 25% — make a $61.00 order carrying $39.45 of cost and $21.55 of profit: a blended margin of 35.3%. A 15% order code leaves $51.85 and $12.40, i.e. 23.9%. The customer thinks they took 15% off. You lost 11.4 points of blended margin, weighted toward whichever line you'd least like to discount.

Nothing in a storefront's discount configuration is aware of cost. A code doesn't know a margin floor exists, can't decline to apply itself to a SKU that's already thin, and will happily stack on top of an item you were about to reprice. That's not a defect to complain about — it's just the reason the guardrail has to live in your process rather than in the checkout.

Fixed per-order costs come out of what's left

The discount lands on gross profit; the shipping label, the packaging and the fixed part of the payment fee then land on the remainder. On a small order the two together are far worse than either alone, because the per-order stack doesn't shrink just because the order got cheaper. A 15% code on a $19 item that already barely covers its own logistics doesn't reduce the profit — it turns the order into a subsidy. The same logic governs where you can safely set a free-shipping threshold.

Dollar-off codes are percentage codes in disguise

"$10 off" reads as one promotion and behaves as many: 24% off a $42 item, 53% off a $19 one. If you use fixed-amount codes, attach a minimum order value that keeps the implied percentage inside your ceiling — a $10 code with a $60 minimum can never exceed 16.7%, and that bound is worth more than any amount of monitoring after the fact.

A practical routine

  1. Refresh costs before the campaign, not after. Any SKU whose cost changed since the last review is a SKU whose planned discount depth is wrong.
  2. Compute the ceiling per tier, not per catalog. Group SKUs by margin band and give each band its own maximum. One store-wide discount depth is always too deep for the thin band and too shy for the fat one.
  3. Exclude, don't hope. Anything sitting within a few points of its floor should be excluded from the code outright. This is the one control that's easy to configure and it's the one most often skipped.
  4. Write down the volume commitment. Put "+60% units to break even" in the campaign brief next to the discount depth. It reframes the conversation from "how much off?" to "against what?", which is the conversation worth having.
  5. Review after with the same formulas. Units sold × profit per discounted unit, against the same period without the code. Revenue lift is not the test; gross profit is.
The asymmetry worth remembering: a 10% cost increase and a 10% discount are not comparable events. The increase takes 10% of the cost — on a 40% margin, that's 6 points. The discount takes 10 points straight off the margin. Discounting is the faster of the two ways to lose money, which is why it deserves the same scrutiny as a supplier's price letter and usually gets far less.

Know the margin before you set the depth

Every formula on this page starts from a current cost. Load your latest supplier price list and your Shopify product export into the free Supplier Price Margin Checker to see each SKU's margin as it stands today — matched by SKU, entirely in your browser.

Open the free checker ↗
Runs in your browser. Nothing uploaded, no account.