RETENTION · ANALYTICS · MARKETING · 12 AUGUST 2026 · 8 MIN READ
Loyalty tiers and the maths behind them
A tier is a discount you have promised in advance to the people most likely to buy anyway. Work out what it costs before you name it after a metal.
Design the thresholds from your own customer value distribution, not from round numbers, and cost every tier as reward value multiplied by the share of customers who will reach it and redeem. A tier pays back only if it changes behaviour — a second order that would not have happened, or a larger basket — and most tiers are handed to customers who were already going to buy. Model the subsidy first, decide what behaviour change would cover it, then design the mechanic.
IN SHORT
- A loyalty tier is worth building only if you can name the specific behaviour it should change and the number that would show it.
- Set thresholds from percentiles of your own customer spend distribution, because a round number either catches nobody or catches everybody.
- The cost of a tier is reward value times reach times redemption, and the last of those three is the one nobody estimates.
- Most loyalty spend subsidises customers who would have bought anyway, which is not fatal but has to be priced in deliberately.
- Unredeemed points are a liability with a real accounting treatment, so an expiry policy is a finance decision before it is a marketing one.
What a tier is actually for
A tier does one of two things or it does nothing. It either pulls a customer over a threshold they would not otherwise have crossed — a third order in the year instead of two, a £95 basket instead of £70 — or it changes where an existing customer shops, keeping spend that would have gone elsewhere.
Everything else people say about tiers is downstream of those two. Status is a mechanism, not a benefit. Exclusivity is packaging. If you cannot state which of the two effects you are buying and how you would see it in the data, the programme is a discount with a launch plan.
That framing also tells you where tiers work. Categories with a natural repeat cycle — consumables, replenishment, anything bought several times a year — have a threshold worth pulling customers over. Categories where people buy a mattress every nine years do not, and a tier there is a rebate on a purchase that was already happening.
Thresholds come from your distribution, not from round numbers
Pull the twelve-month spend for every customer who has ordered, sort it, and look at the shape. You need the percentiles: the median, the 75th, the 90th, the 95th. That distribution, not a competitor's programme, is what sets your thresholds.
The reason is arithmetic. Pick a threshold well above the 95th percentile and almost nobody qualifies — the tier is decorative, it costs nothing and it does nothing. Pick one below the median and most of your base qualifies, at which point it is not a tier, it is a price cut with extra steps.
A workable starting point is to place the entry tier so it sits just above where a meaningful group of customers already are — close enough that reaching it is plausible within a normal buying cycle — and the top tier around the 90th to 95th percentile, where the customers you genuinely cannot afford to lose already sit. The exact percentiles depend on how skewed your distribution is. The point is that you read them off your own data rather than choosing £100, £250 and £500 because they are tidy.
One thing to check while you are in the data: how many customers sit just below each candidate threshold. That group is the entire mechanism. If there are very few of them, the threshold is in the wrong place regardless of how good it looks on a page.
The cost model, in one line
Annual cost of a tier equals the number of customers who reach it, times the reward value they earn, times the proportion of that value they redeem. Three terms, and teams typically estimate the first, assume the second and ignore the third.
Redemption is the term that decides whether your programme is cheap or expensive, and it is the one you cannot know before launch. Points that are easy to spend on things people want get redeemed heavily; points with a high floor, a narrow catalogue or an awkward journey do not. That gap is called breakage, and designing to maximise it is a strategy that works until customers notice, at which point it works against you permanently.
Run the model twice: once at the redemption rate you hope for, once at full redemption. The second number is your worst case and it is the one to put in front of finance, because a programme that is only affordable if customers forget about it is not a programme, it is a float.
Then set the subsidy against the behaviour you need. If a tier costs you five per cent of the spend of everyone in it, and the median customer in that tier orders three times a year, you need roughly one additional order every few years per member simply to stand still — and that is before you count the customers who would have reached the tier regardless. Put your own numbers in; the arithmetic will usually be less comfortable than the deck.
The incrementality problem, stated honestly
Here is the uncomfortable part. The customers who reach your top tier are, by construction, the customers who buy most. They were going to buy anyway. Every pound of reward they earn is a pound off margin on revenue you already had.
That is not an argument against tiers — retention of high-value customers is worth paying for, and a competitor's programme is a real threat — but it is an argument for measuring properly. The measurement that works is a holdout: withhold the programme from a randomly selected slice of eligible customers and compare their behaviour with members over a meaningful period. It is the only design that separates "loyalty members spend more" from "people who spend more become loyalty members".
Most teams refuse the holdout because withholding a benefit feels wrong. The alternative is running the programme indefinitely without ever knowing whether it works, which is worse. Keep the group small and keep it for a year.
Earning rules, and the two ways they go wrong
Points per pound is the default and it is fine. The failures are at the edges.
Rewarding things you do not want. Points on the full order value mean you pay rewards on returned items unless you claw them back, and a programme that pays out on a returned dress is funding your own worst customers. Decide the returns treatment before launch, because retrofitting it is the change that generates the angriest support tickets.
Rewarding discounted purchases at full rate. A customer buying at 40% off in the sale, earning points at the same rate as one paying full price, is being paid twice for the least profitable transaction you run. Earning on the amount actually paid, and excluding or halving sale purchases, is defensible and easy to explain.
Consider also whether tier status is earned on spend or on orders. Spend favours a small number of large baskets; orders favour frequency. If the behaviour you want is a shorter gap between purchases, count orders, because that is what you are asking for.
What to build it on
Shopify gives you enough to run a simple tier programme without a loyalty platform, and for a lot of stores that is the right first version. Customer segments are queryable — customerSegmentMembers returns the members of a segment with their purchase data, paginated up to 1,000 per page — so "customers who spent over X in the last year" is a segment you can read programmatically rather than a spreadsheet someone maintains. Tier status lives in a customer metafield. Flow moves people between tiers on a schedule.
For the benefit itself, Shopify's discount system now works in three classes: product discounts and order discounts applied through cart operations, and shipping discounts applied through delivery operations. Free shipping as a tier benefit is a shipping discount; a percentage off is a product or order discount. Knowing which class a benefit falls into matters, because combination behaviour is decided across classes and you do not want your tier benefit silently cancelling a campaign promotion.
Buy a platform when you need the things platforms are genuinely good at: a points ledger with an audit trail, redemption at checkout, a customer-facing balance, referral mechanics, and the reporting your finance team will ask for. Do not buy one to express three thresholds and a discount, which is a week of work and no monthly fee.
The liability nobody mentions until year two
Points you have issued and not yet honoured are an obligation. Depending on your accounting standard and how material the balance is, that obligation may need recognising on the balance sheet, and the estimate of how much will be redeemed is an assumption your auditors will want to see justified.
Two consequences for design. Expiry is not a marketing lever, it is the thing that bounds the liability — a programme with no expiry accumulates an obligation indefinitely, and one with aggressive expiry annoys customers and shrinks it. Pick deliberately, document the policy, and do not change it retroactively.
And talk to finance before launch rather than after. A programme designed without them is one that gets redesigned in year two by people with less patience for the customer experience than you have.
The version we would ship first
Two tiers, not five. Thresholds from your own percentiles. One benefit per tier that is genuinely worth having and trivially understood — free shipping, early access, a fixed percentage — rather than a catalogue of small perks nobody can recite. A holdout group. A cost model with redemption at 100%. And a review date twelve months out at which someone is allowed to say it did not work.
Five tiers, points with a bespoke earn-and-burn curve, birthday rewards and a tier-specific returns window is where programmes end up, not where they should start. Every extra rule is another line of support script, another edge case at checkout and another thing to explain on a page nobody reads.
Questions this raises
How do you design loyalty tiers that pay back?
Set thresholds from percentiles of your own customer spend distribution, cost each tier as reach times reward value times redemption rate, and name the behaviour change that would cover that cost. Then run a holdout so you can tell whether the programme caused the behaviour or merely labelled customers who already behaved that way.
How many tiers should a programme have?
Two to start, three at most. Each tier needs a population large enough to measure, a benefit worth reaching for, and a threshold people can explain from memory. Five tiers usually means several of them contain almost nobody and none of them is memorable.
Should tier status be based on spend or on order count?
On whichever matches the behaviour you want. Spend-based tiers favour larger baskets and reward high-value one-off buyers; order-based tiers favour frequency and shorter gaps between purchases. If the goal is repeat purchase rate, count orders, because that is the behaviour you are paying for.
Do we need a loyalty app?
Not for a first version. Shopify customer segments, a customer metafield for tier status, Flow for transitions and a discount for the benefit will express a simple tier programme. Buy a platform when you need a points ledger with an audit trail, redemption at checkout, a customer-facing balance and the reporting finance will ask for.
How do you measure whether a loyalty programme works?
With a randomly selected holdout of eligible customers who do not receive the programme, compared over at least a year. Comparing members with non-members without a holdout only tells you that customers who spend more end up in the programme, which you knew before you built it.
Should loyalty points expire?
Usually yes, because unredeemed points are an obligation that grows indefinitely without an expiry policy and may need recognising in your accounts. Decide the policy with finance before launch, publish it clearly, and never apply a change retroactively to points already earned.
NEXT STEP
Free store audit
A senior Shopify engineer reviews your storefront, theme performance and checkout, then sends a prioritised list of fixes.
