In this guide 6 sections
Discount codes cost margin on the order where they are used. Points cost you later, only if redeemed, and need a ledger. Use points and tiers for products people reorder, such as cleanser or shampoo. Keep codes for first orders and win-back. Test one segment before choosing.
What each one costs, and when you pay
A discount code takes margin on the very order it is used, and you see the cost at once, on the invoice. Both are real costs. Points work the other way: you make a promise now and pay only when the balance is spent, which may be next month or never at all.
That delay cuts both ways. Some points are never redeemed. Yet every open balance is something you owe customers, so keep a ledger of earned, spent and expired points, and ask your accountant how the balance should be recorded. A code leaves nothing behind.
Match the reward to what people buy
Repeat buyers do not behave alike. Cleanser and shampoo run out on a rough timetable, so points and tiers can reward the second and third bottle and prompt a reorder before the first is empty. A beard oil buyer reorders every few months. A perfume buyer may return once a year.
Makeup adds a twist. Foundation shades and lipstick finishes tempt shoppers to try something new, so a free sample of the next shade usually beats money off the one they own. Gift sets suit a plain code. Nobody builds a balance from a one-off present.
- Cleanser, shampoo and razor cartridges: points and tiers
- Shade-led makeup: a free sample of the next shade
- Gift sets and seasonal boxes: a time-limited code
- Fragrance: a birthday gift or a sample with the order
- Grooming kits: a top tier that earns free delivery
Where codes leak and points drift
Codes escape. A welcome code lands on a coupon site, and a browser extension tries every code it knows at checkout while the buyer watches the total drop. Some buyers register twice. Stack a code on top of a sale price and a product can end up below cost, with the loss hidden inside a monthly average that looks healthy.
Points drift in other ways. Points earned on an order that is later returned stay in the balance, and nobody notices until the accountant reconciles the ledger at year end. Balances that never expire grow quietly. A tier cliff on the last day of the year makes the buyers who just miss it feel punished, and a punished buyer shops elsewhere in January.
- Limit codes to one use per customer and exclude sale items
- Add points only after the return window closes
- Reverse points when an order is refunded
- Expire balances after a stated period of inactivity
- Collect a birthday once, at sign-up, and lock it
How each is set up in a store
Codes are built into Shopify and WooCommerce. Create the discount, set a minimum cart, cap it at one use per customer, choose the collections it covers and give it an end date. Customer segments let you send lapsed buyers a different code from the one new visitors see, and a unique code per person stops a single code from spreading.
Points need a ledger, kept by an app or by custom code, and each row holds the customer, the order, the points, the reason, the date and the expiry. Earn points after delivery. Wait for the return window to close. Spend them as a single-use code created at checkout for exactly the amount the customer chooses, so the same balance cannot be used twice.
Tiers come from a trailing twelve-month sum of spend per customer, recalculated every night, so no buyer falls off a cliff on a fixed date. Birthday rewards need a date of birth collected with consent. Add a scheduled email and a code that expires within days.
Test one product segment before you commit
Pick the product people reorder, such as a cleanser. List everyone who bought it once. Split the list in two. Send one half a code for the second bottle, and send the other half a message showing a points balance that covers the same bottle once they reorder.
Watch the reorder rate and the gross margin per order after the reward, across one full reorder cycle, and ignore open rates and click counts. The winner leaves more margin per repeat order. Write it down before you roll anything out.
Reward comparison sheet
A one-page grid. Each row is a reward: welcome code, win-back code, points per order, spend tier, birthday gift or sample with order. Columns cover the trigger, the cost at your margin, when the cost lands, the leakage risk and the setup effort in the store. A second block records margin per order for the two test groups.
Open a blank worksheet to printQuestions owners ask
Do points work for a brand with only a few products?
Rarely. Buyers cannot build a balance fast enough to care. A small range does better with a clear first-order code, a sample tucked into the third order and a short note thanking the buyer for coming back.
Should a birthday reward be points or a code?
A small gift or a short-lived code works best. Collect the date once, with consent, then lock the field so nobody can change it to claim a second reward.
Can we run points and codes together?
Yes, with rules. Decide whether a code may be used on an order paid partly with points, and show one offer at a time at checkout so the buyer is not confused.
How do unredeemed points show in the accounts?
They are an obligation to customers. Ask your accountant how to record the balance and any expiry, since the treatment depends on your country and on how the points can be spent.
