Remove Duplicate CRM Contacts Safely
Deleting every later row with the same email is fast and wrong: sometimes the later row holds the phone number the first one lacks. This example shows a safer rule, and where rules stop.
What Usually Goes Wrong
โข Exact repeats from importing the same file twice
โข A second row for the same email that is only a partial copy
โข Two rows for the same email with different phone numbers
โข The same person under two different email addresses
โข Email addresses that differ only in capitalization
The Sample File, Before
9 rows of fictional data with the problems above. Every person and company is invented.
Open This File in the Workspace Download the CSV
| Contact ID | Name | Phone | Company | Owner | |
|---|---|---|---|---|---|
| C-1001 | Noor Haddad | noor.haddad@pellam-example.com | +12025550111 | Pellam Example Inc | Jordan |
| C-1002 | Oskar Nyberg | oskar@nyberg-example.se | +46855501222 | Nyberg Example AB | Jordan |
| C-1001 | Noor Haddad | noor.haddad@pellam-example.com | +12025550111 | Pellam Example Inc | Jordan |
| C-1003 | Leila Farrokh | leila@farrokh-example.com | +13105550133 | Farrokh Example LLC | Sam |
| C-1004 | Leila Farrokh | LEILA@farrokh-example.com | +13105550199 | Farrokh Example LLC | Sam |
| C-1005 | Ben Achterberg | ben@achterberg-example.nl | Achterberg Example BV | Sam | |
| C-1006 | Ben Achterberg | ben@achterberg-example.nl | +31205550144 | Achterberg Example BV | Sam |
| C-1007 | Grace Oduya | grace.oduya@example.com | +12125550155 | Oduya Example Co | Jordan |
| C-1008 | Grace Oduya | g.oduya@oduya-example.com | +12125550155 | Oduya Example Co | Jordan |
How to Clean It
1. Export the contacts with their record IDs and keep an untouched copy.
2. Run the file with exact-duplicate removal, lowercase emails and Merge duplicate emails.
3. Read the review list. Every pair that shares an email but disagrees is listed with the column that differs.
4. Decide each conflict yourself, in the Review step of the workspace or in your CRM's merge screen.
5. Use the change log to delete or merge the matching records in the CRM by their IDs.
Prefer the command line or an AI agent? The same result comes from smartdata-clean clean duplicate-crm-contacts.csv --dedupe-rows --lower-emails --merge-duplicate-emails. See tools for agents.
The Result
9 rows in, 1 removed, 8 out. Only the exact repeat is removed. Every other pair is kept, because each row has its own Contact ID and so holds something the other does not. That is the honest result for an export with record IDs: the tool finds the pairs and the differing columns, and you merge them in the CRM. It does not notice Grace Oduya under two different email addresses at all โ matching people by name is guesswork that rules should not do silently.
| Contact ID | Name | Phone | Company | Owner | |
|---|---|---|---|---|---|
| C-1001 | Noor Haddad | noor.haddad@pellam-example.com | +12025550111 | Pellam Example Inc | Jordan |
| C-1002 | Oskar Nyberg | oskar@nyberg-example.se | +46855501222 | Nyberg Example AB | Jordan |
| C-1003 | Leila Farrokh | leila@farrokh-example.com | +13105550133 | Farrokh Example LLC | Sam |
| C-1004 | Leila Farrokh | leila@farrokh-example.com | +13105550199 | Farrokh Example LLC | Sam |
| C-1005 | Ben Achterberg | ben@achterberg-example.nl | Achterberg Example BV | Sam | |
| C-1006 | Ben Achterberg | ben@achterberg-example.nl | +31205550144 | Achterberg Example BV | Sam |
| C-1007 | Grace Oduya | grace.oduya@example.com | +12125550155 | Oduya Example Co | Jordan |
| C-1008 | Grace Oduya | g.oduya@oduya-example.com | +12125550155 | Oduya Example Co | Jordan |
What the tool left for you
The tool listed these 2 items for a person to check:
โข Row 6 shares an email with row 5 but has different Contact ID, Phone. Both rows were kept. Decide which is right.
โข Row 7 shares an email with row 8 but has different Contact ID. Both rows were kept. Decide which is right.
Checked, not just claimed
The original file, the cleaned file and the change log were run through the separate verifier. Result: PASS.
โ Removed rows with a valid, verified reason: 1 of 1
โ Rows: 9 in, 1 removed with a logged reason, 8 out
โ Cells compared: 48; changed: 1; every change matched to the log: yes
โ Log entries: 2; not matching the files: 0
The verifier confirms that the change log explains every difference between the two files. It does not judge whether each cleaning choice suits your situation; that part is yours.
The cleaning report
Where a Tool Stops and a Person Starts
Fuzzy matching (same person, different email or a misspelled name), choosing a surviving record, and merging inside the CRM so history is kept are manual review work. That is the Complex Cleanup service.
See Service Levels From $19 How We Check Our Work
If your export has a record ID column, no two rows are ever identical in every cell except true double imports. Remove the ID column first if you want rows compared on contact details alone โ and keep a copy that still has it.