A four-site restaurant group launches a stamp card in January. By March, repeat visits are up 14%. The ops director presents the number at the monthly meeting. Everyone nods. Nobody asks the question that actually matters: would those guests have come back anyway?
That is the measurement problem nearly every small hospitality group has. Loyalty looks like it is working because the metrics that are easy to pull (enrolments, stamps issued, redemptions) all go up the moment you launch. To know whether loyalty is genuinely lifting revenue, you need three things most small groups skip: a pre-launch baseline, a matched non-member cohort to compare against, and an honest accounting of programme costs. Without those, your ROI number is a vanity figure dressed up as a finance one.
- Enrolment, stamps issued and app downloads are activity metrics, not revenue metrics. They prove the programme exists, not that it works.
- Incrementality is the only number that matters: spend from members minus what they would have spent anyway.
- Without a pre-launch baseline (3 to 6 months of trailing data), you cannot separate loyalty uplift from seasonality.
- Most hospitality operators undercount programme costs by 30 to 50%. Discounts, redemption value, staff admin time and platform fees all belong in the denominator.
- A 90-day cohort review (matched members vs non-members on visit frequency and AOV) is the smallest credible measurement loop.
Why most hospitality loyalty metrics tell you nothing about revenue#
Every loyalty dashboard leads with the metrics that look best. Enrolments. Stamps issued. Push notification open rates. These are activity signals. They tell you the programme is being used. They do not tell you whether using it changed anyone's behaviour.
Here is a tiered way to think about it.
| Metric tier | Examples | What it proves | Trust level |
|---|---|---|---|
| Tier 1: Activity | Enrolments, stamps issued, app/wallet adds, redemption count | The programme is operational | Low. Goes up automatically at launch. |
| Tier 2: Behaviour | Repeat visit rate of members, member AOV, redemption rate | Members behave differently from average | Medium. Self-selection bias inflates the gap. |
| Tier 3: Revenue | Incremental AOV vs matched non-members, 6 and 12 month LTV delta, cohort retention curve | Loyalty is changing what guests spend | High. This is the number that survives scrutiny. |
The trap with Tier 2 is self-selection. People who join your loyalty programme are already more engaged. They were going to visit more often even without a card. Comparing 'member repeat rate' to 'all customer repeat rate' will always make the programme look brilliant, because you are comparing your best customers to your average ones.
"If your loyalty members visit twice as often as non-members, that is not proof the programme works. That is proof the programme attracted your most loyal guests first."
The incrementality problem nobody talks about#
Incrementality is the difference between what members spent and what they would have spent without the programme. Big retailers solve this with randomised holdout groups. Small hospitality groups cannot run that experiment. You only have a few thousand active customers, and you cannot ethically withhold the programme from a control group of guests who already know it exists.
What you can do is build a matched cohort. Take guests who joined the programme in a given month. Find a comparable group of customers who visited in that same month but did not enrol (matched on prior visit frequency, average spend and venue). Track both for 90 and 180 days. The gap, if there is one, is your best available proxy for incrementality.
This is also why the difference between repeat rate and loyalty-driven repeat rate matters so much. The headline number is almost always larger than the real one.
You cannot prove loyalty is working without a baseline#
Launching loyalty in January and seeing visits rise by March proves nothing. March is busier than January in most hospitality markets. The baseline question is simple: what did your repeat rate, AOV and visit frequency look like for the three to six months before launch?
A practical baseline includes:
- Trailing 6 months of repeat visit rate (visits per unique guest), segmented by month to expose seasonality
- AOV by visit number (first visit vs second vs third+), so you can see whether returning guests already spend more
- Cohort retention curves for guests acquired in each of the prior 6 months
- Same-store revenue per cover, weekday vs weekend
If you launched without this, you can still reconstruct most of it from POS history. Setting a pre-launch baseline is rarely done at the right time, but it is rarely too late either.
The hidden costs that make your ROI look better than it is#
Most small operators count two costs: the platform fee and the face value of rewards redeemed. Eagle Eye's analysis of programme ROI points out that this typically undercounts true cost by a wide margin. Here is what gets missed:
| Cost line | Frequently counted? | Typical annual figure (small group, illustrative) |
|---|---|---|
| Platform subscription | Yes | £600 to £3,600 |
| Reward redemption value (face) | Yes | Varies |
| Reward redemption cost (margin, not face) | Sometimes | 30 to 70% of face value, depending on item |
| Staff time on enrolment at till | Rarely | 15 to 30 seconds per signup, multiplied out |
| Marketing time to design and run campaigns | Rarely | 2 to 6 hours per month |
| Discount cannibalisation (rewards given to guests who would have bought anyway) | Almost never | 20 to 40% of redemption value |
| Reporting and review time | Almost never | 1 to 3 hours per month |
What a 90-day loyalty review actually looks like#
The operational gap most small groups hit is not the formula. It is that nobody owns running it. The ops director is running ops. The founder is everywhere. Marketing, if it exists, is on social and events. So the review never happens, and the question of whether loyalty is working stays unanswered for another quarter.
A workable 90-day review, repeated quarterly:
- Pull member cohort by enrolment month for the trailing 6 months. Record visit count and total spend per member.
- Build a matched non-member cohort from POS data: same venue, similar pre-period visit frequency, similar AOV.
- Compare visit frequency and AOV between cohorts at 30, 60 and 90 days post-enrolment.
- Calculate true programme cost (all seven lines from the table above).
- Compute incremental revenue (member spend minus matched non-member spend, in aggregate) and divide by true cost.
- Flag anything that looks like noise: if your matched cohort is under 200 guests, treat the result as directional, not definitive.
This takes a few hours each quarter if you have clean POS data and someone who knows how to do the cohort match. It is, to be blunt, the work most small groups do not get round to. We wrote about how we tracked repeat revenue for a hospitality group over 12 months using exactly this loop.
When to trust the data and when to call it noise#
Small hospitality groups have small datasets. A swing of 8% in repeat rate sounds significant. With 400 members and 350 matched non-members, it probably is not. Some practical rules of thumb:
- Under 200 in each cohort: directional only. Watch the trend across two or three quarters before acting.
- 200 to 1,000: a difference of 15% or more in repeat visits is probably real. Smaller gaps could be noise.
- Over 1,000: a difference of 5 to 10% starts to be reliable, provided your matching is honest.
- Always look at the trend, not the snapshot. One quarter of strong numbers proves less than three quarters of stable ones.
"The most honest thing a small operator can say about their loyalty programme is often: it looks like it is working, we will know for sure in two more quarters."
The real bottleneck is not the formula. It is who runs it.#
Every article on loyalty ROI ends with the formula and assumes someone will run it monthly. In small hospitality groups, that person does not exist. The platform was bought, the cards were printed, the launch happened, and then the founder went back to fixing rotas and the ops director went back to managing four venues.
This is the gap that decides whether a loyalty programme compounds revenue or just sits there. It is also the reason we built Carrott as loyalty programmes run for you, not handed to you. The measurement loop above is the work. Software does not do it. Someone has to.
How long after launch can I tell if my loyalty programme is working?
Realistically, 90 days for early signal and 6 months for confidence. Anything sooner is too entangled with launch novelty and the most loyal guests joining first. Two or three quarters of stable cohort gaps is the standard for calling a programme genuinely incremental.
What is the single most important loyalty metric for a small hospitality group?
Incremental visit frequency of members compared to a matched non-member cohort, measured at 90 days. Not enrolment rate, not redemption rate. The gap between what comparable guests do with and without the programme is the only number that proves the programme is changing behaviour.
How do I build a matched non-member cohort if I don't have a data team?
Export POS data for the same venues and time window. Filter to non-enrolled guests with similar pre-period visit frequency (within one visit) and AOV (within 15%) to your enrolled cohort. Even a rough match in a spreadsheet is more honest than comparing members to your overall customer base.
What counts as a true programme cost?
Platform fees, the margin cost (not face value) of redemptions, staff time on enrolment and admin, marketing hours, and an estimate of discount cannibalisation (rewards given to guests who would have spent anyway). Most operators count only the first two and overstate ROI as a result.
Is repeat visit rate the same as loyalty-driven repeat rate?
No. Repeat visit rate measures all returning guests. Loyalty-driven repeat rate is only the portion of repeat visits that would not have happened without the programme. The first is easy and flattering. The second is harder and honest.