Discount stacking is the quietest way a D2C brand loses money, because every individual decision that produces it is defensible. Nobody approves a below-cost sale. The sale happens anyway, because discounts are configured in different systems by different people and no single screen shows the price a customer actually pays.

The compounding problem is that a below-cost price converts better. Your worst-margin SKU wins the traffic, exhausts its stock first, and tops the best-seller report. The dashboard celebrates exactly the thing that is costing you money.

Where the Stack Comes From

A typical Indian D2C stack has at least five independent discount mechanisms, rarely owned by one person:

  • Site-wide or category sale — set by merchandising, usually with a clean end date.
  • Automatic cart discounts — tiered thresholds ("10% over ₹1,499") that apply silently.
  • Coupon codes — welcome offers, abandoned-cart recovery, influencer codes. These are the usual culprit because they are issued continuously and expired rarely.
  • Payment-instrument offers — bank or wallet discounts, often partly seller-funded, and the funded share is frequently misremembered.
  • Free shipping thresholds — not a discount in the promo engine, but identical in cash terms.

Each is individually sane. The failure is that mutual exclusion is opt-in, and nobody owns the composition.

The Anatomy of a Loss-Making Order

Illustrative model. Inputs are stated so you can substitute your own; these are not measured results or an industry benchmark.

A ₹1,499 cart. COGS ₹650, forward freight ₹120, payment gateway fee ~1.8%, packaging and pick-pack ₹35.

  • 20% site-wide sale: −₹300
  • ₹300 welcome coupon, not excluded from sale items: −₹300
  • Free shipping applied below the intended threshold: −₹0 to the customer, ₹120 to you
  • Net cash received: ₹899

Against costs of ₹650 + ₹120 + ₹16 + ₹35 = ₹821, leaving ₹78 contribution — before any return.

Now apply a 25% return rate to the cohort. One return in four costs the forward freight, the return freight and the handling: on these inputs roughly ₹240. Spread across four orders that is ₹60 per order, which turns a ₹78 contribution into ₹18 — and into a loss the moment the customer uses a slightly larger coupon or the parcel crosses a weight slab.

The lesson is not the specific number. It is that contribution margin at this level is inside the noise band of your own freight and return variance, so the order is effectively a coin flip you did not know you were taking.

Auditing It Before the Order Ships

The pre-flight version of this audit is a single sheet with one row per SKU and one column per discount mechanism. For each SKU compute the composed floor price: the price that results when every currently-active mechanism applies at once. Then subtract marketplace commission, payment fees, fulfilment and packaging, and compare against landed cost.

Any SKU whose composed floor sits below landed cost is a live leak regardless of whether that combination has occurred yet — because if it is possible, at festive volume it will occur.

Two practical notes. First, kill the overlapping coupon, not the headline deal: the deal is what drives ranking and traffic, the stale coupon is pure leakage. Second, the most common single fix is an expiry date on every coupon at the moment it is created; most stacking traces back to a code nobody remembered was still live.

Detecting It After the Fact

To find stacking that has already happened, you need an order-level export carrying, per line item: gross price, every discount applied with its source, shipping charged, payment fee, and your landed cost. Compute contribution per line and sort ascending. The audit is looking for three shapes:

  1. Negative contribution lines — the direct hit. Group by coupon code; stacking failures concentrate in one or two codes.
  2. Discount depth above the configured maximum — any line where total discount exceeds the deepest single approved mechanism proves composition occurred, even where the line is still marginally profitable.
  3. Velocity anomalies — a SKU whose units-per-day jumps sharply without a corresponding campaign is often being surfaced by a price you did not intend.

If your export lacks a per-discount breakdown, that is the first thing to fix; without it you can see that margin fell but not why, and the audit stalls at "the numbers look bad."

Controls That Actually Hold

  1. Mutual exclusion by default. Coupons should not combine with automatic discounts unless someone explicitly opts in for a specific campaign.
  2. A hard floor price per SKU, enforced in the promo engine rather than in a policy document, set at landed cost plus your minimum contribution.
  3. Mandatory expiry on every code. No open-ended coupons, including influencer codes — especially influencer codes.
  4. A named owner for composed pricing. Merchandising owns the deal, growth owns the coupon, finance owns the margin, and composition is owned by nobody. Assign it.

The first two are the ones that survive a busy week. Controls that depend on somebody remembering to check a sheet do not.

Related Guides

⚡ Try This Verification Rule in the Sandbox

Test sample payloads in our zero-dependency interactive explorer.

Open Free API Sandbox →

🧮 Interactive Profit Leak Estimator

LIVE ESTIMATOR

Estimate your monthly financial loss from courier weight creep, dead freight, and gateway fee drift:

Estimated Monthly Profit Leaks:₹28,875 / mo (₹3,46,500 / yr)
Based on standard 10.5% volumetric weight creep & 1.2% cancellation dead freight across industry benchmarks.
⚡ AUDIT TOOL & TEMPLATE PACK

Trap Commerce Operations Discrepancies Automatically

Run a free instant diagnostic on your data or grab our verified operations templates on Gumroad: