Skip to content
Apolaris AI Docs

Loyalty program

pro

Reward repeat customers with two mechanics — spend-based points and visit stamps — plus tiers, a reward catalog, and a scannable card.

Loyalty program
Overview — follow the steps below.

The loyalty program turns paying customers into returning ones. Each enrolled customer gets a digital fidelity card with a scannable barcode, earns rewards automatically from real transactions, and climbs spend-based tiers. Because it runs on the same data as your sales and appointments, there is nothing to track in a spreadsheet and no separate punch-card app to reconcile — balances are always correct and always up to date.

Loyalty must be enabled as a module for your organization before the section appears. Modules are managed by Apolaris AI — contact support if Loyalty is not available.

Two mechanics: points and stamps

Loyalty has two independent reward axes. It is important to keep them straight, because they are earned by different events.

Mechanic Earned when What it tracks
Points A sale becomes paid at the point of sale A spendable balance (Customer.loyalty_points)
Stamps A booking is marked completed in the calendar A running visit counter (stamp_count) on the card

A completed appointment does not award points — it adds one stamp. Points come only from paid sales. If you tell customers an appointment earns points, they will think their balance is wrong. Frame appointments as filling a stamp card and sales as earning points.

So a customer can finish a service (one stamp) and, when they pay for it (points), advance both mechanics in a single visit — but each is driven by its own event.

How points are earned

Earning is configured once per organization on the loyalty program settings and applies to every paid sale.

Setting What it does Default
Points earned per 1 unit of currency (points_per_currency) Multiplier on the sale amount, e.g. 1 point per $1 1
Redemption value (currency_per_point) Money taken off per point spent when redeeming 1
Minimum balance to redeem (min_points_to_redeem) Points cannot be spent below this balance 0
Earn points on tips (earn_on_tip) Whether tips count toward earning Off
Enrollment bonus (enrollment_bonus_points) One-off points granted when a customer is enrolled 0
Birthday bonus (birthday_bonus_points) One-off points granted once per year on the customer's birthday 0

Points are computed as the sale amount multiplied by your points-per-currency rate, rounded down to a whole number. By default tips do not earn points — tips are excluded from revenue and paid out to staff — so turn on Earn points on tips only if you want them to count.

Points are earned on the net sale amount, after any discount. Because a discount code lowers the sale total, a customer who uses a discount earns points on the discounted price, not the original (gross) price. This is usually the behavior you want — but if you run a deep promo, expect points earned on those sales to drop proportionally. The same net figure is what your Analytics report.

Tiers (spend-based)

Tiers are a separate axis from points. A customer's tier is determined by their total spend, not by their points balance — the two move independently.

  • Each tier has a minimum total spent (min_total_spent) threshold. A customer is placed in the highest tier whose threshold their spend meets.
  • Each tier can carry a standing perk (perk_discount_pct) — a discount the customer always receives while at that tier.

The default ladder, seeded automatically the first time the program is created, is:

Tier Min. total spent Standing perk
Bronze 0 —
Silver 500 —
Gold 2000 5% off
VIP 5000 10% off

You can rename tiers, change thresholds, set perk percentages, and add or remove tiers to fit your business.

The reward catalog

Rewards are richer than "points cost X". Each reward has a type that determines how it is earned and what benefit it grants:

Reward type Earned with Benefit
Points → money off (points_money) Points (points_cost) A fixed amount off (discount_amount)
Points → % discount (points_percent) Points (points_cost) A percentage off (discount_pct)
Stamp card → free / discounted service (stamp_service) Stamps (stamps_required) A free or discounted service (free_service), optionally limited to one service category
Tier standing perk (tier_perk) Reaching a tier The tier's standing discount
Birthday voucher (birthday) The customer's birthday A fixed amount off (discount_amount)

A stamp-card reward can be restricted to a single service category, so for example "free service after 8 visits" only counts visits toward the stamp goal.

The card and ledger

