How to Find Duplicate Customers in Shopify

By The Twinfold teamPublished 7 min read
Short answer

Shopify has no built-in duplicate detection, so you find duplicates yourself. Export all customers from Customers > Export, then normalize emails (lowercase, strip +tags, remove Gmail dots), phone numbers and name plus address, and count repeated keys in a spreadsheet. Because Shopify requires each customer's email and phone to be unique, real duplicates never share an exact email.

Key takeaways
  • Shopify's admin doesn't detect or flag duplicate customer profiles; it only lets you merge two profiles once you've found them.
  • Shopify treats a customer's email and phone as unique, so duplicate profiles for one person always differ in the exact email or phone, or are missing one.
  • The most reliable manual method is a full customer CSV export from Customers > Export, plus normalized match keys counted in a spreadsheet.
  • Normalizing emails means lowercasing, removing a +tag, and removing dots from Gmail addresses before you compare them.
  • Ignore match keys shared by many profiles, such as your store's own address on POS sales, because they connect strangers.

To find duplicate customers in Shopify, you have to look for them yourself: the admin doesn't flag them. The dependable method is to export every customer from Customers > Export, build a few normalized match keys (email, phone, name plus address) in a spreadsheet, and count which keys repeat. For a quick check on one person, the merge search box and customer segments help, but neither compares profiles against each other.

This guide explains what a Shopify duplicate actually looks like, then walks through three ways to find them, from a two-minute spot check to a full-list audit.

Does Shopify find duplicate customers for you?

No. Shopify's help documentation says plainly that you "might have two or more customer profiles that refer to one customer," and then explains how to merge them. Nothing in the admin lists likely duplicates, scores them, or warns you when a new profile looks like an existing one.

The native merge assumes you already know both profiles. In Customers > [customer] > More actions > Merge customer, you search for the second profile under Find a customer to merge with, by first name, last name, email, phone number or credit card number. Finding the pairs is left to you.

What does a duplicate customer look like in Shopify?

A duplicate is two or more profiles for one person that don't share an exact email or phone number. That second part is the key to finding them.

Shopify's GraphQL Admin API describes a customer's email as "the unique email address of the customer" and the phone as "the unique phone number for the customer." The customer CSV import follows the same rule: rows with a repeated email or phone are skipped. So you will never find two profiles with the identical email jane@example.com. Duplicates hide behind small differences instead:

PatternProfile AProfile BHow to catch it
CapitalizationJane@Example.comjane@example.comCompare emails in lowercase
Plus addressjane+shop@example.comjane@example.comRemove everything from "+" to "@"
Gmail dotsjane.doe@gmail.comjanedoe@gmail.comRemove dots before @gmail.com (Gmail ignores them)
Two real addressesjane@work.comjane@home.comMatch on phone, or name plus address
No email at alljane@example.com(blank, phone only)Match the phone, including the address phone
Phone in two placesPhone: +1 555 010 0100Default address phone: (555) 010-0100Compare digits only, across both phone fields

Whether Shopify itself already treats differently capitalized emails as the same address isn't something its docs spell out, so normalize anyway. It costs nothing and catches the cases that slip through.

How to spot-check a single customer

When a customer writes in about missing order history, you only need to check one person.

  1. In Shopify admin, go to Customers and open the profile they're using now.
  2. Click More actions > Merge customer.
  3. In Find a customer to merge with, search by their last name, then by their phone number, then by the part of their email before the @.
  4. If a second profile turns up, compare orders, addresses and notes before you decide anything.
  5. If it's really them, review the Merged customer section and merge. If you're unsure, click away; nothing changes until you confirm.

Searching the surname alone is often the fastest test, because a typo in an email doesn't change the name. The full merge procedure, and what moves to the surviving profile, is covered in how to merge duplicate customers in Shopify.

How to narrow the list with customer segments

Segments can't compare profiles, but they can shrink a big list to the profiles most likely to be duplicates. On the Customers page, filters are written as a ShopifyQL WHERE clause, and Shopify's segment reference documents the filters below.

GoalSegment filter
Profiles that never ordered (often leftovers from a sign-up, a newsletter form or an import)first_order_date IS NULL
Profiles created during a migration or import windowcustomer_added_date BETWEEN 2026-03-01 AND 2026-03-07
Profiles with no email address at allcustomer_email_domain IS NULL
Customers who bought in person through POSorders_placed MATCHES (app_id = 129785)
One city at a time, to scan names by eyecustomer_cities CONTAINS 'US-NY-NewYorkCity'

The POS filter uses the app ID Shopify's own example gives for Shopify POS. A useful combination is "no orders" plus "added during the import week": those profiles are often a second record of someone who already existed. Segments don't offer a phone number filter, so phone-based duplicates still need the export method below.

Once a segment looks right, you can export just those customers from Export, which offers the number of customers matching your filters as an option.

How to find duplicate customers with a CSV export

This is the method that finds duplicates across the whole list. It takes about half an hour the first time and works in Google Sheets or Excel.

