Discount Code Campaigns for Online Stores: A Practical Guide
By Arash Latifi — Founder, The DevArt
A discount code is not just a percentage off. Learn how to scope a campaign, protect your margin, and measure the only metric that matters.
TL;DR — Discount codes only pay off when they are scoped (time, minimum cart, usage cap) and measured; an unlimited code just eats your margin.
Why we give discount codes
Discounts are one of the fastest ways to trigger a first purchase, and one of the worst ways to build a bad habit. A customer who only buys at 50% off will not come back at full price. So treat a discount code as a customer acquisition and measurement tool, not a sales tool.
Lower-risk uses:
- First-purchase incentive at a small number (10 to 15%)
- Abandoned cart recovery, scoped to that session only
- Moving seasonal or aging stock
- Pushing the order value above a threshold to absorb shipping cost
The structure of a good campaign
Every campaign has three layers: amount, constraints, goal.
- Amount: percentage or fixed value. Percentages scale better across a catalog.
- Time window: an expiry date. Without one, the code quietly becomes a permanent discount.
- Minimum cart: e.g. "orders over 500k". This is the highest-leverage knob you have; it grows the cart instead of shrinking the price.
- Usage cap: 100 uses. It matters for inventory and for cost control.
- Goal: exactly one page or channel. Keep "Instagram only" and "Telegram only" codes separate, otherwise you can never attribute sales.
| Code type | Goal | Risk | Suggested setup | | --- | --- | --- | --- | | Welcome (first order) | Acquire new customers | Low | Small percent + medium minimum cart | | Abandoned cart | Close a lost sale | Medium | Session-scoped, 48h expiry | | Old stock | Clear inventory | Low | Restricted to one category, fixed quantity | | Loyalty | Second purchase | Low | Fixed amount + higher minimum cart | | Influencer | Drive one channel | High | Short expiry, tight usage cap |
Grow the cart, don't break the price
The common mistake is raising the discount percentage to sell more. It backfires: margin collapses and customers learn that buying should always wait for a sale.
Use a tiered code instead:
- Up to X: 5% off
- X to 2X: 10% off
- Above 2X: 15% off
Now the larger cart justifies its own discount. Pair this with a strong product pageproduct-page-that-sells that communicates the value of the category. On the implementation side, optimistic cart updates in Reactreact-optimistic-cart-tech show how to wire the code into cart state without the UI feeling laggy.
Measure the number that matters
Most stores only check that "the code was used". The correct figure is:
Real profit = (revenue from code − discount given) − acquisition cost
Track three rates separately:
- Code redemption rate: how many people see the code and actually land on the site. Below 2%, the problem is your promotion, not the code.
- Average cart with vs without code: if there is no meaningful gap, the code is only capturing buyers who were going to buy anyway.
- Repeat rate: after the code expires, does that customer come back? This is the real loyalty test.
One practical rule: give every code exactly one tracked source. Use a short link or a ?code= parameter so you know where it came from. Without that split you only see an aggregate number and cannot make decisions.
Mistakes I keep seeing
- A code with no expiry date, which is a permanent discount with a marketing name.
- Several live codes at once, confusing the customer. Three is plenty.
- Advertising 50% off when you only make 20%.
- Forgetting the usage cap and overselling your stock.
- Measuring orders while ignoring profit.
Execution checklist
- [ ] Goal and landing page defined for each code
- [ ] Expiry date set
- [ ] Minimum cart and usage cap active
- [ ] Code advertised only on its own channel
- [ ] Tracking link or parameter per code
- [ ] Real profit calculated after the discount
- [ ] Repeat purchase rate reviewed after the campaign ends
FAQ
Q: Do discounts always increase sales?
No. Discounts often pull forward purchases that were already going to happen. If you watch volume and not profit, you fool yourself.
Q: What discount percentage works best?
For acquisition, 10 to 20% is usually enough. More than that turns customers into discount shoppers.
Q: Where should I publish the code?
One channel per code: an Instagram bio, a channel post, an abandoned-cart message, and anywhere on the site that genuinely needs it. Spreading one code everywhere destroys its redemption rate.
Sources
- Google Merchant Center — Free listings for products: https://support.google.com/merchants/answer/13889434
- Google Ads Help — Optimize your ads and landing pages: https://support.google.com/google-ads/answer/6238826
- Shopify Blog — Discount code ideas: https://www.shopify.com/blog/discounts-and-coupons
- Google Search Central — Spam policies: https://developers.google.com/search/docs/essentials/spam-policies