The formula is trivial. The four choices underneath it are not.
Repeat purchase rate is customers who bought more than once, divided by customers in your population, over some window. Nobody argues with that. Every argument is about the four inputs the formula hides.
Those four inputs are: what event counts as a purchase, how you handle two events close together in time, how long the window is and where it starts, and who goes in the denominator. Change any one of them and the same raw data produces a number 5 to 15 points different. That is a bigger swing than most retention tactics will ever give you.
So a repeat purchase rate reported without its definition is not comparable to anything. Not to another shop, not to a benchmark, and not even to your own number from last month. Fix the definition first, then read the trend.
Count distinct visit-days, not transactions
The biggest inflator is counting transactions. A customer buys a flat white at 09:12, walks out, and comes back at 09:19 for a second one for a colleague. That is two transactions. Under a transaction-count rule she is now a repeat customer. She came in once.
Same-day double counts have boring causes. The cashier isn't sure the first scan registered, so scans again. A family pays separately on one card. A manager re-stamps to be generous. Staff test a card during training and forget to delete it. In a shop doing 120 tickets a day, none of this is an edge case.
The fix is to collapse every event down to one visit per customer per calendar day, then count distinct days. Waya's dashboard works this way: a customer only counts as returning when their most recent visit falls on a strictly later local calendar day than the day they enrolled. Two scans seven minutes apart are one visit-day, and always will be.
Decide which events count at all, too. In Waya's insights a visit means a stamp or a points addition; a redemption or a plain card update is not a visit. That distinction matters because reward days usually sit on top of a purchase day, so counting both events double-counts a single trip.
The window decides more than the behavior does
There are three common windows and they give three different answers from identical data. Lifetime asks whether the customer has ever come back. A cohort window asks whether they came back within 30, 60, or 90 days of their own first visit. A calendar window asks whether they visited twice inside July.
The calendar window has a flaw that quietly punishes growing shops: censoring. Someone who enrolled on 28 July has 4 days of runway left inside a July window and will almost always be recorded as a one-timer. The faster you sign people up, the worse your calendar-window repeat rate looks, even if every customer behaves identically.
Here is the spread, with the assumptions written out. Say 200 customers enroll on your stamp card during June 2026. Give each of them 60 days from their own signup date, and 62 reach at least two distinct visit-days, which is 31%. Measure the same 200 people inside the June calendar month only, and 38 of them managed two distinct visit-days, which is 19%. Same shop, same customers, 12 points apart.
Pick a cohort window sized to your normal purchase cycle: roughly 30 days for a cafe or bakery, 45 to 60 for a barber or salon, 60 to 90 for a car wash or laundry. Then wait. Never report a cohort before its full window has closed, or you're publishing a censored number.
Our own two numbers, and why they disagree
We can demonstrate the problem with our own reporting. Waya's Arabic homepage publishes a 35% average customer return rate. The stricter internal measure — enrolled cardholders with at least two distinct visit-days — comes out at roughly 20.7% across shops on Waya. Both numbers describe the same platform.
They differ because of dedupe and denominator. The stricter measure collapses activity to calendar days and puts every enrolled card in the denominator, including cards created yesterday and cards from shops that stopped scanning months ago. Neither figure is a promise for your shop. A single shop's number depends on its category, its purchase cycle, and how consistently staff actually scan.
The point is not which one is correct. Both are defensible given their definitions. Published without those definitions, they read as a contradiction — and that is exactly the failure mode you are trying to avoid in your own monthly sheet.
The caveat nobody selling you loyalty software mentions
Waya has no POS integration and no hardware. Staff add stamps and points by scanning a card on an ordinary phone, next to whatever till you already use. So what a loyalty platform can measure is not your repeat purchase rate. It is your repeat scanned-visit rate among enrolled cardholders.
A weekly regular who never enrolled is invisible. An enrolled regular whose card the cashier forgot to scan is invisible for that trip. That makes staff scan discipline a component of your metric, not just an operational detail. If scan compliance slips from 80% to 55% during a busy month, your repeat rate falls without one customer changing behavior.
Protect yourself by tracking total visits per open day next to the rate. If visits per day held steady and the rate dropped, look at your definition or your denominator before you look at your customers. Use the platform number as a directional retention signal for the enrolled segment, and your till's own totals for revenue. Do not blend the two into a single claim.
Write it down: the one-paragraph metric contract
Put five fields at the top of the same sheet, every month: population, event, dedupe rule, window, and exclusions. It takes one paragraph and it is the difference between a metric and a mood.
Filled in, it reads like this. Population: customers who enrolled on the stamp card between 1 and 30 June 2026. Event: a stamp or points addition scanned by staff. Dedupe: one visit per customer per calendar day, Asia/Riyadh time, which is UTC+3. Window: 60 days from each customer's own enrollment date. Exclusions: staff test cards, customers imported from the old spreadsheet, and any card created after 30 June.
Exclusions earn their own line for a reason. Excel and CSV import, available on paid plans, drops people into your base who have never scanned anything — leave them out or report them as a separate cohort. Training cards inflate the numerator. Timezone choice quietly moves late-night visits across the day boundary, which shifts distinct visit-day counts in bars and late-closing restaurants.
Then freeze the contract. If you improve the definition later, restate the last three months under the new rule before you compare anything. Otherwise you will read a definition change as a performance change, and you will spend a quarter optimizing for an accounting artifact.
Frequently asked questions
What is a good repeat purchase rate for a small shop?
There is no universal benchmark, because a cafe measured on 30-day distinct visit-days and a car wash measured on 90 days are not comparable numbers. Compare yourself only to your own earlier cohorts under an identical definition. For rough context: across shops on Waya, about 20.7% of enrolled cardholders reach at least two distinct visit-days, while the broader 35% average return rate published on our Arabic homepage uses a looser definition. Treat both as platform averages, not targets.
Should two purchases on the same day count as a repeat customer?
No. Collapse all activity down to one visit per customer per calendar day before you count anything. Same-day repeats are usually a second coffee, a family paying separately, or a cashier scanning twice because the first scan didn't look like it registered. Counting them as returns can inflate your rate by several points and hides real churn.
What window should I use for repeat purchase rate?
Use a fixed window that starts on each customer's own first visit, sized to your normal purchase cycle — around 30 days for cafes and bakeries, 45 to 60 for barbers and salons, and 60 to 90 for car washes and laundries. Avoid plain calendar months, because customers who joined near month-end have no time left to return and drag the number down. Do not publish a cohort until every customer in it has completed the full window.
Does Waya calculate repeat purchase rate for me?
Yes, for enrolled cardholders: the dashboard reports new versus returning customers, and a customer counts as returning only when their most recent visit falls on a later calendar day than the day they enrolled. Because there is no POS integration, this measures scanned visits rather than every sale at the till. The full dashboard is included on the free plan, which covers up to 100 customers with no credit card.
Why did my repeat purchase rate drop right after a great month of signups?
Fast enrollment growth mechanically lowers a calendar-window repeat rate, because everyone who joined in the last week of the month is counted in the denominator with almost no time to come back. Switch to per-customer cohort windows and the effect disappears. Check visits per open day at the same time — if that held steady, the drop is arithmetic, not behavior.