Skip to content
Subscribe

What it costs to win a guest back

How long to wait and how much to give

September 22, 2026 · 18 min read

Platon Sobko

Два однакові набори білих керамічних фішок на світлій поверхні; у лівому наборі оранжевих фішок більше, ніж у правому

Loading audio…

—:—

You know how to cook and you know how to run a team. For a long time that was enough. Then supply costs went up, wages went up, and the numbers became your job too, when you would rather be working on dishes people come back for on their own.

The cheapest idea in that situation is to bring back the people who have already been in. The guest list is there, the send button is there, and the bonus looks like small change.

For a campaign built around points to make money, you have to decide two things: after how many silent days you write to a guest, and how much the points will be worth when redeemed. The calculation below prices campaign points spent in full on a return order. A promo code needs a separate calculation.

Every figure below is hypothetical. I ran the numbers on a model restaurant, not on anyone’s guest base. Put in your own: food cost, packaging, card fee, and your own return rate. We start with the contribution of one return visit.

The contribution of one return visit

We work in contribution: what is left of an order after every variable cost.

Take an average return order of $25:

Order$25.00
Food cost 32%−$8.00
Packaging−$0.70
Card fee 2% of $25−$0.50
Contribution C₀$15.80

Call it C₀: the contribution of a return visit you paid nothing for.

What the bonus does to the contribution

In this hypothetical example, the guest receives points with a redemption value of $6 and spends all of them on a $25 return order. The reward comes off the amount due, not off the kitchen: the dish is still made for the full order, so food cost and packaging do not move. Two things change — the amount the guest hands over in money, and the card fee, which is charged on that smaller amount. The example excludes any other loyalty rewards. If guests already earn or spend regular points, include their cost in both C₀ and C₁.

Guest pays in money ($25 − $6)$19.00
Food cost 32% of the full order−$8.00
Packaging−$0.70
Card fee 2% of $19−$0.38
Contribution C₁$9.92

A bonus with a face value of $6 takes $5.88 out of the contribution. The only saving is the card fee on the $6, twelve cents.

A bonus the guest spends on the bill costs you almost its face value. That is the second number, C₁. It is calculated for a guest who spends the bonus in full; if some guests never use theirs, your average C₁ is higher.

How many returns you need

Now the comparison. Take the segment of guests who stopped coming and split it in half in your head. One half gets the reminder and the campaign points reward worth $6 modelled above; the other gets neither the campaign reminder nor extra campaign points.

The half with no campaign reminder will also produce returns: some guests were going to come anyway. Call that share r₀. Call the share of returns after the reminder and campaign points r₁. These rates belong to this points offer; a push-only message or a promo code can produce a different treated return rate.

If the halves are the same size, you can compare per guest:

  • the half with no reminder brings in r₀ × C₀ per guest;
  • the half with the reminder brings in r₁ × C₁ per guest.

The campaign is worth running as long as r₁ × C₁ is not smaller than r₀ × C₀:

r₁ ≥ r₀ × C₀ / C₁

The ratio C₀ / C₁ is the price of the bonus inside the formula. With these numbers, 15.80 / 9.92 = 1.59. The campaign has to lift the return rate by more than half again just to break even.

Say the baseline share is 9%. Then you need 14.33%. On a half of 500 guests that is 72 returns.

What happens when returns fall short

Say the campaign delivered 12% instead of the 14.33% you needed. A segment of 1,000 guests, 500 in each half:

With the reminderWithout
Guests500500
Returned12% (60 people)9% (45 people)
Contribution per return$9.92$15.80
Contribution of the half$595.20$711.00

A third more returns, and $115.80 less money.

The breakdown inside those sixty explains the result in expectation. At a 9% baseline, 45 returns correspond to visits that would have occurred without the campaign, and 15 are net additional returns. This does not identify which individual guests would have returned anyway. The baseline-equivalent returns each contribute $5.88 less under the points offer.

45 × $5.88 = $264.60. The fifteen net additional returns bring in 15 × $9.92 = $148.80, and the difference between those two numbers is the same $115.80.

The third number in the formula, r₀, is not in any report. The panel will show you how many guests came back after the campaign. It will not show you how many would have come back without it. An untreated comparison group estimates that baseline share.

Two levers: the size of the bonus and the day

The bonus sets C₁, and with it the bar. Cut the $6 in half:

BonusContribution C₁C₀ / C₁Return rate needed
$6$9.921.5914.33%
$3$12.861.2311.06%

The same 12% return rate with a $3 bonus gives 60 × $12.86 = $771.60 against $711.00 in the control half. Plus $60.60 where a moment ago there was minus $115.80.

One condition on that table: the response depends on the size of the bonus, and the assumption that you still get 12% can only be checked on a live guest base. If $3 brings 10% instead of 12%, the arithmetic changes: 10% × $12.86 = $1.29 against 9% × $15.80 = $1.42 per guest in a half, and the half with no reminder wins. To choose between two point values, compare $6 and $3 on separate randomized groups while retaining an untreated control. Each offer must clear its own contribution bar against r₀ before you compare the two offers with each other.

The day affects r₀. Contacting guests earlier can include more people still on their normal visit cycle, which raises the bar in the formula. A 30-day cutoff is a starting hypothesis, not a threshold the model recommends for every restaurant.

Your threshold comes from dated visits by identifiable guests, not automatically from the online order export. For guests who have visited at least twice, calculate gaps between consecutive visits in the channel coverage you will test and find the gap covering three quarters of them. If that is 41 days, a 45-day threshold is a starting point to test for guests outside their usual cycle.

