Free Shopify store auditSpeed, SEO and conversion leaks — no cost, no obligation.
Claim it
Thriftizer Solutions LLPShopify Select Partner
Book a Growth Audit
Shopify Sep 16, 2026 8 min read

Shopify Discounts Explained: 10 Ways to Offer Discounts Without Hurting Profit

A 20% off code on a 60%-margin product needs about 56% more orders just to break even. Here's the arithmetic, plus ten discount mechanics that protect contribution margin on Shopify.

Shopify Discounts Explained: 10 Ways to Offer Discounts Without Hurting Profit

Most Shopify discounts lose money not because the percentage was too big, but because nobody worked out how many extra orders it needed to pay for itself. A 20% off code on a 60%-margin product needs roughly 56% more orders to hold your gross profit flat once shipping and gateway fees are in. That is a hard number to hit. If you know it before you publish the discount, you make better decisions about depth, targeting and whether to run the promo at all.

What follows is the arithmetic, then ten mechanics we actually use on client stores, ranked roughly by how much margin they protect.

The calculation to run before you touch the discount field

Take one representative SKU. Selling price ₹2,000. COGS ₹800. Gross margin ₹1,200, so 60%.

Now add the costs that move with each order: shipping at ₹70 and a payment gateway fee around 2%. At full price that's ₹40 + ₹70 = ₹110, leaving ₹1,090 contribution per order.

Apply 20% off. Price becomes ₹1,600. Gross margin drops to ₹800. Gateway fee falls to ₹32, shipping stays ₹70, so contribution is ₹698.

₹1,090 ÷ ₹698 = 1.56. You need 56% more orders to stand still. Sell 100 units at full price and you bank ₹1,09,000 in contribution; you need 156 discounted units to match it.

Run that for your three best sellers and your worst. The spread will surprise you, and it tells you which products can carry a promo and which ones should never appear in one. We do this in a spreadsheet before every festive plan, and it kills about a third of the ideas on the list.

1. Threshold discounts instead of sitewide percentages

A blanket "15% off everything" pays a discount to every customer who was already going to buy a single item. A spend threshold only pays out when the basket grows.

Set the threshold from your actual AOV, not a round number. If AOV is ₹1,450, a ₹1,699 threshold is reachable for most carts with one more item. Set it at ₹2,500 and you'll mostly be watching people bounce. We generally land between 1.15× and 1.35× AOV, then check the distribution of order values two weeks later to see whether a lump has formed just above the line. If it has, the threshold is working.

2. Free shipping is usually the cheapest Shopify discount you can run

On a ₹1,700 cart, absorbing ₹70 of shipping costs you 4.1% of revenue. A 10% code costs ₹170. Customers respond to both, and in Indian cart tests free shipping above a threshold consistently does more work per rupee given up than a comparable percentage off, because shipping is the cost people resent most.

The version that fails: free shipping with no minimum. You've just handed ₹70 to every ₹399 order, and small orders are where your margin was thinnest to begin with.

3. Prepaid discounts, and the math most Indian stores get wrong

The standard move is a 5% prepaid discount to shift orders off COD. Here's the honest arithmetic on a ₹1,600 order.

Say your COD share is 60%, RTO on COD runs 25%, and an all-in RTO costs you about ₹225 once you count forward freight, return freight, packaging and restocking. Per 100 orders, that's 60 COD orders, 15 RTOs, ₹3,375 of waste.

Now offer 5% (₹80) on every prepaid order. If the discount converts most COD buyers to prepaid, you might pay it on 90 orders: ₹7,200. You saved maybe ₹2,700 of RTO. You are down ₹4,500, and most of that leakage went to the 40 customers who were paying by UPI anyway.

That doesn't mean prepaid incentives are wrong. It means the depth has to fit the actual RTO cost, and the incentive should not be visible to people who never chose COD. Practical version: a flat ₹50, or 3% capped at ₹100, and in categories where COD RTO is genuinely 35-40% the numbers flip in your favour fast. Also worth doing first, because it's free: fix the address form, add an OTP step on high-value COD, and block COD above a value where the RTO loss exceeds the order's contribution.

4. Volume breaks and bundles

Buy 2 get 10% off, buy 3 get 15%, or a fixed-price kit. Two things make this better than a sitewide code. The discount only triggers on a bigger basket, and it does not reset the customer's memory of what one unit costs. Someone who bought a three-pack at ₹4,500 has not learned that your ₹1,700 product is "really" a ₹1,400 product.