1. Export every customer

  1. Go to Customers and click Export.
  2. Choose All customers.
  3. Choose Plain CSV file (or CSV for Excel, Numbers, and other spreadsheet programs if you'll open it in Excel).
  4. Click Export customers.

Exports of up to 50 customers download in the browser. Anything larger is emailed to you, and also to the store owner if that isn't you. The file limit is 15 MB. The columns you'll use are First Name, Last Name, Email, Default Address Address1, Default Address Zip, Default Address Phone, Phone and Total Orders.

2. Build three match keys

Add four helper columns after the last column of the export (U, V, W and X below). The formulas are for Google Sheets and assume the column order Shopify's help page lists: First Name in A, Last Name in B, Email in C, Default Address Address1 in F, Default Address Zip in K, Default Address Phone in L and Phone in M. Check your header row and adjust the letters if yours differs.

  • Email key (U). Lowercase it, drop a plus tag, and drop dots for Gmail: =IF(C2="","",IF(REGEXMATCH(LOWER(C2),"@(gmail|googlemail)\.com$"),SUBSTITUTE(REGEXREPLACE(LOWER(REGEXEXTRACT(C2,"^[^@]+")),"\+.*",""),".","")&"@gmail.com",REGEXREPLACE(LOWER(TRIM(C2)),"\+[^@]*@","@")))
  • Phone key (V). Digits only, last 10 digits, so +1 (555) 010-0100 and 5550100100 match: =IF(M2="","",RIGHT(REGEXREPLACE(M2&"","[^0-9]",""),10)) Make a second phone key in W from Default Address Phone (column L) the same way. A phone saved on one profile's address often turns up as the main phone of another.
  • Name and address key (X). Lowercase and trimmed, joined with a separator, and left blank when there's no address so that address-less customers don't all match each other: =IF(F2="","",LOWER(TRIM(A2)&" "&TRIM(B2)&"|"&TRIM(F2)&"|"&TRIM(K2)))

3. Count repeats

Next to each key, count how often it appears. For the email key: =IF(U2="","",COUNTIF(U:U,U2)), and the same pattern for X. For phones, count against both phone columns so a match across fields is caught: =IF(V2="","",COUNTIF(V:V,V2)+COUNTIF(W:W,V2)). A profile whose own phone and address phone are the same number also scores 2 here, so check that the rows in a group are different customers. Filter to counts of 2 or more and sort by the key, so each group sits together.

4. Throw out keys that glue strangers together

Some values legitimately appear on many profiles. If your POS staff type the store's own address or phone for walk-in customers, every one of those profiles shares a key. As a rule of thumb, any key shared by more than about 20 profiles is almost never one person; set those aside instead of merging them.

5. Rank what's left

MatchHow sure you can beWhat to do
Same email keyHighMerge after a quick look
Same phone key and same last nameHighMerge after a quick look
Same name and address keyMediumCheck orders and email before merging
Same phone, different namesLowUsually a household or a shared business line; leave it
Same name onlyLowNot enough evidence on its own

Then merge the confirmed pairs in Shopify. A merge can't be reversed, so the export you just made doubles as your backup of how the profiles looked before.

How often should you check for duplicates?

Check after any event that creates profiles in bulk, and on a routine otherwise. The big sources are customer imports and migrations, a store that sells both online and through POS, and newsletter or sign-up forms that create a profile without an order. Quarterly suits most stores. A store running heavy POS sales or frequent imports may want a monthly pass.

Keep the previous export. Comparing this quarter's duplicate groups with last quarter's tells you whether a source, like a particular POS location or a form, keeps producing new ones.

How Twinfold helps

Twinfold is a Shopify app by NewClick (independent, not made by Shopify) that runs this whole audit for you. Scan for duplicates reads your full customer list through Shopify's bulk export, and scanning is free on every plan.

It applies the same three keys from this guide: Email variant (lowercased, "+tag" removed, Gmail dots removed), Same phone (one profile's phone found on another profile's address, with matching names), and Same name and address. Each group shows "Why they match" and a High, Medium or Low confidence rating, and values shared by more than 20 customers are ignored. Low-confidence groups and groups of more than 10 profiles go to Review manually. When you're ready, every merge is previewed with Shopify before you confirm, and you can mark a group Not duplicates so it doesn't come back on the next scan.

Whichever route you take, finding duplicates is the slow part. Once you have a ranked list, the merging itself is the easy, deliberate step.

Frequently asked questions

Does Shopify have a duplicate customer finder?

No. Shopify's help documentation acknowledges that one customer can end up with two or more profiles and explains how to merge them, but the admin doesn't list or flag likely duplicates. You find them with search, segments, a CSV export, or an app that scans the customer list.

Can two Shopify customers have the same email address?

No. Shopify's GraphQL Admin API describes a customer's email as unique and its phone number as unique, and the customer CSV import skips rows whose email or phone repeats. That's why duplicates show up as near-matches, like a capitalized or plus-tagged email, rather than exact copies.

How many customers can I export from Shopify at once?

You can export all customers in one file, up to 15 MB. Exports of 50 customers or fewer download in your browser. Larger exports are emailed to you, and to the store owner if you aren't the owner, so expect a short wait for a big list.

Can a customer segment show duplicate customers?

Not directly. Segments filter customers by attributes like email domain, city, tags or order count, and they can't compare one profile with another. They are useful for narrowing the list, for example to customers with no orders or customers added during an import, which you then check by search or export.

Should I delete duplicate customers I find?

Usually merge them instead. A merge moves the orders, draft orders, addresses, notes and tags onto one profile, so the person's full history ends up in one place. Check that each pair is really one person first, because Shopify can't undo a merge.

Sources

  1. Shopify Help Center: Merging customer profiles
  2. Shopify Help Center: Importing and exporting customers
  3. Shopify Help Center: Shopify-based customer segment filters
  4. Shopify.dev: CustomerInput (GraphQL Admin API)