Every enrolled customer has a loyalty account — their digital fidelity card.

  • Card number follows the format LC-000123-7: a zero-padded record id with a final mod-10 check digit. This is rendered as a Code39 barcode on the customer profile and in the customer's portal, so staff can scan it at checkout or the customer can show it from their phone.
  • Customer.loyalty_points is the customer's cached, authoritative balance.
  • Every balance change is recorded in an immutable transaction ledger (earn from purchase, enrollment bonus, birthday bonus, manual award, redemption, adjustment), so you can always see exactly how a balance was earned or spent.
  • Reward redemptions are tracked separately with a status of issued, applied, or void.

Earning is idempotent per sale. A database guard ensures one paid sale can only ever credit points once, even if the sale is re-saved (for example when a receipt is generated). You will not see a customer double-credited for the same purchase.

Roles: who does what

Access is granted per privilege. A domain manager (is_manager) always passes both checks below; a non-manager needs the specific privilege.

Action Required privilege
Configure the program, tiers, and reward catalog is_manager or can_manage_loyalty ("Manage Loyalty Program")
Enroll customers, award points, redeem rewards is_manager or can_use_loyalty ("Use Loyalty Program") or can_manage_loyalty

There is no separate "HQ" flag — the operator who configures the brand-wide program is simply someone with can_manage_loyalty. A manager implicitly holds both privileges. Anyone with can_manage_loyalty can also perform the counter operations.

See Users & privileges to assign these, and the privileges reference for details.

Set up the program

Who can do this: is_manager or can_manage_loyalty.

  1. Make sure the Loyalty module is enabled for your organization.
  2. Open the Loyalty section from the sidebar.
  3. On program settings, set your earning rate (points per currency), redemption value, minimum balance to redeem, whether tips earn, and any enrollment/birthday bonuses.
  4. Review or edit your tiers — set each tier's minimum total spent and standing perk percentage.
  5. Build your reward catalog — add rewards of each type you want to offer (points→money, points→%, stamp cards, tier perks, birthday vouchers).
  6. Save. New paid sales start earning points and completed bookings start adding stamps immediately.

For a guided, end-to-end setup, follow the loyalty workflow.

Enroll a customer and redeem rewards

Who can do this: is_manager, can_use_loyalty, or can_manage_loyalty.

  1. Open the customer's profile and enroll them — this creates their card (and grants the enrollment bonus, if configured).
  2. At the counter, find the customer or scan their Code39 card.
  3. Check the current points balance, stamp count, and available rewards.
  4. Apply the reward the customer chooses. Points are deducted automatically through the ledger and the redemption is recorded; a stamp-card redemption resets that card's stamp count.

You can also award points manually (for example, a goodwill gesture) — every manual award is logged in the ledger with the staff member who made it.

AI reward suggestions

Who can do this: is_manager or can_manage_loyalty.

Apolaris AI can suggest tiers and rewards based on your customers' real spending patterns (average ticket, spend percentiles, most popular service category), so you do not have to guess what will drive return visits. You can refine the suggestions with a written instruction (for example "smaller discounts" or "add a pedicure stamp card") and then apply the ones you like — applying a suggestion creates the tier or reward (or updates the program), with every number re-validated server-side.

The suggestions also work without AI. When AI is disabled, a built-in rules engine produces deterministic, percentile-based suggestions from the same statistics — so you always get a sensible starting point. A free-text instruction, however, needs AI to honor.

Tips and warnings

Print or display the Code39 card at the front desk so customers can scan in seconds — faster than looking anyone up by name.

Encourage customers to open their card in the portal. A visible, growing balance and a near-complete stamp card are two of the strongest reasons to come back.

Points post only when a sale is marked paid, and stamps add only when a booking is marked completed. If staff leave sales unpaid or appointments un-completed, customers miss out — build the habit of closing every transaction.

Why it helps

Retention is cheaper than acquisition. Because earning is automatic and tied to real transactions, the program rewards exactly the behavior you want — repeat visits (stamps) and higher spend (points and tiers) — with zero manual point-keeping. See the payoff in Analytics.