DEV Community

Cover image for How to Run Discounts in EC Without Quietly Killing Your Profit 2026
toshihiro shishido
toshihiro shishido

Posted on Originally published at revenuescope.jp

How to Run Discounts in EC Without Quietly Killing Your Profit 2026

For a while my instinct when sales got soft was simple: run a discount. It always worked that night, and it always felt slightly worse at month-end. Revenue was up, profit somehow wasn't. It took me embarrassingly long to do the actual math on what a discount costs.

This post is that math, plus the discount types that don't wreck your average order value, and the one metric that tells you whether a sale actually worked.

TL;DR

  1. Break-even on a discount = discount ÷ (gross margin − discount). At 40% margin, a 20% cut needs 2× the units just to hold profit
  2. Pick a discount type that protects AOV — bulk, bundle, member-only — not an across-the-board cut
  3. Don't fight price wars on price; fight on how you convey value
  4. A designed discount keeps profit; a knee-jerk one erodes it even as units climb
  5. Judge a sale by RPS (revenue per session), not total revenue

1. The break-even math nobody runs first

The scary part of discounting is how much extra volume you need to make the lost profit back. The formula:

extra sales needed = discount ÷ (gross margin − discount)

At 40% gross margin: a 10% discount needs +33% units. A 20% discount needs +100% — you have to sell twice as many. A 30% discount needs +300%, four times the volume, just to reach the same profit.

Extra sales needed to keep profit after a discount, at 40% gross margin

The lower the margin, the faster that number explodes. So before deciding "just a little off," I now run this first.

2. Discount types that protect AOV

Discounts have types, and the type decides what happens to average order value.

Impact on AOV by discount type

  • Bulk ("10% off 3+") raises AOV because each order grows.
  • Bundle sells related items together — add-on purchases lift AOV.
  • Member-only discounts repeat buyers while keeping the list-price brand intact.
  • Across-the-board cuts the list price for no reason and drags AOV and brand down together. This is the one to avoid.

3. Designed vs. knee-jerk

Knee-jerk discount vs. designed discount at 40% gross margin

Same act, different design, very different numbers. A blanket 20% cut loses gross profit even as units rise. A bulk-purchase design protects AOV and grows profit. A discount isn't yes-or-no — it's how you shape it. And before discounting at all, I try to win on value: reviews, usage photos, a clear warranty.

4. Measure the sale with RPS, not revenue

This is the part that took me too long. After a sale, "revenue went up" tells you almost nothing — revenue also moves with traffic. If you bumped ads the same week, the discount's effect is buried.

Two metrics separate it:

  • AOV = revenue ÷ orders — did the discount raise or lower order value?
  • RPS = revenue ÷ sessions — revenue per visit, including the fact that price also moves conversion rate.

GA4 is session-first, so slicing "RPS by the channel where I discounted" is a chore. That's the problem I'm building RevenueScope to solve — it lines up RPS and AOV by channel from a revenue-first view, so a sale gets verified in numbers, not vibes.

When you run a sale, do you check the effect on revenue per session — or just look at total sales and call it a win?

Top comments (0)