How to find duplicate customers in Shopify by phone or email (2026)
Shopify lets you merge two customer profiles at a time, but its help page does not describe any automatic list of duplicates: you have to find them yourself. The practical way is to export all customers (Customers > Export), normalise emails and phone numbers so that 06 12 34 56 78 and +33 6 12 34 56 78 compare equal, group the rows that share an email, a phone, or a similar name at the same ZIP code, and then merge each group in the Shopify admin. Exact-match duplicates are rare in Shopify because the primary email and phone must be unique; the duplicates you have are variants.
What Shopify offers natively
| Feature | What it does | Limit |
|---|---|---|
| Merge customers (admin) | Combines two profiles: orders, addresses, notes, tags, timeline and more | Two profiles per merge; "repeat the procedure for each additional profile" |
| Duplicate detection | Not described on the merge help page | You choose the two profiles yourself |
| Undo | None | "After the profiles are merged, you can't reverse the process" |
| Customer CSV import | Imports or overwrites customers | Rows with a duplicated email or phone are skipped; only the last one is imported |
Sources: Merging customer profiles, Importing and exporting customer lists.
The merge is blocked when either profile has or had a subscription contract, is a B2B customer linked to a company, has a vaulted card or store credit, uses multipass login, is deleted or redacted, or is already part of a merge or data request in progress. Notes must total 5,000 characters or fewer and tags 250 or fewer across both profiles. Check these before planning a large clean-up: a profile with store credit, for example, cannot be merged at all.
Why your duplicates don't share the exact same email
Because Shopify refuses two customers with the same primary email or phone, duplicates usually look like this:
| Pattern | Example | What catches it |
|---|---|---|
| Gmail dots or +tag | jp.dupont@gmail.com vs jpdupont+shop@gmail.com | Gmail normalisation (Google: dots don't change delivery; +word aliases arrive in the same inbox) |
| Same person, two emails | personal and work address | Same phone, or similar name + same ZIP |
| Phone in the address only | Default Address Phone on one record, Phone on the other | Comparing both phone columns after normalisation |
| Phone format | (415) 555-2671 vs +1 415 555 2671 | E.164 normalisation |
| Name order or initials | DUPONT Jean Pierre vs J.P. Dupont | Word-order-free fuzzy name match + same ZIP |
| Guest checkout vs account | same name and address, no shared email | Similar name + same ZIP or company |
Google documents both Gmail behaviours: "If someone accidentally adds dots to your address when emailing you, you'll still get that email" (Gmail help) and "Just add a plus sign (+) and any word before the @ sign" (Google Workspace help). Apply that rule only to gmail.com and googlemail.com; other providers treat dots differently.
Step by step
- Export. Customers > Export > All customers > "CSV for Excel, Numbers, and other spreadsheet programs". Up to 50 customers download directly; larger exports are emailed to you (Exporting customers).
- Normalise emails. Lowercase, trim, and for Gmail remove dots and everything after
+in the part before@. - Normalise phones. Keep digits only, convert
0033and a leading national0to the country code:06.12.34.56.78→+33612345678. Use theDefault Address Country Codecolumn to pick the country for numbers written without one. Do it for bothPhoneandDefault Address Phone. - Group exact matches. Rows sharing a normalised email or phone are one group. If A shares an email with B and B shares a phone with C, A, B and C are one customer.
- Add fuzzy name matches carefully. Only compare names inside the same ZIP code or the same company, and ignore word order. Two "Marie Martin" in different cities are different people.
- Review each group, then merge in the admin, two profiles at a time, keeping the profile whose email you want to keep.
If you'd rather not build the formulas, Find duplicate Shopify customers does steps 2 to 5 in the browser on the Shopify export and gives you the groups with the reason for each match, a merged CSV, and a "duplicates only" worklist with the original row numbers.
Should you re-import a cleaned CSV instead of merging?
Usually no. The customer CSV import cannot merge existing profiles, and Total Spent and Total Orders are ignored on import; orders cannot be imported through a customer CSV (Importing and exporting customer lists). Order history only moves to the surviving profile through the admin merge. A cleaned file is useful for the email or SMS platform you sync with, for a migration, or as the worklist for the merges.
FAQ
Does Shopify flag duplicate customers automatically? The merge help page describes selecting the two profiles yourself, either from a profile (More actions > Merge customer) or by ticking two customers in the list. It does not describe a duplicates report.
Can I merge more than two customers at once? Not in one step. Shopify's page says to repeat the procedure for each additional profile, so a group of three needs two merges.
Which profile survives a merge? If only one has an email, that one. If both have one, the profile whose email you keep. If neither has one, the profile you selected under "Find a customer to merge with".
Is the customer notified? No. Shopify states the customer isn't notified of the merge.
Can two Shopify customers have the same phone number? Not as their primary phone; apps that try to create one get a "Phone has already been taken" error. The phone inside an address is a separate field, which is why it is worth comparing both columns.