What is our repeat purchase rate?
By the Analistable team · Updated · 4 min read
Repeat purchase rate = customers with two or more orders ÷ all customers in the period. Stack the order exports, count orders per customer, and divide. In the example, 2 of 4 customers (ana@lune.fr and eva@nordic.dk) ordered more than once: a 50% repeat rate.
Part of our guide: How to answer questions across multiple spreadsheets
The data
| Customer | Order | Date | Amount | Store |
|---|---|---|---|---|
| ana@lune.fr | O1 | 2026-01-14 | 120 | Web |
| ana@lune.fr | O2 | 2026-03-02 | 80 | Web |
| ana@lune.fr | O3 | 2026-08-21 | 95 | Amazon |
| ben@hart.co.uk | O4 | 2026-02-10 | 60 | Amazon |
| eva@nordic.dk | O5 | 2026-04-05 | 200 | Web |
| eva@nordic.dk | O6 | 2026-09-12 | 150 | Web |
| kim@kiln.io | O7 | 2026-06-30 | 45 | Amazon |
In a spreadsheet
Customers =UNIQUE(Orders[Customer])
Orders per customer =COUNTIF(Orders[Customer], A2#)
Repeat rate =SUM(--(B2# >= 2)) / ROWS(A2#)A2# refers to the whole spilled list of customers; the double minus turns TRUE/FALSE into 1/0.
In SQL
SELECT COUNT(*) AS customers,
SUM(n > 1) AS repeat_customers,
ROUND(100.0 * SUM(n > 1) / COUNT(*), 1) AS repeat_rate
FROM (SELECT customer, COUNT(*) AS n FROM orders GROUP BY customer);| customers | repeat_customers | repeat_rate |
|---|---|---|
| 4 | 2 | 50.0 |
Choices that change the number
- Customer key across stores: ana@lune.fr ordered on the website and on Amazon. If the stores used different IDs, she'd count twice and the rate would fall. Match on email or a shared ID.
- Period: a 12-month window gives a higher rate than a 3-month one. Always state the window.
- Refunded orders: decide whether a fully refunded order counts as a purchase.
- Cohorts: “share of January's new customers who ordered again within 90 days” is more useful for comparing months than one overall rate.
Ask it in Analistable: “What share of customers ordered more than once this year, by store?” Related: customer lifetime value from orders and refunds.
In Google Sheets
Helper column F (orders per customer): =COUNTIF(A$2:A, A2)
Repeat rate: =COUNTUNIQUE(FILTER(A2:A, F2:F > 1)) / COUNTUNIQUE(A2:A)With customers in column A, the helper counts each customer's orders and the rate divides repeat customers by all customers. Format the result as a percentage.
Why the store split matters: a second example
| Scope | Customers | Repeat customers | Repeat rate |
|---|---|---|---|
| Web only | 2 | 2 | 100% |
| Amazon only | 3 | 0 | 0% |
| Both stores, matched on email | 4 | 2 | 50% |
On the web shop, ana@lune.fr (O1, O2) and eva@nordic.dk (O5, O6) both reordered. On Amazon, nobody placed a second order. Combined, ana's three orders across both stores make her one repeat customer, not two partial ones. Reporting each store alone hides that Amazon is acquiring one-off buyers while the web shop holds the loyal ones.
SELECT store, COUNT(*) AS customers, SUM(n > 1) AS repeat_customers
FROM (SELECT store, customer, COUNT(*) AS n FROM orders GROUP BY store, customer)
GROUP BY store;Related measures to report alongside
- Orders per customer: 7 orders ÷ 4 customers = 1.75. It moves when existing repeat customers order more, which the repeat rate ignores.
- Time to second order: for each repeat customer, the gap between first and second order. ana@lune.fr took 47 days (14 January to 2 March).
- Cohort repeat rate: of the customers who first ordered in a given month, the share who ordered again within 90 days — fair across months because every cohort gets the same window.
Excel 2019 and older
Insert a pivot table from the stacked orders with Customer in Rows and Count of Order in Values. Next to it, =COUNTIF(B:B, ">=2") / COUNT(B:B) gives the repeat rate, where column B holds the pivot's counts (exclude the Grand Total row from the range).
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Rate far too high | Each order line counted as an order | Count distinct order IDs per customer |
| Rate far too low | Same person under two IDs across stores | Match on lower-cased email |
| Rate jumps between months | Window changes length | Use a fixed window or cohorts |
Frequently asked questions
- How do I calculate repeat purchase rate?
- Divide the number of customers with at least two orders by the total number of customers in the period.
- Should I combine orders from different stores?
- Yes, if the same person buys in both — stack the exports and match customers on email so they aren't counted twice.
- What's a good repeat purchase rate?
- It varies widely by product and period; compare your own cohorts over time rather than against a generic benchmark.
- Does a refunded second order count as a repeat?
- Decide once and apply it consistently. Many teams exclude fully refunded orders, because the customer didn't really buy again.
- How long should the window be?
- At least as long as your typical gap between orders; for products bought a few times a year, use 12 months or cohorts.
- Is repeat rate the same as retention rate?
- No. Retention looks at customers active in one period who are still active in the next; repeat rate counts anyone with two or more orders in a window.