I recently impoprted a large list from Excel that had multiple contacts from the same company. Naturally it created a bunch of duplicates for the company, and I’m aware that it happened because the record didn’t already exisit in my system.
I will be doing large imports like this often, and I wanted to know if there was an easier way than going through a list of a few thousand, finding the duplicate companies, importing them to establish existence in HubSpot, and then doing another import to match the contacts to that company.
Duplicates are a result of missing identifiers. For contacts, it would be a missing Email address, for companies, it would be a missing Company domain name.
When you’re importing multiple objects in one go (contacts + companies) and have both columns in that import, the import itself shouldn’t create duplicates.
Contacts that are in your CRM already will be automatically deduplicated by email address. Companies that exist already might be duplicated as HubSpot isn’t as strict about deduplciated by company domain name. This can only be avoided entirely by first downloading existing companies, cross-referencing export and to-be-imported file and including the exported record ID in the import file where available.
As a general tip, always run smaller test imports (e.g. only 10 rows) before unleashing a large file on your CRM. It’s just an additional 5 minutes to check if everything is going well.
Popping in here because I work for Insycle, thank you @karstenkoehler for the recommendation.
I also wanted to mention that Insycle’s “Magical Import” module lets you use any field as an ID field when importing, so you’ll be able to avoid creating duplicates more often than you would using email or other standard fields alone. For example, Insycle could check phone numbers, websites, addresses, etc. against existing records to ensure that you are not creating a new record when one already exists.
For existing duplicates that have already been imported, Insycle allows you to deduplicate any record type, using any field in your HubSpot CRM as a potential matching field, using either exact match or similar matching. Then, you can set rules for retaining data in the master record on a field-by-field basis to ensure you keep the best possible data in each field during the merge. Then, you can automate those templates to run on a set schedule or even inject them into your Workflows. For example, you could deduplicate contacts immediately after a contact is created and before your first communication with that contact goes out.
One thing worth adding: the dedup behavior is different depending on what object you are importing and whether the contact has an email.
For contacts: With email - HubSpot deduplicates on email address. Import = update if match, create if no match. Without email - No dedup. Every row creates a new contact. This is a silent gotcha that bites people importing trade show leads with missing emails.
For companies: HubSpot deduplicates on company domain (not name). If your companies do not have domain names populated, you will get duplicates even if the company name is identical.
Best practice checklist before any mass import: (1) Ensure every contact row has an email address. (2) Ensure every company row has a domain name (or use Record ID to update existing ones). (3) Do a test import with 5-10 rows first and verify the dedup behavior. (4) In the import mapping step, choose Do Not Overwrite for fields you want to preserve. (5) After import, filter for Create date = today to review what was actually created vs updated.
If you want a visual preview of what will be created vs updated before committing, Emport (emport.io) has a duplicate preview step built into the import flow - really useful for large lists where a single mistake creates hundreds of duplicates.