Skip to content

Loyalty & CRM

Guest profiles and loyalty points

Attach a guest to an order at the till and their profile, lifetime spend and points balance update from that order. There is no separate loyalty app to keep in sync.

AGIllustrative guest

Anjali G.

98•• ••• 412 · Thamel

Visits
23
Lifetime spend
Rs 48,760
Points balance
1,240worth Rs 124

Points ledger

append-only

  • EARN27 SepORD-0141 · on Rs 1,860 settled+186
  • REDEEM_REVERSAL19 SepORD-0133 · 25% refunded → share returned+100
  • REDEEM18 SepORD-0133 · Rs 40 off the bill−400
  • EARN18 SepORD-0133 · on Rs 2,140 settled+214
  • ADJUSTMENT02 SepManager · Goodwill: cold momo+50

How guests earn points

Points are earned when an order is completed, at the rate you set, on the amount the guest paid in money. Points used to pay part of a bill do not earn more points.

  1. 1Attach the guest to the order at the till and each visit is added to their profile.
  2. 2Earn rate, point value and minimum redemption are set per restaurant.
  3. 3Points are whole numbers, and their cash value is calculated exactly, without rounding drift.

ORD-0158 · completed

Illustrative data
Bill totalRs 2,400
Earns on Rs 2,000 × 0.10+200 pts

The Rs 400 settled with points is left out of the earn base; otherwise a balance could regenerate itself: redeem, earn a slice back, repeat.

Refunds and cancellations reverse points

Cancel an order and the points used on it go back to the guest. Refund part of it and the guest gets that share of points back at the same moment as the money, so points are never returned for a refund that failed.

Points earned on the order are taken back by the same rule. Several partial refunds never return more than was redeemed.

400 points redeemed · refunded in quarters

Illustrative data
  1. Refund 1 of 4 · 25% of the bill+100 → 100
  2. Refund 2 of 4 · 25% of the bill+100 → 200
  3. Refund 3 of 4 · 25% of the bill+100 → 300
  4. Refund 4 of 4 · 25% of the bill+100 → 400

Returned

400

Never more than

redeemed

Two staff redeeming the same balance

If two staff try to redeem the same guest’s points at the same time, one succeeds and the other is refused. The balance never goes negative. This behaviour is covered by tests that run against a real database.

Balance 500 pts · 21:03:17

Counter

Redeem 500 → applied

Waiter tablet

Redeem 500 → refused: insufficient points

Balance after0 pts

The account row is locked while the check and the deduction happen, so they can’t be split by another terminal. A retried request with the same key replays. It doesn’t burn twice.

Choose how redeemed points are taxed

A redeemed point can be treated as a discount or as a payment, and the tax on the bill differs between the two. DataRestro asks you to pick one and shows the difference first.

= 400 points at 0.10 per point (the shipped default)

Default. The guest is taxed on what they actually pay. Most common reading. Set per restaurant, ideally before you trade, or at a period boundary.

Bill · worked example

DISCOUNT

Goods
100.00
Taxable base
60.00
Tax at 10%
6.00
Guest pays
66.00
Revenue recognised
60.00
Appears on the order as
loyaltyDiscountAmount

Tax · discount

6.00

Tax · tender

10.00

The figures above are examples. Neither treatment is universally correct. Confirm with your accountant before you take real money. Redemptions are reported on their own line, separate from manual discounts, because one is revenue given away and the other is a liability being settled.

How it connects

Where loyalty data comes from

Guest records are updated from orders, and points change in the same step as the payment or refund they belong to.

Loyalty and CRM features

Available
Available
Partial
Partial
Planned
Planned
  • Guest profiles

    Available

    Name, phone, order history and lifetime spend from one aggregate query.

  • Points earn

    Available

    On completion, on real money settled, at a per-restaurant rate.

  • Redemption

    Available

    Rejected, not silently capped, if it exceeds what’s eligible.

  • Tax mode

    Available

    DISCOUNT (default) or TENDER, per restaurant, recorded in the audit log.

  • Reversal

    Available

    On cancel, full refund and partial refund; proportional and capped.

  • Concurrency & retries

    Available

    Row-locked balance; idempotent redeem; never negative.

  • CRM segments & consent

    Partial

    Guest records exist; segments and marketing consent do not yet.

  • Tiers & expiry

    Planned

    Every guest earns at one rate; points don’t expire. Expiry is a liability question first.

  • Campaigns & promotions

    Planned

    Rule-based promos and SMS/email. Manual discounts only today.

  • Gift cards

    Planned

    Stored value on the payment ledger.

  • Group-wide balances

    Planned

    One points balance shared across separately registered restaurants.

Loyalty questions

Which tax mode should I pick?
DISCOUNT is the default and the more common reading: points reduce the price, and tax is charged on what the guest pays. TENDER suits an accountant who treats points as deferred revenue. Ask yours, then set it before you trade.
Do points work across my branches?
Yes. A loyalty account belongs to the guest at restaurant level, and branches sit under the restaurant. Sharing a balance across separately registered restaurants isn’t supported yet.
Do points expire?
Not today. Unredeemed points can be a balance-sheet liability in some jurisdictions, so expiry is being designed with that question answered first.
Can I run SMS or email campaigns?
Not yet. Guest records and spend are available; segments, consent tracking and campaigns are planned.

Try the demo

A sample restaurant in your browser. Take an order, send it to the kitchen, mark it ready and take payment. No account needed.

Next featureUnderstandAnalyticsSales, tax, food cost and end-of-day figures by branch.