Building a loyalty programme

Designing a points programme that changes behaviour instead of discounting customers who were coming back anyway.

8 min read

On this page

Most loyalty programmes are a discount with extra steps. They pay your best customers for behaviour they were going to exhibit anyway, and the cost shows up in margin rather than in a line item anyone reviews.

A programme worth running changes what somebody does. That is a design problem, and it is mostly settled before you touch any settings.

Check the platform first

Automatic accrual from orders works on BigCommerce and on headless stores that push orders. It does not currently work on Shopify.

Evident awards points when an order reaches a fulfilment status — Completed, Shipped, Awaiting Fulfillment. Shopify’s order status is a payment state, so it never matches and no points are awarded.

Everything else works on Shopify: accounts, tiers, manual and API-driven points, redemption as store credit or a discount code. But if orders earning points automatically is the whole point of your programme and you are on Shopify, settle that before you design anything.

Decide what behaviour you are buying

Write down the one thing you want more of. It is usually one of:

  • Second purchase. The largest single drop-off in most stores. Front-load the reward: signup points plus a low first reward threshold, so the second order is where the payoff lands.
  • Purchase frequency. Rewards that expire, tiers on a trailing basis, and reasons to come back between purchases.
  • Basket size. Points per unit of currency, with thresholds that sit just above your average order value.
  • Content. Points for reviews, especially photo and video reviews. Often the highest-return rule in the whole programme — the content is an asset that keeps working.

A programme aimed at all four rewards everything equally, which is another way of saying it rewards nothing in particular.

Do the arithmetic before you publish a rate

Points per currency unit times your redemption rate is a discount you have committed to indefinitely.

Work out: what a customer earns on an average order, how many orders until they can redeem something, what that reward costs you, and therefore the effective percentage discount on the path to it. If that number is larger than the margin you are protecting, the programme is a price cut with a loyalty label on it.

Note what Evident counts as the basis: merchandise subtotal, after discounts, excluding tax and shipping. That is deliberate — tax is the buyer’s jurisdiction rather than the value of their purchase, shipping is largely pass-through, and leaving discounts in would let a redeemed reward earn points on the money it just discounted away.

Tiers

Four tiers, thresholds you set, and one decision that is hard to reverse:

  • Lifetime — every point ever earned. Tiers are permanent, nobody is demoted, and it is simple to explain.
  • Trailing 12 months — reflects recent custom, and lapses if someone stops buying.

Lifetime is more generous and produces no angry emails. Trailing is more honest about who is currently a good customer, and will eventually demote someone who was Gold last year — which you need to be ready to explain, in advance, in writing.

Pick before launch. Switching afterwards re-tiers your whole membership at once.

Make the tiers mean something beyond a bigger discount. Early access, free shipping, a real human to email — perks that cost you little and feel like status do more than another 5%.

Set the orders start date

Non-negotiable. Without an orders start date, Evident refuses to accrue at all rather than crediting your entire order history the first time the job runs.

Set it to your launch date, or deliberately backdate it if you want to credit recent customers — but understand that backdating pays for orders you have already banked.

Redemption should be effortless

Store credit is the default and it is the right one. It applies itself at checkout; the customer never copies a code. Rewards that cannot be paid as credit — percentages, free shipping, guests — fall back to a coupon automatically.

Two prerequisites people miss:

  • Your platform connection needs the scope to issue redemptions. BigCommerce: store_v2_marketing. Shopify: write_discounts and write_store_credit_account_transactions. A connection made before you turned loyalty on almost certainly lacks these, and everything looks fine until the last step fails.
  • Store credit on Shopify is currently issued in USD regardless of store currency. Use coupons instead if you sell in something else.

Make the first reward reachable

The most common design error is a first reward that takes four orders to reach. Most customers never get there, so the programme has no effect on anyone except the people already coming back.

Put the first meaningful reward within one or two orders of joining. That is the one that changes behaviour; everything above it is for the customers you already had.

Show the balance

A programme nobody can see does nothing. Put the loyalty widget on the account page, show the balance in your email footer, and mention points earned in the order confirmation.

<div data-evident-widget="loyalty" data-email="CUSTOMER_EMAIL"></div>

The widget does not authenticate anyone — you supply the email, so render it only behind your storefront’s own customer login.

Expiry

Off by default. Leave it off unless you have a reason.

If you switch it on, it expires on inactivity, not age — a customer who keeps shopping never loses old points — and enabling it starts everyone’s window from that moment rather than wiping dormant balances overnight. Turn on expiry warning emails at the same time. Expiring someone’s balance without warning is how you lose them and get a screenshot.

Launching

  1. Set the orders start date.
  2. Create two rules: order placed, and review submitted. That is a complete programme.
  3. Build three rewards at increasing thresholds, the first one reachable.
  4. Check redemption end to end with a real account before announcing anything.
  5. Add the widget.
  6. Then announce — to your existing customers first, who arrive with points already banked if you backdated.

Birthdays, referrals and tier perks can all wait until the basics produce something.

Know what is not there yet

So you do not promise it:

  • Inbound referral capture is not wired up. Codes are generated and displayed, and points can be awarded for a completed referral, but nothing reads a code off a visit and attributes the order. Treat referral as manual for now.
  • There is no per-redemption merchant report beyond the transaction list.
  • Coupons are never revoked once issued, including when a redemption is reversed. Set an expiry on them.

Something missing or out of date? Email [email protected] — docs corrections go straight to the team that builds the feature.