Jul 10, 2026~24 min readPricing & Promotions

The Promo & Discount Playbook — Stop Burning Margin on Customers Who'd Buy Anyway

Industry estimates say 50–60% of trade promotions lose money. Almost nobody knows which of theirs do, because almost nobody measures incrementality. This is the full playbook: margin math, holdout design, uplift targeting, and the segment strategies that follow.

The Playbook

  1. 1. The Margin Math Nobody Runs
  2. 2. Incrementality — The Only Question That Matters
  3. 3. Holdout Design — Your Measurement Infrastructure
  4. 4. Cannibalization, Pull-Forward & Stockpiling
  5. 5. Uplift Targeting — Who Gets the Discount
  6. 6. The Segment Playbook
  7. 7. Discount Depth & Mechanics
  8. 8. The Promo P&L Dashboard
  9. 9. Implementation Roadmap

Promotions are usually the largest discretionary spend in an e-commerce P&L after marketing — and the worst measured. Marketing has attribution debates; promo often has no measurement at all beyond "GMV went up during the sale." Of course it did. The question was never whether GMV goes up. It's whether the gross profit from incremental sales exceeds the margin given away on sales that would have happened anyway. Everything in this playbook serves that one sentence.

1. The Margin Math Nobody Runs

Start with the brutal arithmetic of discounting. When you cut price, you sacrifice margin on every unit to gain volume. The required volume lift just to break even on gross profit:

Required volume lift = 1 ÷ (1 − discount ÷ margin) − 1

Gross margin10% discount15% discount20% discount
20% margin+100% volume needed+300%∞ — impossible
30% margin+50%+100%+200%
40% margin+33%+60%+100%
50% margin+25%+43%+67%

Read that table again. A 20% discount on a 30%-margin product needs to triple volume just to hold gross profit flat — and that's before counting the promo's operational costs, and critically, before the incrementality haircut below. In electronics or grocery, where margins run 10–25%, deep sitewide discounts are mathematically incapable of paying for themselves on margin alone. They must be justified by something else: customer acquisition, inventory clearance (see the inventory playbook), or competitive defense — and each of those justifications has its own metric you should be tracking instead.

2. Incrementality — The Only Question That Matters

Every order placed during a promotion is one of these:

Order typeWhat happenedPromo's contribution
Incremental Would not have happened without the promo ✅ Full margin of the new sale (minus discount)
Cannibalized (subsidized) Would have happened at full price ❌ Pure margin loss = discount amount
Pulled forward Would have happened next month at full price ❌ Margin loss now + a demand hole next month
Cross-cannibalized Replaced a full-price purchase of a neighboring SKU ❌ Margin delta between the two products

The promo P&L in one line:

Promo profit = (incremental units × unit margin after discount) − (non-incremental units × discount) − operational costs

The typical unmeasured promo shows a beautiful GMV spike where 60–80% of redeemed discounts went to customers who were buying anyway. That's how "50–60% of promotions lose money" happens while every campaign readout claims success — the readouts measure participation, not incrementality.

3. Holdout Design — Your Measurement Infrastructure

Incrementality can only be measured against a counterfactual, and the gold standard is embarrassingly simple: randomly withhold the promo from a slice of eligible customers and compare.

# The entire incrementality readout, conceptually
# treated:  eligible customers who could see/use the promo
# holdout:  randomly selected eligible customers who could not

incremental_rate   = treated.cvr - holdout.cvr
incremental_orders = incremental_rate * n_treated
true_cost_per_inc  = total_discount_spend / incremental_orders

# Compare true_cost_per_inc against unit margin →
# the promo is profitable iff margin_per_order > true_cost_per_incpython

Design rules that make or break the measurement:

⚠️

"We can't hold out customers, it's unfair / leadership won't allow it." This objection kills more measurement than any technical problem. The counter: you are currently spending millions without knowing if the ROI is positive — the holdout is the cost of knowing. Start with one campaign, show the incrementality number next to the naive readout, and let the gap make the argument.

4. Cannibalization, Pull-Forward & Stockpiling

Three demand-shifting effects that quietly rewrite your promo P&L:

Product cannibalization

Discounting Pepsi steals from Coke on your own shelf. If you carry both, your incremental category volume is far below the promoted SKU's lift. Measure at category level, not SKU level: the promoted SKU's +80% means little if category volume moved +6%. This is the single most common way merchandising teams fool themselves.

Pull-forward (inter-temporal cannibalization)

Diapers, detergent, pet food: customers don't consume more because it's discounted — they buy the same annual volume earlier and cheaper. The tell-tale signature is a post-promo trough in the sales curve. Always plot 4 weeks after the campaign; if the area of the trough approaches the area of the spike, the promo was a financing operation, not a growth one.

