Discount codes are the quickest lever an online shop has. Slow week? Send out 20% off. New customer? 10% off their first order. The trouble is that a code set up in five minutes can run for months, turn up on voucher sites and take money off orders you would have won anyway.
We build and look after online shops for businesses in Norwich and across Norfolk, and discounts come up on almost every project. Here is what we tell clients before they publish a promotion.
Work out what the discount really costs
A percentage off comes straight out of your profit, not just your price. Take a product that sells for £20 and costs you £12 once you count stock, packaging and postage. Your profit is £8. Take 25% off and the customer pays £15, so your profit falls to £3. You have cut the price by a quarter and your profit by more than half.
So before you pick a number, know your margin per product, not just your average. A code that works on your high-margin items can lose money on the rest.
Six rules every code should have
Shopify, WooCommerce and any decent custom build let you put limits on a code. Use them. The open-ended code with no rules is the one that causes problems.
- An end date. Every code should expire. A 'spring sale' code still working in November teaches customers to wait for the next one.
- A usage limit. Cap the total number of uses, and limit it to once per customer.
- A minimum spend. On small orders, delivery and packaging already eat most of the margin. A minimum spend keeps the discount on orders that can carry it.
- Product exclusions. Leave out items that are already reduced, and anything made to order or personalised where the margin is thin.
- A stacking decision. Decide whether a code can combine with other offers, free delivery or trade prices. If you do not decide, the platform settings will decide for you.
- A clear name. Codes like NEWSLETTER10 and INSTAGRAM10 tell you where each order came from. SAVE10 tells you nothing.
Public codes do not stay private
Once a code is out in the world, assume anyone can find it. Voucher websites and browser extensions collect codes and offer them at checkout to people who were already about to buy. A promotion meant to win new customers becomes a discount for everyone.
Where you can, use single-use codes. A unique code sent to each newsletter subscriber, or printed on a card in each parcel, only works once, so it cannot spread.
A discount should win an order you would not have got otherwise. If it only shrinks orders you were getting anyway, it is a cost, not a promotion.
Trade customers need prices, not codes
If you sell to other businesses, handing them a promo code is a workaround. Trade buyers expect to see their own prices every time they log in, and many want to pay on invoice rather than by card.
On Brandemic, the custom packaging shop we built for a business run from St Saviours Yard in Norwich, trade customers can be invoiced and have their own discounts set on their account. Promo codes with usage limits sit alongside for everyone else. Each supplier confirms their price for an order through their own link, so the admin shows real profit per order. That means the team can see what a discount actually cost them, rather than guessing.
Check the final price on the server
One technical point worth raising with your developer: the final price, including any discount, should be worked out again on the server before payment is taken. If the shop trusts whatever total the browser sends, a determined visitor can change it.
On the booking system we built for NR Surveyors, the server works out every quote again before taking payment, so prices cannot be tampered with. The same rule should apply to every discount on your shop.
Measure whether it worked
After a promotion, look at more than total sales. Ask:
- How many orders used the code, and what was the profit on them after the discount?
- Were they new customers, or regulars who would have bought anyway?
- Did those new customers come back and buy again at full price?
If the answers are 'mostly regulars' and 'no', the next promotion should be smaller, shorter or aimed somewhere else.
Where to start
If you already run an online shop, open your discount settings today and look for codes with no end date or no usage limit. Switch off any you do not recognise. If you are planning a new shop, whether on Shopify or built around how you work, put discounts and trade pricing in the brief from day one. They are far easier to build in than to bolt on later.
Key takeaways
- Know your profit per product before choosing a discount
- Give every code an end date, a usage limit and clear exclusions
- Use single-use codes so offers cannot spread to voucher sites
- Give trade customers account prices and invoicing, not promo codes
- Make sure the final price is checked on the server before payment




