One contacts export becomes duplicate groups with a reason each, a merge plan with the master record and filled blanks, a conflicts list, and a cleaned file with normalised emails, phones and names.
Who it is for: Sales ops person, founder or agency running HubSpot, Salesforce, Zoho CRM or Pipedrive with a few hundred to tens of thousands of contacts that were imported, synced and typed in by several people.
Format: Claude skill pack · Version: 1.0.1 · Tested on: Python 3.13.5 (standard library only)
What it does
It finds the header row in most CRM exports and reads names (splitting a full-name column when needed), emails, phones, company, website, owner and last-modified date. Emails are lower-cased and checked; Gmail dots and +tags count as the same inbox. Phones become +country numbers using your default country. Records are grouped when they share an email, or share a phone and have similar names (so a shared office line does not merge two people), or have a very similar name or an initial plus the same surname at the same company or domain. In each group the master is the most complete record (or newest/oldest), blanks are filled from the others, and fields that still differ are listed as conflicts.
What you need
- Claude.ai with code execution switched on (or Claude Code, or just Python 3.10+)
- A contacts export from your CRM (Export in the contacts list view)
- Permission in your CRM to merge records
5-minute setup
- Claude.ai: open Settings → Capabilities → Skills, click Upload skill and pick
claude-ai-upload/crm-dedupe-fixer-pro.zip. - Claude Code: copy the folder
skills/crm-dedupe-fixer-prointo~/.claude/skills/. - Start a new chat. Attach your file and say: "Use crm-dedupe-fixer-pro. Find the duplicates in this HubSpot contacts export, phones are Indian, keep the most complete record".
- Claude runs the script and gives you the files listed under Outputs. Check them before you act on them.
Try it with the sample
Run the sample (a fictional HubSpot-style export of 14 contacts):
python3 skills/crm-dedupe-fixer-pro/scripts/core.py --export samples/hubspot-contacts-export.csv --country IN --out out
You should see 3 duplicate groups covering 7 records (10 after merging), 4 conflicts, 1 invalid email and 1 role address. In Claude, attach your export and use the prompt above.
Settings you can change
| Option | Default | What it is |
|---|---|---|
--export |
(required) |
Contacts export CSV/XLSX from HubSpot, Salesforce, Zoho CRM, Pipedrive or a spreadsheet |
--country |
IN |
Default country for phone numbers without a + code (IN, US, GB, AU, AE, SG, DE, FR, NZ, ZA, CA) |
--master |
most-complete |
Which record wins a merge: most-complete, newest or oldest |
--threshold |
0.88 |
Name similarity needed for same-company matches (0.70-1.00) |
--no-fuzzy |
(off) |
Only group exact email or phone matches |
--no-phone |
(off) |
Do not group on phone numbers |
--dot-domains |
gmail.com,googlemail.com |
Email domains that ignore dots in the name part |
--out |
out |
Output folder |
What goes in and what comes out
Inputs: Contacts export CSV or XLSX (HubSpot, Salesforce, Zoho CRM, Pipedrive or any sheet with name and email or phone); Default country for phone numbers; Optional: master rule, name threshold, exact-only mode
Outputs: report.md with counts, groups and reasons; duplicate-groups.csv and merge-plan.csv (master record_id + ids to merge); conflicts.csv (fields that differ inside a group); cleaned-contacts.csv and fixes.csv (before/after for every formatting fix)
AI disclosure and limits
This product does not call an AI model at run time. It was built by Oarsman AI's AI agents and checked by the automated tests shipped with it.
Limits: - Contacts only; companies, deals and leads exports are not deduplicated. - Does not merge in your CRM; you merge each group with the CRM's own merge tool. - Name-based groups are suggestions; check them before merging. - Phone normalising knows 11 country codes; others need a + in the number. - Up to 50,000 records per run.
Not tested by us: - a live merge in HubSpot, Salesforce, Zoho CRM or Pipedrive - XLSX exports in the shipped tests (CSV only) - exports with non-Latin names
Files
- oarsman-crm-dedupe-fixer-pro-v1.0.1.zip
- CHANGELOG.md
- QA-REPORT.json
- README.md
- SPEC.md
- SUPPORT.md
- TROUBLESHOOTING.md
- VERSION
- VIDEO-SCRIPT.md
- claude-ai-upload
- diagram.mmd
- diagram.png
- preview.png
- samples
- skills
- tests
Help
Self-serve: see TROUBLESHOOTING.md (fixes and FAQ). There is no call, chat or email support. Fixes ship as new versions at your download link. Refund: 14 days, works as described, through the checkout platform.