CRM Duplicate Cleanup Skill
Find HubSpot and Salesforce duplicate contacts and companies from a CSV export: emails, Gmail aliases, phones, nicknames, Inc/LLC names. Master record, filled blanks, merge files.
View CRM Duplicate Cleanup Skill
Drop in a Mailchimp, Klaviyo, HubSpot or Shopify export and get a clean CSV ready to import, plus a removed list where every row says why it was removed.

Clean an email list on your own machine before you send or import it. Every removal gets a reason. Works as a Claude Code plugin (skill email-list-cleaning) or as a plain command-line tool. Python 3.9+, no dependencies, no account, and the list never leaves your computer.
The screenshot is real output from the kit’s own commands. Tested from a fresh download of this exact zip: ./run_tests.sh ran 15 tests OK on Python 3.13 and 3.10.

python3 -m emailclean clean subscribers.csv --out cleaned/ --suppress unsubscribes.csv --suppress bounces.csv
./demo.sh # runs the bundled example
./run_tests.sh # 15 testsIn Claude Code: install the plugin, then ask "clean subscribers.csv and drop everyone in unsubscribes.csv".
| Flag | Goes to | What it means |
|---|---|---|
| invalid | removed.csv | blank, no @, two @, spaces, bad dots, no domain dot, bad TLD, local part over 64 characters or address over 254 |
| duplicate | removed.csv | same address again (domain and local part compared case-insensitively; first row kept) |
| suppressed | removed.csv | on any --suppress file (CSV with an email column, or one address per line) |
| disposable | removed.csv | domain or parent domain is on the bundled list of 10,181 throwaway domains |
| no_mail_domain | removed.csv | only with --mx: domain has no MX and no A record |
| typo | review.csv | known misspellings (gmial.com, hotmial.com, yahoo.con...). --fix-typos corrects them |
| role | review.csv | info@, sales@, noreply@ and similar. --allow-role keeps them |
| possible_duplicate | review.csv | Gmail dot or +tag variant of an earlier row. --gmail-aliases removes them |
| mx_error | review.csv | only with --mx: the DNS lookup failed (never removed for that alone) |
Output: clean.csv (your original columns, same delimiter), review.csv and removed.csv (plus clean_status, clean_flags, clean_note), and summary.json.
Reads comma, semicolon, tab or pipe CSV, with or without a BOM. Finds the email column automatically ("Email Address", "E-mail", "email"...), or use --column. It also strips mailto: and <>, and keeps international domains like münchen.de as written (checks use punycode).
Zip, 73 KB, v1.0, 16 files. You may use and modify this kit for your own work and for clients you serve, including paid client work. Not affiliated with or endorsed by Mailchimp, Klaviyo, HubSpot or Shopify.
Clean an email list offline: typos, duplicates, disposable domains, role addresses, unsubscribe/bounce suppression and optional MX checks. Reason per row, no per-email fees.
Find HubSpot and Salesforce duplicate contacts and companies from a CSV export: emails, Gmail aliases, phones, nicknames, Inc/LLC names. Master record, filled blanks, merge files.
View CRM Duplicate Cleanup SkillMap old URLs to new ones for a site migration, collapse redirect chains, catch loops, and export 301 rules for Apache, Nginx, Netlify, Vercel, Cloudflare and Shopify.
View 301 Redirect Mapper SkillReconcile Amazon settlement reports (Flat File V2) to bank payouts offline: rows checked against total-amount, balanced journal, profit per SKU, gap and duplicate checks.
View Amazon Settlement Reconciliation Skill