Stockpiling & deal-training

Run the same "20% off first Friday of the month" long enough and customers learn to never buy at full price. Deal-trained customers are structurally lower-LTV. Track full-price purchase rate by cohort — if customers acquired via deep discounts never convert to full-price buyers, your acquisition promos are buying revenue, not customers. Irregular timing and targeted (rather than public) offers slow the training.

5. Uplift Targeting — Who Gets the Discount

Holdouts tell you if a campaign was incremental. Uplift modeling makes the next campaign incremental by design — by predicting, per customer, how much the discount changes their behavior. The four types every promo owner should internalize:

SegmentBuys with promoBuys withoutAction
PersuadablesYesNo✅ Target — this is 100% of your ROI
Sure thingsYesYes❌ Suppress — every voucher here is margin burned
Lost causesNoNo❌ Suppress — save the budget and the send
Sleeping dogsNoYes🛑 Actively exclude — the nudge backfires (real: reminds churned users to cancel, cheapens brand for premium buyers)

The practical implementation is less exotic than the name suggests. From any past campaign that had a randomized holdout, train a T-learner:

# T-learner uplift: two models, subtract predictions
import lightgbm as lgb

m_treated = lgb.LGBMClassifier().fit(X[treated], y[treated])
m_control = lgb.LGBMClassifier().fit(X[holdout], y[holdout])

uplift = m_treated.predict_proba(X_all)[:, 1] \
       - m_control.predict_proba(X_all)[:, 1]

# Rank customers by uplift; send vouchers to the top decile(s).
# Negative uplift = sleeping dogs → exclude entirely.
# Evaluate with Qini curves / uplift@k, NOT accuracy or AUC.python

Features that typically carry uplift models: discount dependency (share of past orders with a voucher), recency, price sensitivity proxies (brand mix, price-band mix), engagement without purchase (sessions, carts), and lifecycle stage. Libraries: causalml (Uber) or scikit-uplift. The realistic payoff, consistently reported across the industry: same incremental revenue at 30–50% less promo spend, simply by not paying the sure things.

6. The Segment Playbook

While your uplift model trains, RFM segments plus discipline get you 70% of the value:

SegmentDefault moveWhy
Champions / heavy loyals No discounts. Early access, exclusives, service perks Highest sure-thing density in your base — margin protection zone. Recognition retains them cheaper than 15% off
Regular actives Small, targeted nudges: category expansion offers ("something from a category you haven't tried"), threshold offers Grow share-of-wallet, not subsidize existing behavior
At-risk (recency slipping) The prime persuadable pool. Escalating sequence: reminder → small offer → deeper offer only on continued silence Highest uplift concentration; don't open with your deepest discount
Lapsed / churned Deep win-back for a defined window, then stop Some are recoverable; unlimited win-back attempts train the rest to wait. Respect the sleeping dogs signal
New / first purchase Welcome offer sized to unit economics, structured to seed a second purchase (voucher on next order, not the first) Second purchase is the single biggest LTV inflection in most e-commerce data — aim the subsidy at it
The one-sentence strategy

Spend margin where behavior can change — at-risk and second-purchase moments — and spend recognition where it can't. Most promo budgets do the exact opposite, because rewarding loyal customers feels right and shows great (fake) redemption ROI.

7. Discount Depth & Mechanics

8. The Promo P&L Dashboard

If your promo reporting shows GMV and redemptions, it's a participation tracker. The operator's version:

MetricDefinitionWhat it catches
Incrementality %(treated CVR − holdout CVR) ÷ treated CVRThe share of promo orders that are real
Cost per incremental orderTotal discount spend ÷ incremental ordersCompare directly against unit margin
Incremental gross profitThe one-line P&L from section 2The actual answer
Category-level liftCategory volume vs baseline, not SKU volumeCannibalization
Post-promo troughSales vs baseline, weeks +1 to +4Pull-forward
Full-price rate by cohortShare of each cohort's orders without any discountDeal-training
Voucher dependencyDistribution of customers by % of orders discountedThe addicted segment growing

9. Implementation Roadmap

Month 1 — Measure

Month 2 — Stop the bleeding

Month 3 — Target

💬

Running promos at scale and seeing something different? I'd genuinely like to compare notes: sharmavikas.9798@gmail.com.

Sources & Further Reading:
Glencoyne: Promotion ROI ModelingCausalML (Uber)scikit-upliftRELEX: Promotion Optimization

Enjoyed this? Leave a clap (or twenty)