Customers with no order in 2× their typical cadence. Early-warning for retention spend.
At a glance
The percentage of repeat customers whose latest order is more than 2× their personal average inter-order interval ago. The early-warning signal: customers who should have ordered again by now but haven’t. Targetable for retention spend before they fully lapse.
| What it counts | For each customer with at least 2 orders: compute the personal average inter-order interval (days_between_orders). If days_since_last_order > 2 × personal_avg_interval, the customer is “at risk”. The card returns at_risk_customers ÷ total_repeat_customers × 100. |
| API endpoint | Admin GraphQL. Customer.id, Customer.numberOfOrders, Customer.lastOrderId, Order.createdAt. Computed in OpenSearch from the order index, joined back to customer. |
| First-time customers excluded | A customer with 1 lifetime order has no inter-order interval to compute. Such customers are excluded from both numerator and denominator. They appear instead in New Customers. |
| VAT / tax treatment | Not applicable (count metric). |
| Shipping | Not applicable. |
| Discounts | Not applicable. |
| Refunds | Customers whose orders were fully refunded still count if they were paid orders. The model uses order-placed not order-survived. |
| Cancelled / voided orders | Excluded. Cancelled orders do not contribute to the customer’s inter-order cadence. |
| Currency | Multi-currency safe (count ratio, no FX). |
| Channels / sources | Customer-level metric, channel-blind. A customer who ordered POS once and online once has a valid inter-order interval. |
| Time window | 90D (the at-risk threshold uses the customer’s full history, the 90D window is the snapshot date) |
| Alert trigger | >30% of repeat customers at risk; sustained at-risk share above 30% indicates a retention problem |
| Roles | owner, marketing |
Calculation
Calculated automatically from your Shopify data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
An AU SMB skincare brand on Shopify, 60-day typical replenishment cycle. Snapshot date: 12 May 26.| Customer | Orders to date | Avg interval | Last order | Days since last | At risk? |
|---|---|---|---|---|---|
| Aisha L. | 8 | 58 days | 12 Mar 26 | 61 | No (within 2×) |
| Ben H. | 4 | 70 days | 02 Feb 26 | 99 | No (within 2× = 140) |
| Carla S. | 12 | 32 days | 22 Feb 26 | 79 | YES (79 > 64) |
| Dev R. | 3 | 90 days | 10 Jan 26 | 122 | No (within 2× = 180) |
| Eli T. | 6 | 45 days | 06 Mar 26 | 67 | No (within 2× = 90) |
| Fran K. | 5 | 50 days | 18 Jan 26 | 114 | YES (114 > 100) |
| Gita M. | 9 | 40 days | 14 Mar 26 | 59 | No |
| Hugh B. | 2 | 60 days | 02 Feb 26 | 99 | No (within 2× = 120) |
| … |
>30%).
Five things to notice:
- The threshold is personal, not global. A customer who orders every 30 days is at risk after 60 days; a customer who orders every 120 days is at risk after 240. This catches truly lapsing customers without false-flagging slow-cadence buyers. Industry-blunt churn definitions (“no order in 90 days”) miss the second cohort entirely.
- At-risk share is the alert. The list of 612 at-risk customers is the action list, ranked by historical lifetime value (highest LTV first = most worth saving). A win-back email or SMS targeting the top 200 typically recovers 8 to 15% within 30 days.
- Carla S. is the high-priority save. 12 orders, 32-day cadence, lapsed 79 days = 47 days overdue. She is a power-user pattern; either the brand has a new product issue, or she switched to a competitor. A personal email from the founder (not a discount) often outperforms automated offers for these customers.
- The 33% rate is concerning but not catastrophic. Skincare DTC typically runs 20 to 28% at-risk in steady state. A 33% reading suggests a recent issue: a stockout on a hero SKU, a quality complaint cohort, a price increase, or a competitor launch. Cross-reference Repeat Rate and Order Frequency for the underlying drivers.
- First-time customers are invisible here. The brand may have 800 first-time buyers in the last 90 days but they do not contribute to this card. A growing first-time cohort with rising churn is the classic acquisition-without-retention scenario; pair this card with New Customers to see the full picture.
Sibling cards merchants should reference together
Churn-risk is a leading indicator. Pair with these to find the cause and the targeted save play:| Card | Why pair it with Churn Risk | What the combination tells you |
|---|---|---|
| Repeat Rate | The reverse view, share of customers who did come back. | Falling repeat rate + rising churn risk = retention engine breaking. Same problem from two angles. |
| Order Frequency | Average inter-order interval across the customer base. | A lengthening frequency average is a slower form of the same alert. |
| New Customers | Acquisition counterpart. | Acquisition-without-retention is visible only when both move together: rising new + rising at-risk = leaking bucket. |
| Customer Trend | Net customer movement over time. | If overall customer count is rising but at-risk is rising faster, growth is structurally fragile. |
| Customer Segments | Who is at risk: VIP, mid, low-tier? | VIP at-risk is the highest-priority list. Always sort the at-risk list by LTV before acting. |
| Top Refunded Products | Quality / sizing complaints predict churn. | If at-risk customers’ last orders correlate with high-refund SKUs, that is the cause. |
| Email Health | Can you actually reach these customers? | A 33% at-risk share + 60% bounced-email share = no recovery channel. Fix the email file first. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin: Shopify Admin does not natively compute personal-cadence-based churn risk. The closest views:- Customers → segment by Last order date is more than X days ago and Number of orders is greater than 1. You can build at-risk segments at fixed intervals (60d, 90d, 180d) but they use a global cutoff, not a personal cadence.
- Analytics → Reports → “Customer cohort analysis”: Shopify Plus only. Shows retention by month-of-first-order. Useful as a sanity check on cohort retention; not a per-customer at-risk list.
- Apps like Klaviyo, LoyaltyLion, Yotpo: have native predicted-churn features. Their algorithms use richer signals (browse, email-open, on-site behaviour) than this card. Expect 20 to 40% overlap; treat each as complementary.
| Reason | Direction | Why |
|---|---|---|
| Cadence model | Big difference vs Shopify segments | Shopify Admin uses fixed-day segments (60d, 90d). This card uses personal 2× cadence. The two definitions intersect but do not match; expect 30 to 60% overlap with any single Shopify segment. |
| First-time exclusion | Ours lower numerator | This card excludes 1-order customers (no cadence to compute). Shopify segments include them. |
| Cancelled order treatment | Ours slightly different | The card excludes cancelled orders from the cadence calc. Shopify Admin includes order-placed events regardless. |
| Customer merging | Either | If a customer placed orders under two different email addresses and Shopify hasn’t merged them, both this card and Shopify see two separate customers (each invisible to the other’s cadence). |
| Time zone | Boundary days | Daily snapshot uses store time zone; orders near the snapshot boundary may bucket differently from Shopify. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
klaviyo.klaviyo_inactive_subscribers | Strong overlap; different inputs | Klaviyo’s churn model uses email-engagement decay, this card uses purchase-cadence. Customers who open emails but stop buying appear here, not in Klaviyo’s signal, and vice versa. |
google_analytics.ga_returning_users | Inverse signal (fewer returning users implies more churn) | GA4 sees returning visits not returning buyers. A churned customer can still browse without buying. |
Known limitations / merchant FAQs
Why is the at-risk percentage rising? Three usual causes:- Cohort coming due. A successful acquisition wave 3 to 6 months ago means a wave of repeat-customers is now hitting their personal 2× threshold. Mechanical, not a problem unless the wave is fully lapsing.
- Quality / experience issue. A complaint cohort, a recent stockout on a hero SKU, a price increase, or a competitor launch is driving customers away. Cross-reference Top Refunded Products.
- Email-channel decay. Win-back campaigns are not landing because the email file is decayed (high bounce, low open). Pair with Email Health.
days_since_last_order > 2 × personal_avg_inter_order_interval. This personalises the threshold per customer. A 30-day-cadence customer becomes at risk at 60 days; a 180-day-cadence customer becomes at risk at 360 days.
Why are first-time customers excluded?
A customer with one lifetime order has no inter-order interval to compute. Including them would force a global default (e.g. 90 days) and dilute the personal-cadence value of the metric. First-time customers are tracked in New Customers; their retention is best measured via cohort analysis once they have a second order.
My subscription store, does this card work?
Yes, well. Subscription customers have very tight cadence (30 / 60 / 90 day plans) so their 2× threshold is precise. A subscription customer 75 days past their 60-day cadence is a 25-day overdue cancellation in disguise. Subscription stores often see the at-risk rate spike right after a billing failure cohort.
Multi-channel: do POS-only customers appear?
Yes, if they have a customer record. Shopify creates customer records for both online and POS purchases. A POS-only customer with multiple visits has a valid cadence. The card is channel-blind.
B2B vs DTC?
B2B cadence is structurally longer (90 to 365 days between orders) and lumpier. The 2× rule still works (a 180-day-cadence B2B customer is at risk at 360 days) but the at-risk list is smaller and individually more valuable. For B2B-heavy stores, sort the at-risk list by LTV and act on the top 20 manually rather than running a generic win-back campaign.
Multi-currency, any impact?
None on the at-risk computation (which uses dates, not currency). The save-play economics differ by region: a £15 win-back voucher is meaningful in the UK, less so in the US, and may not even cover acquisition cost in some markets. Tune the offer per region.
Shopify Plus vs basic?
No definitional difference. Plus stores typically have richer customer-history depth (longer-tenure customers, multiple stores via Shopify Plus organizations). The card behaves identically; the at-risk list on Plus stores is often longer and higher-LTV.
Refresh cadence?
Daily snapshot. The personal-cadence calculation is expensive (per-customer computation across full order history) so the card refreshes once per 24 hours. Real-time variant is on the roadmap.
The card alerted, what should I do?
- Sort the at-risk list by LTV (highest first).
- For the top 5%, send a personal email from the founder or account manager. No discount; ask why they have not been back.
- For the next 20%, send a 15-20% win-back voucher with a 14-day expiry.
- For the long tail, run an automated win-back flow (Klaviyo, Mailchimp, native Shopify Email).
- Measure recovery rate at 30 / 60 / 90 days. Industry-typical is 8 to 15% reactivation on the targeted top tier.
- Diagnose the root cause: stockout, quality complaint, price increase, competitor. Fix the input, not just the symptom.