Shopify's native discount types cover simple quantity tiers. Anything conditional beyond that (tier by collection, cap the value, exclude new arrivals, apply per customer segment) needs a discount function. That is custom app work, usually a few days rather than a few weeks, and it is no longer Plus-only. What Plus actually buys you here is B2B price lists and tighter control at checkout, which matters if you're running wholesale and retail off one store. If you're not, the upgrade probably isn't the thing solving this problem.

5. Automatic discounts beat codes, because codes leak

A visible "Have a discount code?" field is an invitation to open a new tab. Some of those people come back with a code from an aggregator site or a browser extension that auto-fills whatever it has cached, and some don't come back at all. Either way the code field cost you something.

Where the offer is universal (threshold, free shipping, bundle), run it as an automatic discount that applies in cart with no code. Keep codes for things that genuinely need to be earned: a signup incentive, a win-back, an influencer allocation, a service recovery. Then a code means something and you can measure who used it.

6. Store credit instead of cash off

Shopify's store credit lets you push value forward rather than giving it away now. Two good uses. On returns, offering credit at a small premium over the cash refund (say ₹1,100 of credit against a ₹1,000 refund) keeps the money in the business and converts a loss into a second order for a lot of customers. And as service recovery for a late delivery, credit beats a refund because it costs you margin on a future sale instead of cash today.

Same logic applies to loyalty points. Points are a deferred, partially unredeemed liability. A discount code is cash out the door on the spot.

7. Segment it, or you pay people who already decided to buy

The email you send to everyone with 15% off goes to the person who added to cart four minutes ago. Sequence matters more than depth.

What we set up on most stores: abandoned cart with no discount at hour one, a reminder with free shipping at hour 20, and only then a modest code at day three for carts above a value floor. Win-back at 90 days can go deeper, 20-25%, because those customers are otherwise gone and the discount is buying a reactivation rather than subsidising a decision already made. First-order offers should be gated behind an email or WhatsApp opt-in, so you are at least buying a contactable subscriber with the margin.

8. Clearance belongs in compare-at price, not in a code

For end-of-season and slow movers, mark the price down on the product with a compare-at price. It shows on collection pages, it gets picked up in feeds, it does not need a code, and it does not teach customers that a code exists for your full-price range. Time-box it and reset the price when the stock clears. Permanent strikethrough pricing stops meaning anything within about six weeks, and we have seen stores where every SKU has a compare-at price and the site reads like a liquidation.

9. Stacking rules are where this actually breaks

Shopify splits discounts into product, order and shipping types, and each one has combination settings. Leave them loose across five live promos and someone will find the path that stacks a 20% code onto a bundle onto free shipping, and post it in a deals group by evening.

Before any big sale, we list every active and scheduled discount in one place and test the combinations manually with a real cart: highest-value stack, lowest-value stack, a gift card, a COD order, a cart with a pre-order item. It takes an hour. On a first pass we find something wrong maybe a third of the time, usually a shipping discount that combines when it shouldn't.

10. Decide the festive floor in September, not on 20 October

Build the calendar for Navratri through Diwali and into the new-year sales before the traffic arrives, with a fixed discount floor per category. Write down the number you will not go below. The floor is the whole point of the exercise, because when the sale is live and a competitor goes deeper, the decision gets made emotionally.

One operational note: heavy promo traffic finds every slow page you have. If your collection pages take three seconds to render on a mid-range Android on 4G, the discount is paying for traffic that never sees the offer. Worth a look at page speed a month before, not during.

The GST line worth checking with your CA

Under Indian GST, a discount shown on the invoice at the time of supply reduces the taxable value. Discounts given after the sale are treated differently and generally need to have been agreed at or before the time of supply and linked to the relevant invoices to reduce the taxable value. This matters if you run post-purchase cashbacks or trade schemes. Get the treatment confirmed by your accountant before you scale the mechanic, not after a year of it.

What to watch weekly

Two numbers, side by side. Discount as a percentage of gross revenue, and contribution margin per order. If discount spend is climbing while margin per order holds, you are buying volume efficiently. If both move the wrong way, the promo is subsidising demand you already had.

Also track the share of orders with no discount at all. When that falls below about half, full price has stopped being a real price on your store, and pulling it back takes a quarter or more.

If you want a second pair of eyes on where the margin is going, our free store audit covers discount configuration and stacking alongside the usual speed and conversion checks. Bring your COGS numbers to that conversation; without them it's guesswork.

Next post

Ready to scale your D2C brand profitably?

Let's build a growth engine that drives more traffic, more conversions and more profit.

Book a Growth Audit
📅 Free Audit💬 WhatsApp