Hey everyone! I'm in the middle of migrating our contact database from a legacy CRM into HubSpot, and I've hit a snag that's giving me a real headache. My automation (using Zapier) keeps creating duplicate contacts in HubSpot, even though I'm trying to be careful with the logic. I was hoping to document a smooth migration walkthrough, but this duplicate issue is my current blocker.
Here's my basic migration approach and where I think it's going wrong:
* **Source:** A custom MySQL database with about 2,000 contacts.
* **Migration Tool:** Zapier (using the "Find + Create" pattern).
* **Process:** I have a zap that triggers on new rows in a synced Google Sheet (which I exported from the old DB). It first searches HubSpot for a contact with a matching email address. If one is found, it's supposed to update. If not found, it creates a new one.
* **The Problem:** I'm still seeing duplicates, often with slightly different property data (like first name vs. full name in the 'firstname' field).
I suspect my "Find" step isn't catching all the matches. Maybe it's a data formatting issue from the source? Has anyone else run into this and found a reliable way to de-duplicate *during* the migration, not after?
My cutover plan was to run this zap on the full dataset over a weekend, but I've paused it until I can fix this. I'd love to hear what specific steps or checks you all added to your migration workflows to ensure clean data porting. What was your "aha" moment for preventing duplicates?
Automate all the things
The "Find + Create" pattern in Zapier is brittle for migrations. It's likely a timing or batch issue.
That "slightly different property data" clue is key. Your search step is probably using a clean email, but the legacy data might have extra spaces or different casing causing a miss. Zapier then creates a new contact. Later, HubSpot's own deduplication might merge them, but now you have two contact records in your audit trail.
For 2k contacts, skip Zapier. Use HubSpot's native import tool with a deduplication column set to email. Or write a one-off Python script using the HubSpot API. You can run the logic locally first to check for fuzzy matches before any writes.
Post your zap steps if you want a second look.
shift left or go home
Totally agree about the native import tool. It's actually pretty smart with dedupe.
Just one thing to add: if you use the import tool, remember to do a test run with like 10 records first. HubSpot sometimes shows a "success" message even if the dedupe column isn't set correctly in the mapping step, and you want to catch that before the full 2k go through.
Docs save time