Are Your Promo Codes Losing You Money?
Most brands track revenue, not profit. Here is a blunt breakdown of how discounts hide losses — and how to see your real numbers from a CSV.
If your “top” promo codes are ranked by revenue, you might be optimizing for the wrong game. I look at merchant exports every week — and the pattern is the same: the loudest code in the dashboard is often the most expensive one in margin terms.
The pain: revenue feels like truth
Shopify and ad platforms train you to celebrate sales. A code drives $80k — great, put it in the board deck. Nobody asks, in the same breath: how much did we pay in discounts to get that $80k, and what was left after COGS and refunds? That gap is what promo code analytics is meant to close — not more charts, but revenue paired with discount cost and margin.
Until you line those up, discounts hide losses. A code can grow top line while quietly destroying contribution margin — especially when you stack offers, extend deadlines, or blast the same code to cold traffic.
Example: two codes, opposite stories
Here is a simplified snapshot (numbers are illustrative, but the shape is real). Assume rough COGS at 40% of net sales after discounts for both.
| Code | Gross sales | Discount given | Est. COGS* | Rough contribution |
|---|---|---|---|---|
| SAVE20 (sitewide) | $100,000 | $22,000 | $31,200 | +$46,800 |
| EXTRA25 (stackable / leaked) | $88,000 | $41,000 | $49,000 | −$2,000 |
SAVE20 clears the bar after discounts and COGS. EXTRA25 still shows big gross sales — but after 47% of revenue walks out as discount and your landed COGS on the mix is ugly, contribution goes negative. In real files, refunds and ad spend make this worse, not better.
*COGS here is illustrative (blended % and category mix). The point is pairing revenue with discount + cost, not defending a single percentage.
Contribution ≈ Net sales after discount − COGS − variable costs you trust
Discount % of gross = Discount ÷ Gross sales → if this creeps past your brand’s safe band, pause before scaling.
Why this happens
Teams reward what is easy to measure: attributed revenue and ROAS. Profit per code needs joined-up data — orders, discount lines, returns — and someone willing to look at profit, not applause. Without that, “performance” becomes a vanity label.
Lightweight fix
Export orders, isolate rows by discount code, and sum discount amounts vs net sales. You will not get perfect accounting from a CSV, but you will get directionally honest answers: which codes are net positive and which are subsidized experiments. When you are ready to formalize the math, walk through how to calculate profit per discount code — and read why your “best” code might be hurting margin if leadership still ranks codes by sales alone.
Stop guessing. Upload an orders CSV and see code-level revenue, discount exposure, and estimated net per code — before you change another campaign.