Customers & loyalty
Regulars: keeping their details, letting them run a tab, holding credit for them, and rewarding them for coming back.
The Customers page
Customers — "Browse profiles, filter as you type, edit details, store credit, and purchase history." The list shows Name, Code, Email, Phones, Tax ID and Created; the Search box matches "Name, email, phone, or code" as you type. Clicking a row opens that customer's drawer.
Create a customer
- Press Create customer.
- Fill in Display name — the only required field.
- Add contact details and, if you deliver, the address.
- Press Create customer.
Leave Customer code blank and one is assigned automatically ("Auto-assigned if blank").
What you can record
| Section | Fields |
|---|---|
| Basics | Display name (required), First name, Last name, Company / trade name, Customer code |
| Contact | Email, Phone, Phone (alt), Preferred contact — No preference / Email / Phone / Alt phone |
| Address | Address line 1 and 2, City, region and postal-code labels that follow the country, Country. "Delivery / billing address for grocery & café orders." |
| More details (collapsed — "Tax, prefs, tags") |
Tax ID, Customer type (Retail / Wholesale), Language / locale, Tags, Marketing opt-in, Notes |
Tags
Tags is a plain text box — type them separated by commas, e.g. "vip, delivery, catering". They are stored on the customer and come through the CSV import.
There is no tag picker, no list of existing tags, and the customer search covers name, email, phone and code only. A tag is a note you can read on the record, not a way to pull up "all my VIPs". The same applies to Marketing opt-in: it is captured, but nothing exports or segments on it.
Importing customers
Import CSV opens Customer import. Only
display_name is required; leave customer_code blank
to auto-assign; an address needs address_line1 once any address
field is filled. Tags may be separated by semicolons, commas or pipes. As
everywhere else: Dry run first, then Commit
import.
The customer drawer
Opening a customer gives you five sections: Profile, Store credit, House account, Subscriptions and Purchase history, with three summary tiles across the top — Store credit balance, Loyalty ("Enrolled · N pts" or "Not enrolled"), and House account ("Balance … / limit …").
Store credit
Store credit is money the shop is holding for a customer — a goodwill credit, or the value of a return given back as credit rather than cash.
- Open the customer and find the Store credit section.
- Type an Amount.
- Choose an Action: Add (issue), Redeem, Adjustment (+) or Refund credit.
- Press Post credit. The result reads "Posted 20.00. Balance 45.00."
Only Redeem subtracts; the other three add. Redeeming more than the balance is refused: "Insufficient store credit balance".
A refund can go straight onto the balance
Refund mode on the till offers Store credit as a tender where the shop issues it. Because credit belongs to a named person, the refund needs a customer — the one on the original sale, or somebody named at the returns desk — and is refused without one. The till shows the new balance before posting, and the refund receipt prints it. Full detail on Refunds & returns.
A finished sale can be settled out of store credit — the balance is taken under a lock in the same transaction that moves the stock, and spending more than the balance is refused — but that path is API-only. The retail till's tender buttons are cash, card, gift card, points and pay later; there is no screen anywhere that spends a store-credit balance on a sale.
At the counter today, redeeming is a back-office action: press Redeem on the customer drawer and settle the sale by another means. Note also that the balance is held per store, so credit issued at one branch is not visible at another.
Settling an existing pay later tab out of store credit is refused outright: that path is not wired to the ledger, and recording the tender anyway would clear the debt while leaving the balance untouched.
House accounts — letting a customer run a tab
A house account is the local shop's oldest feature: the customer takes the goods now and pays at the end of the month.
Charging to the account
Two ways:
- At the till — attach the customer, then tender Pay later ("Pay later (charge to account)"). Without a customer the till refuses: "Attach a customer before Pay later". The store must have Allow deferred payment (pay later) switched on in Settings.
- From the drawer — enter a Charge amount and a Reason and press Charge house. If there is no account yet, one is created; the Credit limit (new) field sets its limit, defaulting to 500.
Credit limit (new) only applies when the account is created — there is no field anywhere to raise or lower an existing limit. Worse, an account created automatically by a Pay later sale at the till is opened with a hard-coded limit of 10,000, not the 500 the drawer suggests. If you care about limits, create the account from the drawer before the customer's first pay-later sale.
Settling the account
Unpaid sales are listed under Orders → Unpaid (pay later), but no screen collects the money and clears the balance. The settle operation exists in the API and has no button. In practice you can build up house-account debt in tech-pos but must clear it in your own books.
There are also no customer statements, no ageing of what customers owe, and no list of house-account balances — the balance is visible one customer at a time on the drawer.
Groups and standing discounts
Some customers always pay less. A garment shop's trade accounts get 10%, staff get 25%, a wholesale buyer has agreed terms. That is not a promotion — a promotion runs until Sunday. It belongs to the person.
Customers → Groups & discounts is where you say so. A group is a name and a percentage. Open a customer, pick their group under Standing discount, and from then on the till takes the percentage off by itself the moment their name goes on a ticket — including items already on it — and puts it back if they are taken off.
- Groups belong to the company, not to one shop. Trade at one branch is trade at every branch.
- A discount somebody keyed in by hand is never overwritten. If a manager took 50% off a damaged item, that stands, even for a customer whose group says 10%.
- The receipt and the discount report can tell the two apart, so a policy does not look like a favour at month end.
- Switching a group off stops it discounting without losing who was in it. Retiring it releases the members and keeps their records.
A cashier can see the groups — the till has to be able to explain why a ticket went cheaper — but cannot create or change one. Setting a percentage is a pricing decision, so it needs a manager.
Loyalty
Loyalty is an add-on — "Enroll customers, check balances, redeem points, and set the earn rate." The banner states the model plainly: "Points earn automatically on finalize when a customer is attached at POS. Use this page to enroll, check balances, redeem at the counter, or change the earn rate."
How points are earned
- Points = sale total × the earn rate, and the rate is Points per {currency} — one programme for the whole company, one rate.
- They are awarded when a sale is completed with a customer attached, and on partially refunded sales. Each sale earns once — re-running it does not double up.
- A customer who is not enrolled is enrolled automatically on their first earning sale.
If anything goes wrong awarding points, checkout still completes and nothing is shown — loyalty is never allowed to break a sale. If a customer says points are missing, check the sale completed with them attached.
Enrol, check, redeem
- Open Loyalty and search the customer by name, phone or email, then click the match. Enroll stays disabled until one is selected.
- The Points balance block shows "N pts" and the earn rate, or "Not enrolled yet — tap Enroll in loyalty below."
- Press Enroll in loyalty if needed.
- To reward at the counter, type Points to redeem and press Redeem points.
Setting the earn and redeem rates
The Earn and redeem rates panel on the right holds four settings, and Save rate writes them all:
| Field | What it does | Default |
|---|---|---|
| Points per {currency} | The earn side. Points earned = sale total × this. | 1 |
| Points to buy 1 {currency} | The redeem side — what points are worth when spent at the till. At 100, a 500-point balance is worth 5.00. | 100 |
| Minimum balance before points can be spent | A floor. Under it the till refuses the whole balance rather than part of it. 0 means no floor. | 0 |
| Points may also pay tax and fees | Off, points buy goods only. On, they can settle a whole ticket including tax. Only turn it on if your jurisdiction treats points as a payment instrument. | off |
These belong to the programme, and the programme belongs to the company — so a rate set here applies at every branch.
Points at the till
Points are a tender. Attach the customer, tap Use points, and the till shows the balance and what it is worth before anything is committed; the money comes off the sale and the balance falls in the same movement. Splitting is the normal case — $30 as $5 of points and $25 cash. Step-by-step at The retail till; what a refund does to a balance is on Refunds & returns.
Redeem points on the Loyalty page only subtracts from the balance — it is for a reward handed over at the counter and recorded here. It does not take money off a ticket, and it refuses to be pointed at a sale: ask it to redeem against an order number and it says so, because recording a sale it reduced by nothing is exactly the bug the points tender was built to close.
No tiers, no points expiry, no bonus rates by product or category, no rewards catalogue, and no loyalty card or barcode. Points cannot settle an existing pay later tab either — the collect-payment path does not move a balance, so accepting the tender would clear the tab and leave the points where they were.
What the cashier sees at the till
The till has a Customer panel — "No customer on this sale yet. Search, then tap a name to attach — or create a new one." Search by name, email or phone; or press + New customer and enter a name (phone and email optional) to Create & attach in one step. Clear customer takes them off the sale.
Once attached, the ticket shows a chip: Customer · {name}.
The one thing the register will tell a cashier about an attached customer is their points: the Use points button carries what the balance is worth, and opening it reads out 640 points — worth $6.40. That is there because points are spendable at the counter and the number has to be sayable before the customer decides.
Everything else is still back-office only — store credit, house-account balance and limit, tags and purchase history are not shown at the register. A points balance is also printed on the receipt after a sale that moved it, which is the only place the customer can check it on their way out.
Purchase history and subscriptions
Purchase history lists recent completed sales for that customer — Sale #, When, Status, Total. Subscriptions lists plans sold at the register ("Sell a subscription SKU with this customer attached to create one").
Limits worth knowing
- No delete, merge or de-duplicate for customers, and no archive.
- One address per customer.
- The Wholesale customer type is stored but nothing changes prices for wholesale customers.
- No customer messaging — no birthday notes, campaigns, or marketing sends.
- Loyalty is company-wide; you cannot run a different programme in one branch.