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)