How to measure loyalty program results: incrementality, cost and ROI
Resources · Guide
Measuring a loyalty program means separating what it sold on top from what the customer would have bought anyway, and putting the cost next to it. It takes three things: a control group, the cost of every reward recorded and the same definition of an active customer before and after.
- TreatedGet the campaign
- ControlRandom, no campaign
- PurchasesFrequency and basket
The measurement
- CostEvery reward recorded
- LiabilityIn real time
- Simulation7 real days
- BeforeSimulate and split the control
- DuringTreated versus control
- CloseIncremental minus cost
In production · October 2026
In production, at the scale of millions of movements.
Qurable manages 18M members today. Each program has its own vault, rules and liability, isolated by organization.
- 11M+Transactions recordedIn a single production environment
- 22M+Double-entry movementsEach with its counterpart
- ~20 msMember history lookupAverage query time
- 18MMembersIn programs running on Qurable
Key takeaways
- Measuring a program means separating what it sold on top from what would have happened anyway.
- You need a control group picked at random before launch, not last month.
- ROI subtracts the cost of every reward, including points liability, from the incremental margin.
The difference
Measuring against last month or against a control group.
Both give you a number. Only one separates what the program did from what would have happened anyway.
| Against last month | Against a control group | |
|---|---|---|
| What it compares | This month against last month | Members who get the campaign against similar members who do not, in the same period |
| What it credits to the program | Everything that went up, including seasonality and prices | Only the difference between the two groups |
| Cost | Total discounts for the month | The cost of each reward, per campaign |
| Liability | Estimated at month end | In real time, with expected expirations |
| When it is designed | When someone asks whether it worked | Before the campaign launches |
| What decision it supports | Keep going because «it went up» | Scale what sells on top and cut what does not |
How to calculate it
Five steps to measure a campaign.
They work for a promotion, a game or the whole program.
1. Define the question
Which behavior the campaign should move (one more visit, a bigger basket) and which metric measures it.
2. Split off the control group
Before launch, randomly pick members of the same audience who will not get the campaign.
3. Measure the difference
At close, compare the metric for both groups. That difference is the incremental effect.
4. Subtract the cost
Multiply the incremental effect by the margin and subtract the cost of every reward given, net of what third parties paid.
5. Decide
Scale what earns margin, adjust what does not and measure again with the same method.
What to measure
The metrics that matter.
Six groups of metrics, from sales to the balance sheet. Define them before launch and do not change them midway.
| Metric | How it is measured |
|---|---|
| Frequency | Purchases per member in the period, treated versus control. |
| Basket and spend | Average basket and total spend per member, in both groups. |
| Rewards given | Discounts, redeemed coupons, cashback and points issued, valued at cost. |
| Third-party contributions | What brands or partner merchants paid, subtracted from your own cost. |
| Points issued and not redeemed | The value the program owes its members, with expected expirations. |
| Breakage | The share expected never to be redeemed, with a fixed method. |
| Identified sales | The share of sales made by members identified at the register, in the app or online. |
| Active members | Members with at least one purchase in the period, always with the same definition. |
| Repeat purchase | Members who buy again in the next period, treated versus control. |
| Formula | (Incremental margin − program cost) ÷ program cost. |
Example
A visits campaign, step by step.
Illustrative values for a one-month campaign with 10,000 members in each group.
Treated
2.3 visits per member
Members who got the campaign.
- Example
- 10,000 members.
Control
2.0 visits per member
Members of the same audience, chosen at random, without the campaign.
- Example
- 10,000 members.
Incremental
3,000 extra visits
0.3 visits per member × 10,000 members.
- Example
- USD 4 margin per visit: USD 12,000.
Cost
USD 7,000
Rewards given to the treated group, at cost, net of brand contributions.
- Example
- Recorded per campaign.
Result
71% ROI
(USD 12,000 − USD 7,000) ÷ USD 7,000.
- Decision
- Scale it, with the same control.
With Qurable
Every reward with its cost, before and after launch.
In Qurable, every campaign is simulated on the last 7 real days before it goes live, the promotion builder supports A/B tests and every point, cashback or prize is recorded on the ledger with the rule that granted it. Incrementality with a control group is designed with each program, starting in the pilot.
Simulation and A/B
How often it fires and what it grants, on 7 real days, and versions head to head.
See the promotion engineCost on the ledger
Every reward with its rule and cost, and real-time liability with the expiration forecast.
See the points ledgerData in your warehouse
Members, ledger movements, tiers and coupons, with a daily export and signed webhooks.
See the Customer Data PlatformA trace of every decision
Which event arrived, which condition matched and which effect applied.
See AI Decisioning
Questions
What people ask about measuring a program.
For loyalty, marketing and finance teams that need to defend the program budget.
Compare members who get the program or campaign with a control group that does not, multiply the difference by the margin and subtract the cost of the rewards. The formula is (incremental margin − program cost) ÷ program cost.
It is what the program sold on top of what the customer would have bought anyway. It is measured as the difference between a group that gets the campaign and a similar control group that does not, in the same period.
It is a group of members from the same audience who do not get the campaign. It is picked at random before launch, so the campaign is the only difference between the two groups. It has to be large enough that the difference is not noise.
Because seasonality, prices, competitors and weather change from one month to the next. Comparing with the previous period credits the program with everything that went up; a control group only credits it with the difference.
Frequency, basket and spend per member; reward cost net of what third parties pay; points liability; share of identified sales; active members and repeat purchase. Define them before launch and do not change the definition midway.
An issued point is a future cost: it is valued at redemption cost, minus the share expected never to be redeemed (breakage), with a fixed method. That way the campaign cost does not only show up when the member redeems.
Qurable simulates each campaign on the last 7 real days, supports A/B tests in the promotion builder and records the cost of every reward on the ledger. Incrementality with a control group is designed with each program, starting in the pilot.
Last reviewed
Further reading
Keep reading about program cost.
The guides that show each part of the cost in detail.
- ResourcePoints liability
How it is calculated and controlled.
- ResourceLoyalty breakage
The share that is never redeemed and how to estimate it.
- ResourcePoint value
What it costs the company and what the member perceives.
- ConceptPromotion engine
Simulation, A/B tests and budget per campaign.
- ResourceGamification
Games with real prizes and a capped budget.
Want to measure your next campaign against a control group?
In a 45-minute demo we show you the simulation, the cost of every reward on the ledger and how we design the control group in the pilot.