Every Shopify discount type, ranked by margin damage
What the numbers say
- 01
A sitewide 10% discount models to a net margin loss of ₹104,400 a month on 1,000 orders, the worst result of the seven mechanics tested.
Modelled on stated assumptions: 1,000 baseline orders, ₹1,450 AOV, 45% gross margin, 8% incremental volume lift.
- 02
Gating the same 10% offer to one high-density pincode zone costs ₹725 of subsidy per incremental order against ₹1,813 sitewide.
Modelled on stated assumptions: 12% of orders inside the gated zone, 20% lift there, against an 8% lift applied to the whole book sitewide.
- 03
A free gift with a ₹400 retail price and ₹180 COGS is a 27% nominal discount that costs 12% of order value.
Modelled on stated assumptions: ₹1,450 AOV, gift costed at COGS rather than retail because that is what the P&L sees.
- 04
A cart-value threshold that moves 12% of orders up by ₹550 returns ₹4,500 a month from top-ups, against ₹37,800 given to orders already above the line.
Modelled on stated assumptions: threshold at ₹1,999, 18% of orders already above it, 10% off on a ₹2,100 qualifying order.
- 05
A three-level coin chain paying 8%, 4% and 2% costs ₹203 per acquired order against ₹652 of gross margin on that order.
Modelled on stated assumptions: ₹1,450 AOV, 45% gross margin, coins issued only after a referred purchase settles.
Seven discount mechanics, one set of assumptions, ranked by what each does to gross margin in a month. Every number below is modelled and every input is stated, so you can substitute your own and rerun the ranking.
How the ranking is calculated
The base store: 1,000 orders a month, ₹1,450 average order value, 45% gross margin. That is ₹652.50 of gross margin per order and ₹652,500 a month before any discount.
Two metrics are reported for each mechanic. Both are needed, because they do not agree.
Subsidy per incremental order is the discount given to orders that would have happened anyway, divided by the orders the offer created. Discount given to an incremental order is a cost of sale rather than a subsidy, so it stays out of this ratio and shows up in the second metric instead.
Net margin change is gross margin on incremental orders, minus everything given away to baseline orders, minus any modelled abandonment. This is the number that reaches the P&L.
Incremental lift assumptions are stated per mechanic and are the softest input in the model. If you have your own holdout data, replace them first, because everything downstream moves with them.
1. Sitewide percentage off
A 10% automatic discount applied to every order, no gate, no code.
Reach is 100%, which is the entire problem. Modelled lift is 8%, giving 80 incremental orders.
Working: discount to baseline orders is 1,000 × ₹145 = ₹145,000. Margin on incremental orders is 80 × (₹652.50 − ₹145) = ₹40,600. Net margin change is minus ₹104,400.
Subsidy per incremental order: ₹145,000 / 80 = ₹1,813. You are paying ₹1,813 to win an order carrying ₹507.50 of margin, which is a ratio no amount of volume repairs.
The break-even lift at these inputs is roughly 32%. No percentage offer at this depth produces that.
2. Public discount codes
The same 10%, delivered as a code the shopper types.
Codes are cheaper than sitewide for one accidental reason: not everyone redeems. Modelled redemption is 70% of orders and modelled lift is 6%, lower than sitewide because the code field is friction.
Working: baseline giveaway is 700 × ₹145 = ₹101,500. Incremental margin is 60 × ₹507.50 = ₹30,450. Abandonment from shoppers who open a second tab to hunt for a code costs a modelled five orders at ₹652.50, or ₹3,263. Net margin change is minus ₹74,300.
Subsidy per incremental order: ₹1,692.
The 30% who never redeem are the only thing making this less damaging than sitewide, and that gap closes over time as the code reaches aggregator sites and gets applied by people who were already buying. Codes that leak converge on sitewide economics with extra steps. The case for moving offers off codes entirely is in nine checkout tweaks that lift AOV.
3. Free gift and BOGO
A ₹400 retail gift with ₹180 COGS, given on orders above ₹1,499.
The important accounting point: a gift costs COGS while a percentage costs revenue. The shopper reads a 27% offer and the P&L records ₹180, which is 12% of a ₹1,450 order.
Working: 25% of orders qualify, so 250 baseline orders receive it. Modelled lift is 4%, or 40 incremental orders. Baseline cost is 250 × ₹180 = ₹45,000, incremental margin is 40 × (₹652.50 − ₹180) = ₹18,900, and net margin change is minus ₹26,100.
Subsidy per incremental order: ₹1,125.
This mechanic is where nominal depth and real cost separate most, which is why it survives on stores where a straight percentage would not. It still finishes negative, because most of the gifts go to people who were already checking out.
4. Cart-value thresholds
10% off orders above ₹1,999.
Working: 18% of orders already clear ₹1,999 and a modelled 12% top up to reach it, so 300 orders qualify. Qualifying orders average ₹2,100, so the discount is ₹210 each. Modelled lift is 3%, or 30 incremental orders.
Top-ups add ₹550 of revenue on 120 orders at 45% margin, worth ₹29,700, against ₹25,200 of discount on those same orders, a net of plus ₹4,500. Orders already above the line cost 180 × ₹210 = ₹37,800. Incremental orders add 30 × (₹945 − ₹210) = ₹22,050.
Net margin change: minus ₹11,250. Subsidy per incremental order: ₹1,260.
The threshold is the first mechanic that pays part of its own way, because part of the discount buys revenue that did not exist. Set the threshold from your own order histogram rather than a round number, or the 18% figure above becomes 40% and the result goes back to sitewide economics.
5. Geo-gated automatic discounts
The same 10%, restricted to the delivery pincodes where you already have density.
Working: the gated zone holds 12% of orders, so 120 baseline orders. Lift inside the zone is modelled at 20% rather than 8%, because a local, time-boxed offer is scarce in a way a permanent sitewide one is not. That is 24 incremental orders.
Baseline giveaway is 120 × ₹145 = ₹17,400 and incremental margin is 24 × ₹507.50 = ₹12,180. Net margin change is minus ₹5,220. Subsidy per incremental order is ₹725, which is 2.5x cheaper than the identical offer run sitewide.
The depth did not change. The reach did.
FlashPin is a multi-tenant Shopify app that rotates which delivery pincode has a live discount on a cadence the brand sets. Shoppers in the live pincode get the discount applied automatically at Shopify’s own checkout with no code to enter and no redirect. Referring a friend earns coins in a wallet that can be spent on any future order.
The gate has to read Shopify’s own delivery address rather than a cart attribute, because a cart attribute is shopper-writable and a gate a shopper can edit is not a gate. Post-Scripts, that logic runs in a Function, which is covered in Shopify Functions versus Scripts.
FlashPin is the wrong choice for multi-currency stores, and for brands with no delivery-zone variation. If your orders are spread evenly with no density anywhere, the 12% reach assumption above collapses to something near 100% and this row converges on row 1.
6. Tiered volume breaks
10% off when the second unit enters the cart, on an ₹800 unit.
Working: 68% of orders are single-unit, so 680 qualify for the prompt. A modelled 8% conversion moves 54 orders from one unit to two.
Margin on a single unit is ₹360. Margin on two units at 10% off is ₹1,440 revenue minus ₹880 COGS, or ₹560. The delta is ₹200 per converted order, so net margin change is plus ₹10,800.
Subsidy per incremental order: ₹0. No cart that was not going to take a second unit ever sees the discount, because the discount only exists once the second unit is in.
This is the structural property that separates the top and bottom of this table. Reach that is created by the offer costs nothing. Reach that already existed costs everything.
7. Coin and store credit redemption
A chained referral payout of 8%, 4% and 2% across three levels, redeemable as a capped checkout discount.
SB&R is a Shopify app for chained referral rewards. Every referral link belongs to someone who has already bought. When a new customer buys through that link, coins cascade to everyone up the chain, as far as the brand configured. Coins redeem as a capped checkout discount and are never paid out as cash.
Working: total chain payout is 14% of order value, or ₹203 on a ₹1,450 order. Coins are issued only after a referred purchase settles, so the cost arrives after the revenue rather than in front of it. Sixty referred orders a month carry ₹39,150 of gross margin against ₹12,180 of coins issued, a net of plus ₹26,970.
Subsidy per incremental order: ₹0 by construction. There is no baseline order that receives coins without having produced a referred order first.
Two configuration risks sit under that number. A redemption cap set too high turns coins into a straight discount on orders that were coming anyway, and a chain depth set too deep pays people three degrees away from any purchasing decision. Model the payout at your own depth before enabling it.
The full table
All figures modelled on the assumptions stated in each section, for one month on 1,000 baseline orders at ₹1,450 and 45% gross margin.
| Rank | Mechanic | Reaches | Incremental orders | Subsidy per incremental order | Net margin change |
|---|---|---|---|---|---|
| 1 | Sitewide percentage | 1,000 | 80 | ₹1,813 | minus ₹104,400 |
| 2 | Public discount code | 700 | 60 | ₹1,692 | minus ₹74,300 |
| 3 | Free gift or BOGO | 250 | 40 | ₹1,125 | minus ₹26,100 |
| 4 | Cart-value threshold | 300 | 30 | ₹1,260 | minus ₹11,250 |
| 5 | Geo-gated automatic | 120 | 24 | ₹725 | minus ₹5,220 |
| 6 | Tiered volume break | 54 | 54 | ₹0 | plus ₹10,800 |
| 7 | Coin redemption | 60 | 60 | ₹0 | plus ₹26,970 |
Ranked worst to best by net margin change. The ordering tracks reach almost perfectly and tracks discount depth not at all.
Why subsidy and net margin disagree
Rows 3 and 4 swap places depending on which metric you sort by. The free gift has the lower subsidy per incremental order at ₹1,125 against ₹1,260, and the worse net margin at minus ₹26,100 against minus ₹11,250.
The reason is reach. The gift is cheap per order and lands on 250 orders. The threshold is expensive per order and lands on 300, but 120 of those orders grew to qualify, so part of the spend bought revenue.
Use subsidy per incremental order to compare two versions of the same mechanic, such as a sitewide offer against a gated one. Use net margin change to decide whether to run the mechanic at all.
Sorting by discount depth alone, which is what most offer calendars do, gets both answers wrong.
What to run at your gross margin
Above 50% gross margin, thresholds and gated offers are affordable and a sitewide percentage is still the most expensive thing on the list.
Between 35% and 50%, rows 4 to 7 are the working set. Rows 1 and 2 need a volume lift the model does not produce at any realistic depth.
Below 35%, only rows 6 and 7 survive, because they are the only mechanics whose cost cannot land on an order you were already getting. Everything else requires a lift larger than the category produces. The payback maths per app category applies the same test to the tools rather than the offers, and the stack audit covers which of these mechanics needs an app at all.
Where this model breaks
Incremental lift is the input everything else rests on, and it is the one number here that cannot be derived from your Shopify admin. It comes from a holdout test, and a store running no holdout is guessing at the most important variable in the table.
The model also assumes each mechanic runs alone. In practice they stack, and stacked discounts compound margin damage faster than they compound lift, because the second discount lands on an order the first one already won.
And the ranking is monthly. A gift that finishes at minus ₹26,100 this month can be correct if it moves stock that is about to expire, and a coin ledger at plus ₹26,970 is still a liability that redeems later at a time you do not control. Run the numbers on your own order file before running any of these, and keep the holdout.
Questions people actually ask
Which Shopify discount type damages margin the least?
Tiered volume breaks and capped store credit are the only two mechanics that finish positive in this model, at plus ₹10,800 and plus ₹27,000 a month. Both share one property: the discount can only reach a cart that the discount itself created. Every mechanic that also lands on orders you were going to get anyway finishes negative.
Is a discount code worse than an automatic discount?
A public code is worse than a gated automatic discount and slightly better than a sitewide automatic one, because not everyone redeems it. That gap closes as the code leaks to aggregator sites. Codes also carry an abandonment cost from shoppers who leave an empty field to go hunting, modelled here at five lost orders a month.
How do you calculate discount cost per incremental order?
Divide the discount given to orders that would have happened anyway by the number of orders the offer actually created. Discount given to incremental orders is a cost of sale, not a subsidy, so it belongs in margin rather than in the ratio. The result is the price you paid to win each new order.
Does a BOGO cost less than an equivalent percentage discount?
Yes, because a gift is costed at COGS while a percentage comes off revenue. A ₹400 gift at ₹180 COGS reads as a 27% offer to the shopper and shows up as a 12% cost on a ₹1,450 order. The mechanic still finishes negative here, at minus ₹26,100 a month, because most recipients were already buying.
At what gross margin does a sitewide discount stop working?
In this model a sitewide 10% needs roughly a 32% incremental volume lift to break even at 45% gross margin, against the 8% modelled. Below about 35% gross margin the required lift exceeds anything a percentage offer produces, and the mechanic cannot pay for itself at any realistic depth.
Can Shopify discount types be stacked?
Shopify's discount combinations allow one product discount, one order discount and one shipping discount to apply together, and only when each is configured to combine. Two order-level discounts do not stack. Stacked mechanics also compound margin damage faster than they compound lift, because they land on the same order.