At a glance
The percentage of distinct customers in the period who placed more than one order. The single most predictive customer-quality KPI in commerce: a store with a 35% repeat rate has structurally lower CAC pressure than a store at 15%, regardless of paid-acquisition spend. On BigCommerce specifically, this card has a wrinkle, registered customers are tracked accurately by customer_id, guest customers can only be deduplicated by email, so stores with high guest-checkout rates systematically under-report repeat behaviour. Understanding the registered-versus-guest split (see BC Guest vs Registered) is essential to reading this number correctly.
| What it counts | COUNT(distinct customer_id WHERE order_count > 1) / COUNT(distinct customer_id) over the window. Customer is identified by customer_id for registered customers, by billing_address.email (lowercased, trimmed) for guests. Email-based grouping is fragile: typos, plus-aliasing, and case-sensitivity edge cases all under-deduplicate. |
| VAT / tax treatment | n/a, this is a count metric. |
| Shipping | n/a. |
| Discounts | n/a. |
| Refunds | Refunded orders are still counted as orders for repeat-rate purposes. A customer who placed two orders and refunded one still counts as repeat. This is the conventional retention definition; subtract refund-only customers manually if you want a “happy-customer” repeat rate. |
| Cancelled orders | Excluded. A Cancelled order never reached the customer; the order doesn’t count toward the customer’s order count. |
Incomplete orders | Excluded. Abandoned-checkout artefacts do not count as orders. |
| Currency | n/a, this is a count metric. |
| Channels / sources | All channels aggregate. POS-customer matching to web-customer is a known gap on BigCommerce, the same physical customer who bought once on POS and once on web typically appears as two distinct customer_id records unless the merchant uses BC POS’s customer-link feature. This is a structural under-counting of repeat rate on multi-channel stores. |
| Customer identity gotchas | Three: (1) registered → guest → guest is one customer, three IDs (the registered → guest transitions break linkage). (2) Email aliasing (susant+test@example.com vs susant@example.com) creates fake-distinct customers. (3) B2B Edition company-account customers may share a single customer_id across multiple buyers (procurement teams), inflating the per-customer order count without representing genuine repeat behaviour. |
| Window matters | 90D is the default but interpretation changes with window: 30D repeat rate measures fast repeat (subscription, consumables), 90D measures normal repeat (apparel, beauty), 365D measures annual repeat (furniture, B2B). Don’t compare across windows. |
| Time window | 90D (rolling 90 days; settings allow 30D, 90D, 180D, 365D). |
| Alert trigger | <25% (Tier-1 retention floor). Below 25% on a 90D window is a structural retention problem; the store is leaking customers as fast as it acquires them. |
| Sentiment key | repeat_rate |
| Roles | owner, marketing |
Calculation
Worked example
A UK supplements brand on BigCommerce, 90-day window 14 Feb 26 to 14 May 26, mostly DTC subscription-style consumables.| Customer cohort | Distinct customers | Customers with >1 order | Repeat rate | Notes |
|---|---|---|---|---|
| Registered (logged-in) | 4,200 | 2,100 | 50.0% | Subscription cohort, near the theoretical max |
| Guest checkout | 8,400 | 1,008 | 12.0% | Includes inflation from email-aliasing |
| Blended (this card) | 12,600 | 3,108 | 24.7% | Below the 25% Tier-1 threshold |
- The blended 24.7% triggers the alert, but the registered cohort alone is 50% (excellent). The store’s actual retention is healthy; the card under-reports because guest checkouts dilute the figure. Stores with high guest-checkout rates need to read repeat-rate alongside BC Guest vs Registered or they’ll mistakenly conclude they have a retention problem.
- Guest 12% repeat is structurally suspicious. Guests should ideally show a 20-30% repeat rate (within email-deduplication accuracy); 12% suggests email-aliasing or typos are inflating the distinct-guest count and depressing the rate. Audit a sample of guest emails: typically 5-15% are duplicates of registered customers (same email, different cookie session creates a guest checkout against an account that exists).
- Subscription stores should target 50%+ on registered. Below 30% on the registered cohort means subscriptions aren’t sticking; investigate first-order experience (delivery time, packaging, product quality) and reach out to lapsed subscribers.
- The 24.7% blended is misleading for retention strategy. A merchant who reads only this card and concludes “I need to invest in retention” might pour budget into loyalty-app spend that won’t move this number, because the bottleneck is guest-to-registered conversion, not retention activity. The actual lever is reducing guest-checkout rate (offer post-purchase account creation, surface guest-order history retrieval, reduce friction in account creation).
- Segment by registered vs guest first. This card alone tells you what; the segmentation tells you why.
- If registered repeat is healthy and blended is below 25%: invest in account-creation conversion, not retention.
- If registered repeat is also low (<35%): the retention problem is real. Look at first-order experience, second-order timing, lapsed-customer reactivation campaigns.
- If POS customers don’t link to web customers, the card under-reports cross-channel repeat. Enable BC POS customer-link feature; expect the rate to jump 3-5 percentage points for stores with strong omnichannel.
- Pair with BC Customer Trend and BC New Customers to see whether the repeat rate is dropping because retention got worse or because new-customer volume rose (mathematical artefact).
Sibling cards merchants should reference together
| Card | Why pair it with Repeat Rate |
|---|---|
| BC Guest vs Registered | The diagnostic for whether repeat rate is structurally under-reported. Stores with >50% guest checkout will see this card depressed regardless of actual retention. |
| Customer Count | The denominator. Repeat rate alone hides whether customer base is growing, shrinking, or stable. |
| New Customers | Inversely related. Rising new-customer volume mechanically depresses repeat rate even if retention is unchanged. |
| BC Customer Trend | Time-series. Track repeat rate movement to see whether changes are recent or long-standing. |
| BC Top Customers | The customers driving the repeat rate. Top 5% of repeat customers typically generate 30-50% of revenue. |
| Order Frequency | The orders-per-repeat-customer metric. Repeat rate × frequency = total customer LTV input. |
| Churn Risk | The forward-looking complement. This card looks at past behaviour; churn risk predicts who’s about to stop being a repeat customer. |
| BC Channel Repeat Rate | Per-channel split. Marketplace channels (Amazon) typically have 5-10% lower repeat than DTC because customers there are buying the marketplace, not the brand. |
| AOV | Repeat customers usually have higher AOV. If your AOV is rising and repeat rate is rising together, retention strategy is working. |
| Klaviyo Email Revenue Share | Cross-connector. Email-driven revenue is overwhelmingly from repeat customers; Klaviyo share correlates strongly with this card. |
| Total Revenue | Always interpret repeat rate as a contributor to revenue. A 5pp increase in repeat rate typically lifts revenue 3-7% over 6 months. |
Reconciling against the vendor’s own dashboard
Where to look in BigCommerce’s own dashboard: The closest native view is BC Control Panel → Analytics → Insights → Customers → Returning Customers (Plus and Enterprise tiers). The “Returning customer rate” metric is BC’s own version of repeat rate; it uses a slightly different denominator definition (customers with any orders in the period regardless of when they joined). For an export, Customers → Customers → Filter: number of orders > 1. For Standard tier (no Insights), use the customer list with the order-count filter and divide manually. Why our number may legitimately differ from the vendor’s:| Reason | Direction | Why |
|---|---|---|
| Customer-identity definition | Either | BC may treat email-only customers (no customer_id) as guests and exclude from repeat-rate; we deduplicate by email. The choice changes the rate by 2-8 percentage points on guest-heavy stores. |
| Window boundary | Either | We use UTC; BC uses store time zone. Edge customers around boundary-day count differently. |
| POS linkage | Ours lower | If POS customers are not linked to web customers in BC POS settings, both we and BC under-count cross-channel repeat. The merchant can fix this in BC POS Settings → Customers. |
| B2B Edition company accounts | Ours higher | If procurement teams share a company account, all their orders contribute to one customer’s count, inflating repeat rate. BC Insights may treat each buyer as a sub-customer; we treat the company account as the customer. |
| Cancelled order treatment | Either | We exclude cancelled orders from per-customer order counts; some BC views include them. A customer with 1 confirmed + 1 cancelled order shows as repeat in BC’s view, single-order in ours. |
| Email casing | Slight gap | We lowercase emails for deduplication; BC’s internal logic varies. Stores with lots of mixed-case email entries see 1-3% gap. |
| Card | Expected relationship | Notes |
|---|---|---|
klaviyo.repeat_purchase_rate | Should match within ±5% on stores using Klaviyo as the customer-data backbone | Klaviyo’s repeat rate uses email-based customer ID universally, no registered/guest distinction. The two cards should converge on stores with strong email-capture at checkout. |
Known limitations / merchant FAQs
My repeat rate dropped 8 points last month, what should I check first? In order: (1) did new-customer volume rise (mathematical dilution), (2) did a Channel Manager integration go live (marketplace customers have lower repeat), (3) was there a major paid-acquisition push (paid-acquisition customers repeat at half the rate of organic), (4) did your loyalty / email program break (Klaviyo flow disabled, abandoned-cart sequence broken), (5) did first-order experience degrade (slower fulfilment, packaging issue). Run BC New Customers and Customer Trend for the same period; if new-customer volume rose proportionally, the dilution is the cause and the underlying repeat behaviour hasn’t changed. What’s a good repeat rate? Wildly category-dependent. Subscription / consumables: 50-65% on registered customers. Apparel / accessories: 25-35%. Furniture / one-off purchases: 8-15%. B2B: 60-80% (procurement is structurally repeat). Compare to your category, not to a global benchmark. Why is my registered-customer repeat rate so much higher than blended? Because guests dilute the figure. A guest who shops once, then comes back as a registered customer the second time, looks like two distinct customers each with one order. The actual person was a repeat buyer; the data shows two non-repeat buyers. Convert guests to registered at the post-purchase moment to capture this signal cleanly. Should I fire a marketing campaign at non-repeat customers? Almost certainly yes. The non-repeat cohort is the highest-leverage retention target on most stores. A 5pp lift in repeat rate via reactivation campaigns is achievable with email re-engagement flows; the lift compounds over 6-12 months. Why does this card show 24% but my Klaviyo dashboard shows 38%? Klaviyo deduplicates customers by email universally (no registered-vs-guest distinction) and uses a 365-day window by default. Different definition, different number. Use Klaviyo for retention strategy decisions; use this card for BC-native ops decisions; reconcile only after aligning windows and definitions. Does this include refunded customers? Yes. A customer who placed two orders and refunded one still counts as repeat. If you want to exclude refund-only customers, use Ask Viq: “show repeat rate excluding customers whose only repeat order was refunded”. My subscription store has 65% repeat rate and the alert still fires, why? The alert threshold is configurable per store. Subscription stores typically set the floor higher (40-45%) because anything below that flags subscription churn. Configure in Settings → Alerts → Repeat Rate Threshold. How does B2B Edition affect this card? B2B Edition orders count normally. If you operate company accounts (multiple buyers percustomer_id), the buyer’s procurement team’s combined activity inflates the repeat rate. For a clean per-buyer view, segment by individual user via Ask Viq.
Can I see repeat rate by acquisition channel?
Yes via Ask Viq: “show repeat rate by first-order channel for last 90 days”. Typical pattern: organic-first customers repeat at 30-40%; paid-first customers repeat at 12-20%; email-first (newsletter signup, then converted) repeat at 35-50%. The split tells you where to invest acquisition spend.
Why does my POS-only customer not show as repeat even though they buy weekly?
BC POS doesn’t always link to web customer records unless the cashier looks up the customer at checkout. Train POS staff to look up customer by email or phone at every transaction; this card jumps 3-5pp on most multi-channel stores after this is enabled.
Does this respect customer-group filtering?
No, it aggregates all groups. Use Ask Viq for filtered views: “repeat rate for customer_group_id 5 over last 90 days”.
My CFO wants annual repeat rate, can I get that?
Yes, change the time window in card settings to 365D. Caveat: 365D repeat is mechanically higher than 90D repeat (more time for the second order to land); compare apples to apples by always using the same window for trend analysis.
The card shows 0% repeat rate, what’s wrong?
Either the date window is too short (a 7D window will show near-zero repeat for most categories), or there’s a data issue with customer_id or email fields not being populated. Check a sample of recent orders to confirm customer_id is populated for registered customers; if blank, BC’s customer creation hook may be misconfigured.