The short answer: Most HubSpot import problems come from rows HubSpot can't match to an existing record, because they have no Email, Company domain name, or Record ID, and from mapping choices made in the import wizard. Fix them by adding identifiers to every row, choosing the right import mode, and testing a small batch before you load the full file.
| Symptom | Likely cause | Fix |
|---|---|---|
| Duplicate contacts | Rows had no Email or Record ID | Add Record IDs for existing contacts before import |
| Duplicate companies | Rows had a company name but no domain | Add a clean Company domain name or Record ID |
| Contacts not on their company | Row missing an identifier for one of the two objects | Put identifiers for both objects on every row |
| Updated when you meant to create, or the reverse | Wrong import mode, or Record IDs in the file | Pick create only, update only, or create and update deliberately |
| Good data overwritten | Every column was mapped | Skip columns, or use Don't overwrite |
| Rows failed | Values HubSpot couldn't parse | Download the error file and fix each reason |
How HubSpot decides whether a row is new or existing
Every problem below traces back to one mechanic. On import, HubSpot matches contacts by Email or Record ID, and companies by Company domain name or Record ID. If a row has none of those, HubSpot has nothing to compare it to and creates a new record. HubSpot's documentation says it directly: without Email or another unique identifier, each row is imported as a new contact.
Vendor files and partner lists are full of rows like that, so in practice they fall through and become duplicates. Quill matches every row of a file to your existing records before it reaches HubSpot, but you can do the same work by hand with the steps below.
Why did my HubSpot import create duplicate contacts?
Cause. The duplicated rows either had no email, or had an email that doesn't match the one on the existing contact. There is one more trap: if you include a Record ID column, any row where that column is blank creates a new record.
Fix.
- Export your HubSpot contacts with Record ID, first name, last name, email, and company.
- In the import file, look up each row that has no email by last name and company, then confirm the first name.
- Paste the Record ID onto each confident match. Record ID supersedes any other identifier in the file, so the row updates that contact.
- Keep uncertain matches in a separate tab for a person to review.
- Merge the duplicates that were already created. Check the merge preview carefully, because HubSpot doesn't let you unmerge records.
Prevent it. Trim stray spaces from emails and keep one email per cell. If you know a contact's other address is stored as an additional email in HubSpot, you can use it as the identifier, but be careful: when the file has both secondary email and Record ID columns and you use the secondary email as the identifier, it replaces the contact's primary email.
Why did my HubSpot import create duplicate companies?
Cause. The file identified companies by name. HubSpot deduplicates companies on import by the primary and additional values of Company domain name, not by company name. A row that says "Acme Inc." with no domain becomes a new company even if "Acme" already exists.
Messy domains cause the same result. Vendor files often put a full website URL, a subsidiary site, or a regional domain in the website column. HubSpot's Company domain name property only keeps values up to the top-level domain and strips anything after it, such as a page path, but the domain itself still has to match the one on your existing company.
A one-person RevOps team we work with loads a vendor file every quarter with tens of thousands of contacts across thousands of companies. It took them about a full day each time, and messy website and domain fields were one of the main reasons company matches failed or created duplicates.
Two other sources of duplicate companies often show up at the same time:
- The automatic create-and-associate setting. When it's on, HubSpot can create a company from a contact's email domain if no company with that domain exists. Different subdomains, such as example.com and info.example.com, create separate companies.
- API and sync apps. HubSpot doesn't deduplicate companies created through the API by Company domain name, and that includes installed third-party sync apps. If an integration created companies before your import, you may have two companies with the same domain. The import then returns a "Multiple companies with this domain" error for those rows.
Fix. Normalize every website value to a bare domain (example.com), confirm it against the domain on the existing company, and add the company's Record ID where the domain is ambiguous. Merge the duplicate companies that were created.
Prevent it. Never import companies by name alone. Match names to existing companies and add Record IDs or domains first.
Why didn't my HubSpot import associate contacts with their companies?
Cause. In a multiple object import, HubSpot associates the contact and company on each row using the unique identifiers for both objects. If a row has an Email but no Company domain name or company Record ID, the contact imports with no association, or with an association to a newly created company. HubSpot reports several of these as association errors, such as "Invalid association identifier," where the records import but aren't associated.
The automatic create-and-associate setting won't fill the gap. HubSpot says it doesn't override associations from a multiple object import, and it won't create a company for a contact that had no company in that import. For freemail contacts, it looks at the Website URL property and makes no association if that's empty.
Fix. Re-import the affected rows in update mode with the contact's Email or Record ID and the company's domain or Record ID on each row.
Prevent it. Before import, filter the file for rows missing either identifier. If you're importing a conference or trade show list, where this gap is especially common, we cover that case in how to import event leads into HubSpot.
Why did my import update records when I meant to create them, or the reverse?
Cause. HubSpot has three import modes:
- Create and update creates new records and updates existing ones it identifies.
- Create only creates new records and ignores rows that match existing ones.
- Update only updates existing records and ignores rows that don't match.
If you used create only on a file that contained existing contacts, those rows were skipped and show up as "Create only import" errors. If you used update only, rows that didn't match anything were skipped as "Update only import" errors. With create and update, a row whose Email or Record ID matches an existing record updates it, even if you thought of it as a new lead.
Fix and prevent it. Download the rows with errors and re-import them in the right mode. Next time, decide the mode before you open the wizard. For a vendor refresh where most rows should already exist, update only is safer, and you can then import the leftovers as a separate create only file after review.
Why did my HubSpot import overwrite good data?
Cause. Every mapped column updates the matched record. If your file has an older job title, a stale phone number, or a vendor's version of the industry, it replaces the value your team entered. Blank cells are not the problem: HubSpot ignores blank cells and won't clear an existing value with them.
The team with the quarterly vendor file found that most companies hadn't changed since the last load. The real work was the small share that had changed, and that's where the mistakes hid. A file can be almost entirely accurate and still overwrite good values with the small share that is wrong.
Fix. Open a few affected records and use View property history to see each property's previous values, when they changed, and the source. To roll back many records at once, HubSpot's restore tool can return records to an earlier state within the last 14 days, filtered to a specific import. It needs Super Admin permissions and a Starter, Professional, or Enterprise subscription.
Prevent it. In the mapping step, choose Don't import column for anything you don't need, and select Don't overwrite for properties your team owns. Deciding which source should win for each field is a survivorship question, and we cover it in CRM survivorship rules.
Why did rows fail in my HubSpot import?
Cause. HubSpot couldn't parse or validate a value. After the import, click View rows with errors to see each row and its error, and download the rows as a file. The errors we see most in bulk files are:
- Failed validation of Email: the email isn't a valid format.
- Invalid enumeration option: a dropdown value in the file doesn't match any option. Values must match the option's label or internal value.
- Ambiguous enumeration option: the value matches more than one option.
- Could not parse date: the dates don't match the format you selected in the date format dropdown.
- Could not parse number: a number column contains text or symbols.
- Duplicate record ID: the same Record ID appears on more than one row.
Fix and prevent it. Correct the values in the downloaded error file and import it again. Next time, compare every dropdown column to the property's options, confirm the date format, and strip currency symbols and commas from number columns.
How do I undo a HubSpot import?
HubSpot has no single undo button for an import. What it does support:
- Delete records the import created. From the imports page, hover over the import and choose View records to see every record from that file, then select and delete them. Record Source Detail 1 is also set to the import name on records an import creates, which helps you filter for them.
- Reverse updates with the restore tool within 14 days, as described above. HubSpot says deleting records does not reverse updates an import made to existing records. Outside the restore window, you have to re-import the correct values or edit them by hand.
- Restore deleted records from the recycling bin within 90 days if you deleted the wrong ones.
Merges are the exception. If you merged records to clean up after an import, HubSpot doesn't let you unmerge them.
If your import is part of a larger move between systems, the same identifier problems apply at scale, and we cover them in Salesforce to HubSpot migration duplicates.
A checklist before every HubSpot import
- Every contact row has an Email or Record ID.
- Every company row has a clean Company domain name or Record ID.
- Multiple object files have identifiers for both objects on every row.
- The file has no duplicate rows or repeated Record IDs.
- You chose the import mode on purpose.
- Columns you don't need are set to Don't import column.
- Properties your team owns are set to Don't overwrite.
- Dropdown values match the property options, and the date format is confirmed.
- You tested 10 to 20 rows and checked matches, associations, and values before importing the rest.
How Quill helps
Quill runs an agent that takes your file as-is and matches each row to existing HubSpot contacts and companies, including rows with no email or only a company name. It flags uncertain matches for a person to review and imports the rest without overwriting values you trust. See CRM Hygiene, or book 15 minutes to walk through one of your files.
Frequently asked questions
Does HubSpot deduplicate contacts on import?
Yes, but only by Email or Record ID. A row with neither, or with an email that differs from the existing contact's, creates a new contact.
Does HubSpot deduplicate companies by name on import?
No. HubSpot deduplicates companies on import by the primary and additional Company domain name values, or by Record ID. A row with only a company name creates a new company.
Will blank cells in my import file erase existing values?
No. HubSpot ignores blank cells, so an empty cell leaves the existing value in place. Only cells with a value overwrite what's in HubSpot.
Can I undo a HubSpot import?
Partly. You can delete records an import created from the import's record view, and reverse updates within 14 days with the restore tool if you're a Super Admin on a paid tier. Merges can't be undone.