
Shopify Admin Duplicate Customer Finder
- 6 installs
- 173 repo stars
- Updated June 26, 2026
- 40rty-ai/shopify-admin-skills
shopify-admin-duplicate-customer-finder is a read-only Claude Code skill that finds likely duplicate Shopify customer records by matching email, phone, or name combinations.
About
This Claude Code skill scans the Shopify customer database for likely duplicate records using email, phone, and name matching, then reports groups of matching records. A customer-ops user runs it to find duplicates that split order history and skew LTV and marketing segmentation. It is read-only, since Shopify's Admin API has no merge operation, so flagged duplicates must be merged manually in the admin.
- Finds likely duplicate customer records by email, phone, or name matching
- Read-only, exporting a grouped duplicate-customer CSV
- Flags records that split order history and skew LTV and segmentation
Shopify Admin Duplicate Customer Finder by the numbers
- 6 all-time installs (skills.sh)
- Ranked #1,588 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 1, 2026 (Skillselion catalog sync)
shopify-admin-duplicate-customer-finder capabilities & compatibility
Free skill; requires an authenticated Shopify store session with read_customers
- Capabilities
- duplicate detection · customer deduplication · data quality audit
- Use cases
- data analysis
- Runs
- Runs locally
- Pricing
- Free
What shopify-admin-duplicate-customer-finder says it does
Scans the customer database for likely duplicate records using email, phone, and name matching.
Duplicate merging is not supported by the Shopify Admin API — flagged duplicates must be merged manually in Shopify Admin.
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-duplicate-customer-finderAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 6 |
|---|---|
| repo stars | ★ 173 |
| Last updated | June 26, 2026 |
| Repository | 40rty-ai/shopify-admin-skills ↗ |
What it does
Find likely duplicate Shopify customer records so they can be merged manually.
Who is it for?
Customer-ops teams surfacing duplicate records that split order history and skew LTV
Skip if: Merging the duplicates, since Shopify's Admin API has no merge and it must be done manually
When should I use this skill?
You suspect duplicate customer records are fragmenting your data
What you get
Grouped likely-duplicate records ready for a manual merge in Shopify admin.
- duplicate_customers_<date>.csv grouping matched records
By the numbers
- 1 GraphQL operation (customers query)
- 4 match strategies (email, phone, name, all)
Files
Purpose
Scans the customer database for likely duplicate records using email, phone, and name matching. Duplicate customer records cause split order history, incorrect LTV calculations, and incorrect marketing segmentation. Read-only — no mutations.
Prerequisites
- Authenticated Shopify CLI session:
shopify store auth --store <domain> --scopes read_customers - API scopes:
read_customers
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| match_on | string | no | Match strategy: email, phone, name, or all | |
| min_orders | integer | no | 0 | Only flag duplicates where at least one record has this many orders |
| format | string | no | human | Output format: human or json |
Safety
ℹ️ Read-only skill — no mutations are executed. Safe to run at any time. Duplicate merging is not supported by the Shopify Admin API — flagged duplicates must be merged manually in Shopify Admin.
Workflow Steps
1. OPERATION: customers — query Inputs: first: 250, select email, phone, firstName, lastName, numberOfOrders, totalSpentV2, pagination cursor Expected output: All customers with contact and order data; paginate until hasNextPage: false
2. Build in-memory lookup maps:
email → [customer_ids]phone → [customer_ids](ifmatch_onincludes phone)"firstName lastName" → [customer_ids](ifmatch_onincludes name)
3. Report groups with > 1 customer per key as likely duplicates
GraphQL Operations
# customers:query — validated against api_version 2025-01
query CustomersForDeduplication($after: String) {
customers(first: 250, after: $after) {
edges {
node {
id
displayName
firstName
lastName
defaultEmailAddress {
emailAddress
}
phone
numberOfOrders
amountSpent {
amount
currencyCode
}
createdAt
}
}
pageInfo {
hasNextPage
endCursor
}
}
}Session Tracking
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: Duplicate Customer Finder ║
║ Store: <store domain> ║
║ Started: <YYYY-MM-DD HH:MM UTC> ║
╚══════════════════════════════════════════════╝After each step, emit:
[N/TOTAL] <QUERY|MUTATION> <OperationName>
→ Params: <brief summary of key inputs>
→ Result: <count or outcome>On completion, emit:
For format: human (default):
══════════════════════════════════════════════
DUPLICATE CUSTOMER REPORT
Customers scanned: <n>
Duplicate groups found: <n>
Customers affected: <n>
Duplicate groups (sample):
Email: user@example.com
Customer A — <n> orders, $<n> spent, created <date>
Customer B — <n> orders, $<n> spent, created <date>
Output: duplicate_customers_<date>.csv
══════════════════════════════════════════════For format: json, emit:
{
"skill": "duplicate-customer-finder",
"store": "<domain>",
"customers_scanned": 0,
"duplicate_groups": 0,
"customers_affected": 0,
"output_file": "duplicate_customers_<date>.csv"
}Output Format
CSV file duplicate_customers_<YYYY-MM-DD>.csv with columns: duplicate_group_id, match_key, match_type, customer_id, name, email, phone, number_of_orders, total_spent, created_at
Error Handling
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| No duplicates found | Clean customer database | Exit with ✅ no duplicates found |
Best Practices
- Shopify does not provide a native merge API — flagged duplicates must be resolved manually in Shopify Admin (Customers → Merge).
match_on: emailfinds the most reliable duplicates;match_on: nameproduces more false positives (common names).- Prioritize duplicates where at least one record has orders — these affect LTV and marketing segmentation most.
- Common causes of duplicates: guest checkout followed by account creation, manual customer imports, or customers using multiple email addresses.
Related skills
FAQ
Does it merge the duplicates?
No. Shopify's Admin API has no merge, so flagged duplicates must be merged manually in Shopify Admin under Customers, Merge.
Which match strategy is most reliable?
match_on:email finds the most reliable duplicates, while match_on:name produces more false positives.