Pulling Repeat Customer Counts from Shopify Admin
A walkthrough of where Shopify exposes repeat customer counts — the Customers report, Returning customer rate, and the dedupe gotchas that quietly skew your RPR inputs.
Quick answer
Open Shopify Admin → Analytics → Reports → Customers → 'Returning customers'. The headline tile gives you repeat customer count for the selected window. Cross-check it against the 'First-time vs returning customer sales' report — and dedupe guest-checkout emails before feeding the numbers into an RPR calculation.
Pulling Repeat Customer Counts from Shopify Admin
The process of extracting first-time vs returning customer counts from Shopify's native reports for use in repeat-purchase analysis.
Shopify Admin surfaces repeat customer data in three places: the Customers overview, the Returning customer rate report, and the First-time vs returning customer sales report. Each uses a slightly different definition of 'returning' — based on order count tied to a customer record, not a deduped human. Pulling clean counts means choosing the right report for your window, then adjusting for guest-checkout fragmentation and multi-storefront customer records before you plug numbers into a repeat-purchase-rate calculation.
Most teams grab the first number they see in Shopify Admin and divide. That works until your repeat-purchase rate swings 4-6 points month over month for no obvious reason — and the reason is almost always how Shopify counts customers, not how your customers actually behave.
This page covers exactly where the counts live, which report to trust for which question, and the two distortions (guest checkout, multi-store) that you have to correct manually before the numbers are usable.
Where the numbers live in Shopify Admin
Three reports matter. Analytics → Reports → Customers → 'Returning customers' gives you a count of customers who placed two or more orders in the selected date range. The 'Returning customer rate' report expresses that as a percentage. 'First-time vs returning customer sales' splits revenue, not customers — useful for AOV comparisons, not for RPR.
The Customers overview at the top of Shopify Admin shows a lifetime 'returning customer rate' tile. Ignore it for RPR work. It's lifetime-to-date, doesn't respect the window you actually want to measure, and isn't comparable across periods.
Don't use the Customers overview tile
The overview tile is a lifetime number. If you're computing repeat-purchase rate for a 90-day window, you need the Reports → Customers section with date filters applied — not the dashboard tile, which silently includes orders from years ago.
The guest-checkout dedupe problem
Shopify ties orders to a customer record via email. If a shopper checks out as guest with [email protected], then later as [email protected], then later signs up with [email protected] — Shopify treats those as three customers, all first-time.
For apparel and beauty stores where guest checkout is on by default, this typically inflates your first-time customer count by 8-15%. Your repeat-purchase rate therefore reads artificially low. The fix is to export the Customers CSV and dedupe on normalised email (lowercase, strip plus-addressing) before counting.
Shopify's own 'Combine customers' tool inside Admin will merge two records if you spot them manually, but it doesn't run automatically. Most stores carry a meaningful tail of unmerged duplicates unless someone is actively cleaning the database.
How much these distortions actually shift your RPR
Typical RPR distortion from common Shopify counting issues (90-day window, mid-size store)
| Issue | Direction | Typical magnitude | Hardest hit |
|---|---|---|---|
| Guest checkout email fragmentation | Understates RPR | −3 to −6 pts | Apparel, beauty |
| Multi-storefront same customer (Shopify Markets) | Understates RPR | −2 to −4 pts | Cross-border brands |
| Lifetime tile used instead of windowed report | Overstates RPR | +5 to +12 pts | Stores >2 years old |
| Refunded/cancelled orders still counted | Overstates RPR | +1 to +2 pts | High-return categories |
| Subscription auto-renewals counted as repeat | Overstates RPR | +4 to +9 pts | Replenishment SKUs |
A store that reports 22% RPR from the raw Shopify tile and 27% after deduping isn't seeing a 5-point swing — it's seeing the true number for the first time. That's why this step matters before you trust the output of a Repeat Purchase Rate Calculator.
The clean export workflow
Go to Customers → Export, set the date range to your RPR window (see Choosing the RPR Window: 90, 180, or 365 Days for DTC for how to pick), and export 'Customers matching your search' as CSV. Open in a spreadsheet, normalise the email column to lowercase, strip everything between '+' and '@', then count distinct values with orders ≥ 2.
If you run Shopify Markets or multiple storefronts, export each store separately and concatenate before deduping — customers with one order per region look like two first-timers until you merge on normalised email.
Handling subscriptions and refunds
If you sell on subscription, decide upfront whether auto-renewals count as repeat purchases. Most analysts exclude them — a renewal is retention, not a re-decision. Filter the export by order tag or source to remove subscription orders before counting.
Refunded and cancelled orders are still in the export by default. For RPR work, drop any order with financial_status of 'refunded' or fulfillment_status of 'cancelled' — otherwise a customer who bought twice and refunded once shows as repeat when they aren't.
Frequently asked questions
'Returning customers' is an absolute count of customers with 2+ orders in the window. 'Returning customer rate' is that count divided by total customers in the window, expressed as a percentage. For RPR you want both — the count for the numerator, the total for the denominator.
Yes. Shopify creates a customer record on first guest order, keyed by email. If the same person checks out as guest later with a different email casing or a plus-alias, you get a second record and both look like first-time customers.
Export the Customers CSV from each storefront, concatenate them, normalise the email column (lowercase, strip plus-addressing), then count distinct emails with 2+ orders across the combined file. Shopify doesn't dedupe across storefronts natively.
Usually no. A renewal is a passive continuation, not a new purchase decision, so including them inflates RPR and hides whether your one-time buyers actually come back. Filter subscription orders out before counting unless you have a specific reason to include them.
The dashboard tile is lifetime-to-date and ignores your selected date range. The Customers report respects the window. For any windowed RPR calculation, use the report and apply explicit date filters.
Yes — the Customers API returns orders_count per customer, which lets you compute repeat counts programmatically with custom dedupe logic. This is the cleanest option if you're feeding numbers into the Repeat Purchase Rate Calculator on a recurring basis.
Match the window to your category's purchase cycle: 90 days for fast-moving beauty or apparel, 180 days for mixed catalogues, 365 days for considered or seasonal categories. See the precedes-page on choosing the RPR window for category-specific guidance.
No. Repeat means two separate orders. A single order with two line items is one purchase event regardless of basket size. This is the correct behaviour for RPR — re-purchase requires re-decision.
Export the Orders CSV alongside Customers, filter to financial_status ≠ 'refunded' and fulfillment_status ≠ 'cancelled', then recount orders per customer. The Shopify report doesn't let you exclude refunds from the headline count — you have to do it in the export.
It includes all sales channels tied to that store (online store, POS, Buy Button, etc.), so the count is unified within one storefront. Cross-storefront customers still need manual deduping via CSV export and email normalisation.
Get an AI expert review of your site
Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.