If your gross margin sits below roughly 35 percent and your median customer buys fewer than three times a year, run a targeted discount and skip the points program. Points only pay for themselves when the reward is far enough in the future that a meaningful share of it is never claimed, and reaching that state requires purchase frequency most thin-margin stores do not have. Below is the arithmetic for both instruments, the deferred revenue that points create on your books, and the thresholds I use to decide.
Key takeaways
- A discount is a certain cost booked now. Points are an uncertain cost booked later, and the difference between the two is entirely redemption rate.
- Points issued against a sale are a separate performance obligation under the revenue standard, so part of the order's revenue has to be deferred until the points are redeemed or expire.
- The reward threshold has to be reachable in three or four orders at your AOV, inside the window your median customer stays active. Otherwise you are running a program nobody finishes.
- Effective point cost equals earn rate multiplied by redemption rate. Measure your own redemption rate before you set the earn rate, not after.
- Below three orders per customer per year, a points program mostly adds accounting work and a support queue. A discount aimed at a specific moment does more for less.
What a discount costs you versus what points cost you
A discount costs gross margin on the order it applies to, immediately and with certainty. Points cost margin later, on a different order, and only for the share of points that eventually get redeemed. That timing difference is the entire decision, and it is easier to see with numbers than with theory.
Take an AOV of 60 dollars at 32 percent gross margin, so 19.20 dollars of gross profit per order. Shopify supports both code-based and automatic discounts, and either one deducts before you ever see the margin (Shopify Help Center, discount types).
| Mechanism | Cost per order | Gross profit left | When you pay it |
|---|---|---|---|
| 10 percent code | 6.00 | 13.20 | Now, certain |
| 15 percent welcome code | 9.00 | 10.20 | Now, certain |
| 5 percent points earn, 45 percent redemption | 1.35 expected | 17.85 expected | Later, probabilistic |
| 5 percent points earn, 90 percent redemption | 2.70 expected | 16.50 expected | Later, probabilistic |
The points row looks cheap because of the redemption assumption. In the accounts I have looked at, redemption sits anywhere between about 20 and 60 percent depending on how visible the balance is and how low the threshold sits, and a well-run program with balance reminders in email pushes toward the top of that band. So the cheapness is conditional on the program being slightly inconvenient, which is an uncomfortable thing to design for on purpose.
The frequency threshold where points start to work
Points work when the median customer will place enough future orders to reach a reward before they go quiet. Run the division before anything else: reward threshold divided by points per dollar divided by AOV gives you the number of orders required. A 500 point reward at 1 point per dollar and a 60 dollar AOV needs 8.3 orders. If your median customer places 1.8 orders a year, almost nobody arrives, and the program's only function is to make the receipt page busier.
My working rule is that a reward should be reachable in three to four orders at your AOV, and that the time to accumulate those orders should fall inside the period your median customer stays active. Both of those numbers come from your repurchase curve rather than from a template, which is the same input that should be driving your replenishment timing and your engagement window sizing. If you have not built that curve, you are not ready to price a loyalty program.
Why unredeemed points become a liability on your books
Points awarded as part of a sale are a separate performance obligation, which means a portion of the transaction price gets allocated to them and deferred until they are redeemed or expire. The revenue standard is explicit that a customer option granting a material right is accounted for this way (IFRS 15, Revenue from Contracts with Customers, whose US counterpart is ASC 606 from the joint FASB and IASB project). Breakage, the portion you expect never to be redeemed, is recognised in proportion to the redemption pattern rather than all at once.
Most owner-operated stores never book any of this, and for a while nothing bad happens. The bill arrives at three predictable moments. The first is diligence, when an acquirer or lender asks what the outstanding point balance is worth and you discover it is a six figure number nobody accrued. The second is a program change, because raising point value or lowering a threshold triggers a redemption rush from cohorts you had mentally written off. The third is an expiry policy you decide to introduce late, which is a customer service event before it is an accounting one.
On expiry specifically, loyalty, award and promotional cards are carved out of the federal gift card rules in Regulation E, so the expiration and fee protections that apply to general-use gift cards do not cover points (CFPB Regulation E, section 1005.20). State law may still reach you, so check before you announce. The practical consequence is that you get to set an expiry, and you should set it at launch rather than retrofitting one onto a balance customers already consider theirs.
How to price a point without giving the margin away
Set the earn rate so that earn rate multiplied by expected redemption rate lands below the discount you would otherwise have handed out. If a 10 percent code is your current fallback, a 5 percent earn rate redeeming at 45 percent costs you 2.25 percent of revenue, which is a defensible trade. If redemption climbs to 90 percent because you added balance reminders to every email, the same program costs 4.5 percent and you should have modelled that.
Four guardrails I put on every program at thin margin:
- Points earn on net revenue after discounts, never on the pre-discount subtotal, and never on shipping or tax.
- Redemption is capped as a share of order value, commonly 20 or 25 percent, so a large balance cannot produce a near-free order that still costs you pick, pack and card fees.
- Balances expire after a fixed period of inactivity, sized at roughly twice your median repurchase interval, so a 45 day interval store expires at 90 to 120 days of silence rather than at a calendar year.
- Returns claw back the points that the returned order earned. Skipping this is how refund abuse turns into a point farm.
Write those four rules down before you pick a vendor, because the vendor's defaults will be tuned for engagement metrics rather than for your gross margin.
What each instrument trains customers to do
A predictable discount trains customers to wait for it, and the waiting shows up as cart abandonment you then pay again to recover. Abandonment is already the dominant leak in checkout, with Baymard's aggregate of documented studies putting the average rate near 70 percent (Baymard Institute, cart abandonment rate statistics), and a reliable discount email adds a rational reason to sit in that queue. If you already discount inside abandonment recovery, the sequencing question matters more than the size, which I have written about separately in testing abandoned cart discount timing.
Points train a different behaviour, which is checking a balance. That is only useful if the balance is close to something. A customer sitting on 80 points against a 500 point reward is not motivated by anything, and telling them their balance every month is a slow way to teach them the program is irrelevant to them. Suppress balance reminders below about half the threshold and the reminders start working.
How to test this without a contaminated control
Randomise at the customer level, not the order level, and hold the split for at least two median repurchase intervals. Order-level randomisation is meaningless here because the same person will land on both sides of the split, and the whole hypothesis is about behaviour across orders. Assign the holdout before launch, keep it out of every loyalty email, and accept that you will be waiting months rather than weeks. The same discipline that makes campaign tests readable applies here, and it is worth reviewing how to run tests that mean something before you start.
Measure gross profit per customer over the window, not repeat purchase rate. Repeat rate almost always improves under a points program because you have added a reason to place a small order, and small orders at thin margin can raise repeat rate while lowering contribution. If your attribution numbers and your store numbers disagree, settle that first, because a loyalty test read off ESP-attributed revenue will tell you whatever you hoped (see reconciling ESP revenue with Shopify).
Instrument three things before launch: points issued, points redeemed and outstanding balance, each written to the customer profile so segmentation can use them. In Klaviyo that means custom profile properties and a redemption event pushed through the API rather than a nightly CSV, so a balance reminder can fire on the current number (Klaviyo API overview). A program you cannot segment on is a program you cannot evaluate.
Trade-offs and what I would run
The honest summary is that points are a frequency amplifier, not a frequency creator. They take a customer who was already going to buy again and pull the next order slightly forward, and they do almost nothing for a customer whose category simply does not come round often. A discount is blunter but it works on anyone, at any frequency, at a cost you can predict to the cent.
Keyed to the two numbers that actually decide it:
- Three or more orders per customer per year, AOV under about 75 dollars. Points, with a threshold reachable in three orders, a 20 percent redemption cap and inactivity expiry. This is the case where breakage is meaningful and the mechanic fits the buying rhythm.
- One to two orders per year, any AOV. No points program. Put the same budget into a post-purchase offer with a deadline and into fixing the flows that already carry revenue.
- High AOV, low frequency, considered purchase. Neither. Points on a 400 dollar annual purchase are an insult at any sane earn rate, and a standing discount erodes the price position you are relying on.
- Gross margin under 25 percent at any frequency. Neither, until the margin problem is addressed. Both instruments spend gross profit you do not have, and a loyalty vendor's monthly fee is a third cost on top.
The failure I see most often is a store with a 90 day repurchase interval running a 500 point threshold, which takes its median customer four years to reach. Nobody redeems, the balance accrues, and the program is quietly reported as a success because unredeemed points look like cheap engagement right up until the day someone has to value them. If you are going to run points, run them tight enough that people finish. If your customers cannot finish, run the discount and be honest about what it costs.