At a glance
Percentage of customers who placed more than one order during the rolling 90-day window. Defined as COUNT(customers WITH 2+ orders in window) ÷ COUNT(customers in window) × 100. Headline retention KPI. Industry-typical: 25-40% for DTC, 50-80% for B2B-leaning Adobe stores.
Calculation
Worked example
A B2B+DTC industrial-supplies merchant on Adobe Commerce 2.4.7. 90-day rolling, 14,420 orders, 9,820 distinct customers/companies (after Company aggregation). Customer-level repeat:
Comparison to prior 90 days:
Insight pattern:
- Headline 26.9% is just above the 25% floor. Healthy for a B2B+DTC mix. Below 25% would have triggered the sentiment alert.
- DTC repeat at 21.1% drags the headline down. This is the lever to pull, post-purchase email flows, second-order incentives, replenishment-product subscriptions.
- B2B repeat at 69.5% is healthy but should be 80%+ for industrial-supplies (where buyers reorder consumables). The 20-30% non-repeat B2B Companies are either: (a) one-off purchasers, (b) accounts that went silent (cross-link with B2B Account Silence), or (c) accounts that re-routed to a different supplier.
- VIP Customer Group at 92% is the loyalty cohort working as designed. Use this as the upper-bound benchmark.
- Guest 6% repeat is low because of email-dedup caveat. A guest using multiple emails appears as multiple “1 order” customers. The actual same-person repeat rate among guests is closer to 12-15%; the card under-counts.
- Improvement of +2.7 pp over the prior period suggests retention work is landing. Cross-link with
klaviyo.flow_revenue_sharefor email-flow attribution. - Cross-link with Customer Order Frequency for the per-bucket distribution that this rate is the headline of.
Sibling cards merchants should reference together
Reconciling against the vendor’s own dashboard
Where to look in Adobe Commerce Admin:Reports > Customers > Customers by Number of Orders. Lifetime view of repeat behaviour. Lifetime ≠ in-period; use as a directional check.For the in-period customer set:
Sales > Orders filtered to the period; export to CSV; group by Customer Email; count distinct emails with 2+ orders. Compare to total distinct emails. Tedious; the card is faster.
For B2B Companies:
Customers > Companies > [Company] > Orders tab for each Company. Manual, only practical for spot-checks.Why our number may legitimately differ from a manual Admin computation:
Internal identity:
repeat_rate = COUNT(customers in period WITH 2+ orders) ÷ COUNT(customers in period) × 100
Component cards (self-consistency):
adobe_commerce.customer_countadobe_commerce.order_frequency(sum of “2 orders” + “3-5” + “6-10” + “11+” buckets ÷ total = repeat rate)
Known limitations / merchant FAQs
My DTC repeat rate is 21%, is that bad? Below the 25% Tier-1 floor, yes. DTC ecommerce typically should run 25-40%. Below 25% suggests acquisition is winning new customers but they’re not coming back, classic “leaky bucket” growth. Investigate post-purchase email flows, second-order incentive thresholds, and product-quality (refund rate, NPS). B2B repeat at 70% but I think it should be higher, why? Two main causes: (1) Companies that went silent (cross-link B2B Account Silence); (2) buyers within a Company who place once-per-quarter, falling outside the 90-day window. For B2B-heavy industrial supply, target 80%+. UseCompany aggregation toggle for the right number.
Why use 90 days and not 30 or 365?
30 days under-counts repeat (not enough time for a second purchase). 365 days over-counts (includes anyone who bought 11 months ago who may have churned by now). 90 days is the marketing-standard balance for ecommerce.
Guest dedup is undercounting my repeat rate, can I fix?
Vortex IQ supports identity-resolution as an opt-in feature: matches guests by IP + credit-card-fingerprint + email-similarity to dedupe. Adds 5-10 percentage points to most merchants’ apparent repeat rate. Contact support to enable.
Wholesale Customer Group at 78% repeat, should we leave it?
B2B Wholesale should approach 90%+ for healthy retention. 78% means ~20% of Wholesale accounts didn’t repeat in 90 days, that’s a churn risk. Cross-link with B2B Account Silence for the at-risk list.
A customer placed 1 order, refunded the next day, do they count as 1 or 0 customers?
1 customer (they ordered). They count for 1 in the denominator. If they later return for a 2nd order, they’d count for the numerator (2+ orders). Refund is a creation-time event; this card uses creation-time identity.
My multi-store, can I see repeat per Store View?
Yes. Filter by store_id. UK and US have very different repeat patterns (UK B2B-heavy, US DTC-heavy in this hypothetical).
Why does the rate sometimes go down day-to-day?
The denominator includes new customers who are inherently “1 order” until they return. A burst of new acquisition (e.g. a successful PR placement) deflates the rate temporarily. Use 7-day rolling on the rate itself for trend; the underlying retention behaviour didn’t change.
Klaviyo says my repeat rate is 35%, this card says 26.9%, gap?
Klaviyo computes repeat from placed_order events; if event sync from Adobe to Klaviyo is incomplete, Klaviyo sees fewer customers and inflates the rate. Or Klaviyo uses a different window. The card uses Adobe’s order index directly, more reliable.
Cancelled-only customers, are they “real”?
A customer who only ever placed cancelled orders (no captured) is debatable. The card includes them by default in the denominator, which slightly deflates the rate. Toggle to exclude for “captured-only” view; usually changes the rate by <1 pp.