The panel keeps till transactions separate from online orders (guest record). If most guests pay at the till, use dated POS transactions to calculate their visit gaps; an online-only order file can wrongly classify active till guests as lapsed.

If you test a promo code instead of points, the offer has different conditions. A code can be limited to working hours by day of the week, specific categories and products, a minimum order value, a service type, and a number of activations per guest (promo code settings). Its actual redemption and contribution must be measured separately: the point-based C₁ and break-even rates in the tables above do not price a promo-code campaign.

How to set it up in Eatery Club

Step 1. Work out your threshold and pick the segment. For till visits, obtain dated transactions with guest identifiers from your POS. For online-only guests, start the order export from Orders and retrieve it in Export; first check that the file has a guest identifier and order date. Calculate visit gaps from the source that covers the audience you will test. Then, in «Клієнти» (Clients), filter by last visit, last order and number of orders, checking that those fields match the same channel coverage.

Step 2. Split it into two groups. In «Групи клієнтів» (Client groups) create two groups, say “lapsed-test” and “lapsed-control”, and fill them from the same list with the bulk action that adds guests to a group. Split at random: alphabetically or by registration date the groups come out different in composition and the comparison shows nothing. Know in advance that there is currently one built-in group rule, “online payment only”, so the split is manual, and more complex rules are set up by support (client groups).

Step 3. Pilot the offer you can deliver to the test group. In Clients, filter by the “lapsed-test” group, tick guests and choose the documented bulk push action (bulk actions). If you want to test a code, assign an existing one in a separate bulk action. The code is created in the ERP and reaches the panel after synchronization; for Syrve, the promotion needs “manual application” for an app order (promo code settings). Before calling it a controlled promo-code test, verify in your project that control guests cannot redeem the code: assignment to selected guests is documented, exclusive redemption is not. A push-only or promo-code pilot measures that offer, not the points offer priced above.

Step 4. Prepare points automation separately. In «Регулярні повідомлення» (Regular notifications) you can create a Last transaction rule, Period After, with the day threshold, send time and bonus point action (automated notifications). The guide documents these settings but does not explain how to exclude the control group. Keep the rule inactive while observing an untreated control. If you must activate it before that observation ends, verify in your project that control guests receive neither the campaign message nor campaign points; otherwise r₀ is no longer untreated.

The documented bulk actions include push and promo-code assignment; they do not document awarding points to selected guests. A promo-code result, even at the same face value, does not measure r₁ for a points offer or validate its C₁. A comparable points test would require campaign points to reach only the test group while controls receive neither those points nor the campaign reminder, followed by measurement of returns and actual redemption. Check whether your project can run that comparison before using the point-based threshold to justify the regular rule. If it cannot, the tables remain illustrative; do not present the promo-code pilot as validation of automated points.

The guide to that rule warns separately against substituting the date of the last order for the last transaction. Push delivery and the bonus action are separate switches there: turning push off does not stop the points being awarded.

Fill in the translations. With no translation in the guest’s language, the message does not reach them at all. One empty language quietly cuts a whole group of guests out of the send.

Check the terms against the till. The cashback percentage, the level boundaries and the promo codes themselves live in the ERP; the panel displays and activates them. If the values drift apart, the guest sees one set of terms in the app while the till calculates by another.

The calculation above covers the bonuses only. If you add a paid channel such as SMS, add its cost at your provider’s rates.

What to check a month later

  1. The return rate for the offer actually tested. An untouched control gives r₀. Call the treated rate r₁ from the formula only when the test gave that group the same points offer as the model. A push-only or promo-code pilot has its own treated rate.
  2. The contribution per return. Not the order value. If returning guests order more cheaply than the rest, the bonus eats a larger share of the contribution and the bar goes up.
  3. Redemption and contribution for that offer. For a points test, check whether your project can provide guest- and transaction-level records of points awarded, points spent and the return order’s contribution for the treated cohort. The Clients widgets show overall points awarded and spent over 30, 60 and 90 days; those totals alone cannot establish the test group’s observed C₁. Track points still unspent at the end of the window as an outstanding balance, not a permanent saving. For a promo-code test, use actual redemptions and contribution from orders; point widgets cannot price the code.
  4. Average order amount for the selected period. Top clients lets you filter it over 30, 60 or 90 days; last visit is a separate filter, not a neighboring table column.

Move the day threshold according to the observed r₀. If many control guests return on their own, the threshold may include people still on their usual cycle; compare another threshold. If very few guests return in either half, check the sample size and observation window before concluding the threshold is too late.

The point-based threshold uses C₀, C₁ and r₀ to state the return rate r₁ it would need. You can model the two contributions from your own order costs, but only a comparable points test can measure r₁ for that offer and check what guests actually redeem. A push-only or promo-code result answers a different question.


For how bonus points, levels and segments work in Eatery Club, see the Loyalty page.

Published in

Platon Sobko

News Editor at Eatery Club. I write about technology, software, the internet, and science

All stories by this author →

The latest industry stories in your inbox

Tech, cases and numbers for HoReCa. Every two weeks, no spam.

Cookies

We use cookies!

Hello! This website uses essential cookies to ensure proper functionality and analytics cookies to understand how you interact with it. Analytics cookies will be set only after your consent.

Cookie settings

Cookie usage 📢

We use cookies to ensure basic functionality of the website and to understand how you interact with it. You can enable or disable each category individually. For more detailed information about cookies and other sensitive data, please read our full Privacy Policy.