Restaurant loyalty programs: what each reward costs and how many visits it has to add
A margin worksheet for points, tiers, punch cards and offers

In a model restaurant with a $25 average order, a loyalty program that gives members 5% back in points costs 98 cents a visit on average if 80% of those points get spent. Against the order that looks small. Against the $15.80 the order leaves after food, packaging and the card fee, it is 6.2%, and it is paid on every visit a member makes, including the visits they would have made anyway.
The program earns only on the visits it adds. At these numbers, members have to come 6.6% more often than they would without it before the points pay for themselves.
Points, tiers, challenges and personalized offers differ in which visits carry the reward, and that sets how many extra visits each one needs. Every figure for the model is an assumption; put your own into the worksheet. The two studies cited report measured behavior, one in a university café and one in a convenience-store chain.
What a reward costs and what it has to earn back
What a visit leaves after the costs that move with the order is its contribution margin. For the model’s average order:
| Order | $25.00 |
| Food cost, 32% | −$8.00 |
| Packaging | −$0.70 |
| Card fee, 2% | −$0.50 |
| Contribution per visit, C₀ | $15.80 |
Labor and rent stay out of it: the model assumes a few extra visits a week don’t need another shift. If yours do, add the shift’s cost per visit.
A point the guest spends on the bill costs almost its face value. The dish is cooked either way; what changes is the money the guest hands over, and the only saving is the card fee on the part paid in points. With a 2% fee, $1.00 of points costs $0.98. The win-back calculation works through the same line on a single order.
A free item’s cost depends on whether the guest would have bought it anyway. A $4 coffee given as a genuine extra costs its ingredients, $1.28 at 32%. The same coffee given to a guest who buys one every morning replaces a coffee they would have paid for, and costs $3.92.
Members earn 5% of each order, $1.25 on $25. If 80% of points end up spent, each visit carries $1.00 of redeemed points on average and $0.98 of cost, and the contribution of a member’s visit falls to C₁ = $15.80 − $0.98 = $14.82.
Compare a month with the program against the same month without it. Without, a member who comes v₀ times brings v₀ × C₀. With it, they come v₁ times and bring v₁ × C₁, because every visit earns points, old or new. The program pays when
v₁ ≥ v₀ × C₀ / C₁
Here C₀ / C₁ = 15.80 / 14.82 = 1.066: members have to visit 6.6% more often. A member who comes twice a month has to come 2.13 times, which for 100 such members means at least 14 more visits a month; 13 still leave the program $3.34 short. A one-off promotion such as buy one, get one is judged the same way, against the month without it.
A worksheet for your own numbers
| # | Line | Model | Where it comes from |
|---|---|---|---|
| 1 | Average order | $25.00 | POS, last three months |
| 2 | Variable cost per order: food, packaging, card fee | $9.20 | POS cost of goods, packaging invoices, processor statement |
| 3 | C₀ = line 1 − line 2 | $15.80 | |
| 4 | Earn rate | 5% | your program terms |
| 5 | Share of points spent | 80% | points spent ÷ points earned over 12 months; a young program understates it |
| 6 | Reward cost per visit = line 1 × line 4 × line 5 × 0.98 (a 2% card fee) | $0.98 | add every per-visit reward; spread a card’s reward over every visit it covers |
| 7 | C₁ = line 3 − line 6 | $14.82 | |
| 8 | Visits per member per month without the program, v₀ | 2 | a comparison group, see the measurement section |
| 9 | Running cost per member per month | $0.50 | software, SMS, printed cards and staff time, divided by active members; add per-head rewards per month, such as a birthday award ÷ 12 × the share of members it reaches |
| 10 | Break-even visits = (8 × 3 + 9) ÷ 7 | 2.17 | |
| 11 | Visits per member per month with the program, v₁ | measure | the same comparison |
| 12 | Monthly result per member = 11 × 7 − 9 − 8 × 3 | measure |
Running costs lift the bar from 2.13 visits to 2.17, or 8.3% above the month without the program. Per 100 members, 210 visits a month leave you $97.80 short of that month, and 220 visits leave you $50.40 ahead: a 5% lift loses money, a 10% lift makes a little.
The model’s assumptions, in one place: prices are before sales tax; points are earned on the full order and spent on the bill; order size doesn’t change with the program; a few extra visits need no extra labor; the month is steady, so points spent run at 80% of points earned, and that share is the same for every segment and tier. The share moves the points bar, which is 6.6% before running costs: it becomes 4.9% at 60% spent and 8.4% at 100%, or 6.5% and 10.1% with the $0.50 running cost. When one of these doesn’t hold for you, change the line it feeds. If members order more with the program, recalculate lines 1 to 7 at the new average order.
Points, tiers, challenges and personalized offers
Each mechanic sets a different C₁ and applies it to a different set of visits. The examples price each one on its own, with no points underneath.
Points are paid on every visit of every member. The cost per visit is fixed by the earn rate and the share spent, and per head it falls hardest on the guests who visit most. A point that isn’t spent lowers this month’s cost and stays on the guest’s balance. The Help Center doesn’t describe an expiry setting for points, so check what your program’s terms say.
Tiers raise the earn rate above a spend boundary. A 10% top tier doubles the reward cost to $1.96 a visit and puts C₁ at $13.84. A guest moved up from 5% has to visit 7.1% more often than before the move, and 14.2% more than with no program at all. For a regular at six visits a month, the move costs $5.88 a month on visits they already make and pays back only with about five extra visits a year. Check what the boundary counts: on lifetime spend every regular crosses it sooner or later, so the push to reach it happens once and the higher rate stays.
In a longitudinal study of a convenience-store franchise’s program, Liu (2007) followed members only, with no group of shoppers who didn’t enroll, and found that those who were heavy buyers when the program began were the most likely to claim the rewards they qualified for, yet did not change how they bought, while light and moderate buyers gradually bought more. The study covers a convenience store, so for a restaurant treat it as a direction to test. A working hypothesis for tiers, which neither study tested: a boundary can only earn its cost where many guests sit just below it and have a reason to reach it.
Challenges pay a reward for reaching a target, such as ten coffees or three visits in a month. They cost nothing until someone completes them, and then cost the same for a guest who stretched to get there and a guest who would have gotten there anyway.
In a university café’s “buy ten coffees, get one free” program, Kivetz, Urminsky and Zheng (2006) found that the time between purchases fell by 20% from the first stamp to the last. Members filled a card in 24.6 days, about 16% faster than the 29.4 days it would have taken at the pace between their first two stamps. After the free coffee the pace dropped back, then sped up again toward the next one. A 12-stamp card handed out with two stamps already on it was completed faster than a plain 10-stamp card, although both needed ten purchases.
In the model, a paid $4 coffee with the same 32% cost of goods and 2% card fee leaves $2.64, and a free one costs its ingredients, $1.28. Count the card in coffees drunk. Eleven paid cups leave 11 × $2.64 = $29.04. Ten paid and one free leave 10 × $2.64 − $1.28 = $25.12. The card costs $3.92 spread over eleven cups, 35.6 cents a cup, so it pays for itself once the guest drinks 15.6% more coffees, free ones included. In paid cups that is 5.1% more than without the card: the free cup is already missing from the paid count, so its $3.92 is not charged a second time.
A reward the guest wouldn’t have ordered sits on a different base. With a $4 pastry that costs $1.28 to make, every coffee stays paid, each of the ten carries 12.8 cents of the gift, and the bar is 5.1% more coffees, which here are paid and drunk alike. In paid cups the two rewards need the same 5.1%. In cups drunk the free coffee needs more, 15.6% against 5.1%, because a guest who keeps the same habit pays for one cup fewer per card. Cards left unfinished lower both costs. In the café, members could take a baked good of the same price instead of the free coffee; 85% of redemptions were coffee, and the results did not differ by the reward chosen. The head start is the design change the study measured; the reward the guest wouldn’t have ordered is a cost choice to test.
Personalized offers go to a group you choose and cost only when someone in it uses them. They beat points only when the group has room to change: an offer to your top guests is mostly a discount on visits they were going to make anyway.
Take guests whose first order was in the last 30 days and send them $5 off a second order. For a guest who uses it, that visit contributes $15.80 − $4.90 = $10.90. If 30% of new guests order a second time within a month without any offer, the offer needs 30% × 15.80 / 10.90 = 43.5%, assuming it doesn’t pull forward orders that would have come the month after. This is the win-back inequality with a different group, and reading it takes the same thing: a share of new guests who get no offer.
| Mechanic | Paid on | Reward cost in the model | Bar in the model |
|---|---|---|---|
| Points, 5% | every member visit | $0.98 a visit | 6.6% more visits |
| Top tier, 10% | every visit of guests above the boundary | $1.96 a visit | 7.1% more than at 5% |
| Punch card, buy 10 get 1 | every completed card | $3.92 (free coffee) or $1.28 (pastry) a card | 15.6% or 5.1% more cups drunk |
| $5 off a second order | each use in the chosen group | $4.90 a use | 43.5% second orders against 30% |
How to measure new and returning guests
Line 11 is the one no report fills in.
A new member is not always a new guest. In the first months, sign-ups include guests who were already coming, so new members run ahead of new guests. Group members by the month they signed up, and track the share of all orders that come from identified guests. Once that share levels off, most of your regulars are in, and new sign-ups say more about new guests.
Returning is measured per cohort. For each month’s new members, watch the share who come back within 30, 60 and 90 days. For the base as a whole, watch visits per member per month, counting every member who joined before the month began. Members who stopped coming count as zero, so lost guests show up in that number.
The member gap measures who joined. Guests who come often have the most reason to install the app and sign up, so members start out heavier than non-members, and the difference between the two groups exists before any reward is paid.
The program’s effect needs a group that doesn’t get the reward. For an offer, or a challenge your system can show to chosen guests, hold back a random share of the target group, as in the win-back test. Points are hard to withhold from members, so a multi-location team can launch location by location instead and compare the change in POS transactions at the locations that launched with the change at the ones that haven’t, over the same weeks. It holds when the two sets of locations share few guests and moved together before the launch, the waiting locations show no drop in transactions (a drop means guests moved, not that they came more often), and your POS can run the program per location while one app serves the brand. A single location with neither route can’t separate the program from the season or a new menu.
Small groups mislead. By the standard sample-size formula (95% confidence, 80% power), about 200 new guests in each group are enough to see a rise from 30% to 43.5%, which shows the offer changed something. Showing that it beat the bar takes more, because the bar is 1.45 times the control group’s rate and that rate is itself measured: about 400 in each group if the true rate is 55%, and about 1,300 if it is 50%.
The same program, segment by segment
A model base of 1,000 active members on flat 5% points, assuming 80% of points spent and the same $25 average order in every segment:
| Segment | Members | Visits a month each | Visits a month | Points cost a month | Share of cost |
|---|---|---|---|---|---|
| Regulars | 150 | 6 | 900 | $882.00 | 45% |
| Occasional guests | 450 | 2 | 900 | $882.00 | 45% |
| Infrequent guests | 400 | 0.5 | 200 | $196.00 | 10% |
| All members | 1,000 | 2,000 | $1,960.00 | 100% |
Regulars are 15% of members and take 45% of the points cost. If your regulars redeem more than 80% of their points while the other segments stay at 80%, their share of the cost is above 45%, and a top-tier visit costs more than $1.96, up to $2.45 at 100%. Heavy buyers had the highest claim rate in the convenience-store study, but it counted requests for reward certificates, not points spent on a restaurant bill, so check spent points by segment in your own data. The bar is the same 6.6% for every segment, and what it asks of one guest differs: a regular has to add 4.8 visits a year, an occasional guest 1.6, an infrequent guest 0.4, or one extra visit every two and a half years. The guests who cost the most per head are asked for the biggest change, and in the convenience-store study they were the ones who didn’t change.
A different reward fits each segment:
- Regulars: a modest base rate, no top tier until it is priced, and recognition that doesn’t grow with every visit. Doubling a regular’s rate adds $70.56 a year per regular. A $10 code sent once a quarter to a filtered list of regulars costs up to $39.20 a year each. Whether it keeps them coming as well needs its own test.
- Occasional guests: a challenge one step above their usual month. Say 20 of 100 occasional guests make a third visit in a month on their own, and a third visit now also earns a $6 dessert. On top of points each extra third visit is worth $14.82, assuming it doesn’t replace a visit the next month. If the dessert is a genuine extra ($1.92 to make), the challenge pays once 23 of the 100 complete it. If it’s a dessert they would have ordered anyway ($5.88), you need 34.
- Infrequent and lapsed guests: a targeted offer with a control group, sized with the win-back formula.
- New members: the second-order offer above, read against new members who got nothing. On top of 5% points its bar rises from 43.5% to 44.8%.
Birthday awards are paid per head, whatever the visits. If the rule reaches every member with a birthday on file, which is an assumption to check in your setup, a $10 award costs up to $9.80 a head, up to $9,800 a year on this base, and for an infrequent guest that is more than a year of their points, $5.88.
Five ways a loyalty program looks profitable when it isn’t
The member chart. A chart of members visiting more often than non-members describes who joined. The effect is the difference against guests who didn’t get the reward.
Completions counted as success. A challenge’s completions include every guest who would have completed it anyway. Count the extra purchases against a comparison group instead.
Sign-ups counted as new guests. Until the share of orders from identified guests levels off, many new members are existing guests who just joined.
A top tier nobody priced. Moving a regular from 5% to 10% costs $5.88 a month on the visits they already make. Before launching a tier, write down how many extra visits a year it has to buy and check it against a comparison group.
Rewards priced one at a time. A guest on the top tier who also completes a punch card and gets a birthday award collects all three. Each looks affordable on its own. Price them together: per-visit rewards go into line 6 as they are, a card’s reward goes in spread over every visit the card covers, the free one included, and rewards paid per head, such as the birthday award, go into line 9 as a monthly cost per member.
Where the inputs are in Eatery Club
Food cost and the average order across all your guests come from your accounting or POS. Loyalty levels and their cashback percentage are set in the ERP (the POS). A promo code is created in the ERP and gets its limits in the panel, and the points for the birthday rule and the referral program are entered in the panel. The panel also holds the points and visit data for identified guests.
- Earn rate and tiers. Loyalty levels, their boundaries and the cashback percentage are set in the ERP. The panel shows the levels to guests, lists the guests on each level and downloads a weekly report on them (loyalty levels). If the panel and the POS disagree, guests see one set of terms in the app while the register calculates by another.
- Share of points spent. The widgets in «Клієнти» (Clients) show points collected and points spent, by month, over six months to three years. The table shows each guest’s current balance and lifetime points (clients).
- Visits and order size by segment. «Топ клієнти» (Top clients) filters by average order amount over 30, 60 or 90 days, frequency and interval of point accrual, and last visit (top clients). Clients filters by creation date, last visit, date of last order, number of orders and spent points. Creation date is the date the guest’s record was created, which may differ from the day they joined the program.
- Targeted offers. Filter guests in Clients, tick them and assign a promo code in bulk. The code is created in the ERP and gets its limits in the panel: end date, activations per guest and in total, minimum and maximum order, days and hours, restaurants, categories and products (promo codes). The page doesn’t say whether a code assigned to a list works only for those guests, so before a test check that guests in the control group can’t use it; the «Прихований» (Hidden) flag alone doesn’t show that. The client groups page (updated September 9, 2026) lists one built-in rule available now, online payment only; other groups are filled by hand, or support builds one from a list of guest phone numbers you send (client groups).
- Challenges. The panel’s form is the collection promotion: a gift after a set number of purchases of chosen products. The rules live in the ERP and the gift is issued at the register by QR code (collection promotions). The panel card documented in the Help Center has no audience or date controls. Before you plan a third-visit, month-limited or held-out challenge on it, check what your ERP and project setup allow.
- Birthday awards. The automated rule documented in the Help Center takes the birthday from the guest’s profile, a period before or after it in days, a send time and a points action (award or deduct); the push is a separate switch, and with no translation for the guest’s language it isn’t sent (automated notifications). Which guests a rule reaches isn’t described there; check it in your ERP and project setup before you price a birthday award on the whole base.
- Cohorts. Orders from the website, app, kiosk and QR menu are exported from «Замовлення» (Orders), and the file waits in Export (export). Register transactions from the POS sit in each guest’s card apart from online orders, so if most of your guests pay at the register, take visit counts from the POS transaction report or the number-of-transactions column in Clients. The Help Center describes the columns of the export log, not of the exported file, and gives no period for the number-of-transactions column: build cohorts only from a file that carries a guest ID and an order date, or from snapshots of that column taken on the same day each month.
What to keep, narrow or stop
- Price one rewarded visit in line 6: add per-visit rewards as they are and spread each card’s reward over every visit it covers, the free one included; put per-head rewards such as a birthday award in line 9. Line 7 then shows what a rewarded visit leaves.
- Work out the bar: line 10 for points and tiers, the share formula for a targeted offer or a one-month challenge such as the third visit, and the whole card, free cup included, for a punch card.
- Put each reward where the bar is small next to what the guest can change: challenges and offers for occasional and new guests, fixed recognition for regulars.
- Measure against a group that doesn’t get the reward, for at least one full visit cycle.
- Keep the mechanic if measured visits clear the bar. If only one segment clears it, narrow the reward to that segment. If none does, cut the rate or stop, and move the money to the offer that cleared.
Even at a 10% lift, nine in ten of the visits that earn points would have happened without the program. What the program earns shows up only against guests who didn’t get the reward, so set up that group before you set the rate.
For how points, levels and segments work in Eatery Club, see the Loyalty Program section of the Help Center.
Published in
Platon Sobko
News Editor at Eatery Club. I write about technology, software, the internet, and science
All stories by this author →


