Loyalty rule types
Promo code, first-visit discount, 'buy N get one', and what Advanced unlocks.
Every loyalty rule is built from two independent halves: a condition (“When”) and a reward (“Reward”). There are three conditions and two rewards. That means six possible combinations — not six different features. This article is the reference: exactly what each condition does, what each reward does, the limits on every field, and which fields disappear depending on the condition you pick.
The path to everything described here: Setup → Loyalty → New rule, then Pick a template.
1. The three conditions, in one table
| Condition | Name in the UI | Who triggers it | Field it asks for | Field limits |
|---|---|---|---|---|
| Promo code | Promo code | The client, when paying online | Promo code | A–Z and 0–9, 2–32 characters |
| First visit | First-visit discount | The system, automatically | none | — |
| Stamps | Buy N, get one | The system, automatically | Reward on visit number | whole number 2–50 |

Promo code
The client sees an I have a promo code row on the payment screen, opens it, types the code and presses Apply. If the code is valid for that booking, the discount appears immediately in the price breakdown.
The code field is strict: it upper-cases everything and rejects any character that is not A–Z or 0–9, with the message “Only letters A–Z and digits 0–9 are allowed.” So “summer20” is stored as “SUMMER20”; Cyrillic in a promo code is impossible.
The promo code is the only condition that requires an action from the client, and the only one that supports the Max uses per customer field.
First visit
Fires only on a client’s very first booking on this board. There is nothing to configure. Instead of a field the wizard shows an explanation: “Fires automatically on the very first booking made by a customer on this board. No customer input.”
Important: this condition has a hidden requirement that the wizard does not show — the client must have a verified identity (signed in, or having confirmed the booking through the emailed link). Otherwise the reward is withheld. The reason and the workaround are in First-visit & birthday.
Stamps (buy N, get one)
Fires when the client reaches exactly their Nth visit. Non-cancelled bookings of that client are counted — cancelled ones do not. If you picked specific services on the rule, only those are counted; if you didn’t, every service on the board counts.
Important: the reward is granted exactly once, on the Nth visit, and then the rule stops firing for that client. It is not a cycle — the 20th visit on a card of 10 does not pay out a second time. The “Every 10th booking” label in the list is imprecise.
Changing the condition on an existing rule
The condition comes from the template, but you can change it in the editor. When you do, Mountify clears the fields that will no longer be visible:
| Switching to | What is cleared automatically |
|---|---|
| First visit | ”Max uses per customer” and “Total budget · uses” |
| Buy N, get one | ”Max uses per customer” |
| Promo code | nothing |
This is deliberate: otherwise you would be left with an invisible cap you can neither see nor remove.
2. The two rewards, in one table
| Reward | Name in the UI | Field | Limits | Currency |
|---|---|---|---|---|
| Percent | Percent off | Discount | 0–100 | — |
| Flat amount | Flat amount | Amount | ≥ 0 | locked to the board currency |
- 100 % means free — the hint under the field says it literally: “0–100 %. 100% = free.”
- On a flat amount the currency field is locked. The reason is technical and worth knowing: a rule whose currency differs from the board’s is dropped before it can apply. So Mountify does not let you change it at all.
- A flat reward never drives the total negative: if the service is 30 and the reward is “−50”, the client pays 0, not −20.
What exactly the discount is calculated on
This is the most frequently asked question and deserves a table of its own:
| Part of the price | Counted in the discount base |
|---|---|
| Base service price | Yes |
| Per-specialist price (if set) | Yes |
| Day / time surcharge | Yes |
| Multiplied by seats (group class) | Yes |
| Number of slots (rental) | Yes |
| Add-ons | No |
So: a 60 service + a 20 add-on with a −50 % rule → the discount is 30 (half of 60) and the total is 50.
And one asymmetry that surprises people: the Minimum spend field in “Who qualifies” is measured against the service plus the add-ons (the whole order), while the discount itself is computed on the service alone.
3. The six combinations and what they are for
| Condition + reward | What it is in practice |
|---|---|
| Promo code + percent | The classic campaign: “WELCOME10 = −10 %“ |
| Promo code + flat amount | A voucher with a round value: “FLYER = −20” |
| First visit + percent | Acquisition: “−20 % on your first appointment” |
| First visit + flat amount | Acquisition with a clear number: “−15 off the first visit” |
| Stamps + 100 % percent | The classic punch card: “the 10th is free” |
| Stamps + flat amount | A softer version: “10 off on the 5th” |
4. The limits that apply to every condition
These fields live in the “Who qualifies” and “Advanced” cards and are the same for all three conditions (with the exceptions in the table in §1).
| Field | Empty means | How it shows up for the client |
|---|---|---|
| Which customers = First-time | ”Anyone” | The rule simply never appears for a returning client |
| Which customers = Returning | ”Anyone” | Never appears for a new client |
| Applies to services | all services | The rule never appears on a service outside the list |
| Valid from | no start date | On a promo code the client sees “This code has expired.” |
| Valid until | runs forever | Same message |
| Minimum spend | no minimum | ”Your order doesn’t reach the minimum for this code.” |
| Max uses per customer | unlimited | ”This code has reached its usage limit.” |
| Total budget · uses | unlimited | Same message |
| Discount ceiling | no ceiling | The client sees “Maximum discount with this code: …” |
| Total budget · money | unlimited | The rule silently stops firing |
| Combine with other rules | off | See Stacking & budgets |
The messages in the right-hand column are the real texts a client sees when entering a promo code. The automatic conditions (first visit, stamps) show no message at all — the rule just doesn’t appear.
5. What happens to an applied reward afterwards
An applied discount is not set in stone. Here is every case in which it changes:
| Event | Effect on the discount |
|---|---|
| The booking is cancelled | The discount is voided: it stops counting in stats and the booking price is recomputed |
| The booking is marked No-show | Same — voided. A no-show does not earn a reward |
| The booking is moved to another time | Everything is voided and recomputed (the day/time surcharge may now differ) |
| You change the service or the number of seats | Same — voided and recomputed |
| The booking is confirmed (Pending or Waitlisted → Confirmed) | The reward stays; automatic rules are recomputed where the price changed |
| A team member presses Void on the application | The discount stops counting; the price is recomputed on the next read |
Voiding by hand happens on the client card: Clients → the client → the “Loyalty” tab → Void on the row under Applications. The dialog warns: “The discount stops counting toward stats and totals. Booking price will recompute on next read.” There is an undo — Reactivate.
A cancelled or voided application still counts against the rule’s caps and its money budget. That is on purpose: otherwise a client could book, take the reward, cancel and take it again.

6. What is not a rule type
So you don’t go looking in vain:
- There is no “birthday” condition — and there cannot be one, because there is no date-of-birth field on the client card.
- There is no “referred a friend” (referral) condition.
- There is no “N days since the last visit” condition (dormant-client win-back).
- There is no “spend accumulated over the year” condition (tiers, VIP).
- There is no “free add-on”, “free product” or “points” reward. The rewards are percent and flat amount, full stop.
- There is no “credit” reward the client carries between visits — that is what Packages & memberships are for.
- There are no workspace-level rules. Rules belong to the board; a second venue = a second board = its own rules.
The page description in the app mentions BOGO, birthdays, referrals, tiers and cashback. That copy describes where the mechanism is heading, not what you can build today. Today it is the three conditions above.
What’s next
- Promo codes — the whole life of a code, from creation to the errors the client hits.
- Punch cards (buy N, get one) — how the card is counted and how to add a stamp by hand.
- First-visit & birthday — the hidden identity requirement and why birthdays don’t exist.
- Stacking & budgets — “Order” and “Combine”, and where the discount lands in the price.