How to Import Contacts and Companies into HubSpot Without Breaking Associations
Import contacts and companies into HubSpot from one CSV or two linked files. Choose the right unique IDs, prevent duplicates, and preserve every association.
On this page
A HubSpot contacts-and-companies import can finish with both record types present and still leave contacts attached to the wrong companies, or to no company at all. The safe structure for a HubSpot import contacts and companies CSV is one row per relationship, with a reliable identifier for the contact and another for the company.
HubSpot supports a single combined file and a pair of linked files. The right choice depends on how the source data is already organised. Both methods use the advanced import tool, and both need stable keys before the upload begins.
Should you use one CSV or two files?
Use one CSV when every source row already contains a contact and its company; use two files when contacts and companies live in separate tables.
| Source data | Import structure | Why it fits |
|---|---|---|
| One export with contact and company columns on each row | One file | HubSpot associates the contact and company found on the same row |
| One contact export and one company export | Two files | A common column links each contact row to one unique company row |
| One contact belongs to several companies | One file with the contact repeated | Each repeated row represents another contact-to-company relationship |
| Company properties repeat across hundreds of contact rows | Two files | The company record appears once, which removes conflicting copies of its properties |
HubSpot’s multiple-object import supports either structure. A two-file import can contain two objects, or one object and one activity. A single file can cover more objects when the records that belong together appear on the same row.
Which unique identifiers keep the import from creating duplicates?
Use Email for contacts and Company domain name for companies unless the records already have HubSpot Record IDs or your account has a custom property that requires unique values.
HubSpot’s current import file requirements list the supported unique identifiers:
| Object | Standard unique identifier | Other supported identifiers |
|---|---|---|
| Contact | Email | HubSpot Record ID, or a custom property that requires unique values |
| Company | Company domain name | HubSpot Record ID, or a custom property that requires unique values |
Include one identifier for each object in a multi-object import. A contact email identifies the person. It does not identify the company on the same row. A company name such as Acme can also collide with another company or change after a rebrand, so the bare domain acme.com is usually a safer company key.
Record IDs are the safest choice when both record types already exist in HubSpot. Name the headers clearly, such as Record ID - Contact and Record ID - Company, then map each ID to the correct object.
Some businesses legitimately have more than one company record on the same domain. In that case, use each company’s Record ID or a custom unique property such as ERP Account ID. Company domain name would collapse a distinction the business needs to keep.
How does a one-file contact and company import work?
A one-file import associates the contact and company whose values appear on the same row.
This file creates three contacts, two companies, and three associations:
Email,First name,Last name,Company domain name,Company name,Industry
maya.chen@northstar.io,Maya,Chen,northstar.io,Northstar Labs,Software
jon.bell@northstar.io,Jon,Bell,northstar.io,Northstar Labs,Software
amina@cloudharbor.com,Amina,Diallo,cloudharbor.com,Cloud Harbor,Logistics
Start an advanced import, select Contacts and Companies, and choose Single file. Map Email, First name, and Last name to Contact properties. Map Company domain name, Company name, and Industry to Company properties. HubSpot uses the object relationship in the mapping screen to associate the records represented by each row.
Choose Create and update when the file may contain existing records. HubSpot uses the selected unique identifiers to find them. Review the key icons in the mapping screen before continuing, since they show which columns HubSpot will use to match existing contacts and companies.
The company data repeats for Maya and Jon. Keep those repeated values identical and include Company domain name on every row. HubSpot requires a unique identifier for each object to avoid duplicate records; without those identifiers, repeated rows can create duplicates instead of associations.
One contact associated with two companies
Repeat the contact identifier on two rows and change the company identifier to create two company associations for one contact:
Email,First name,Last name,Company domain name,Company name
maya.chen@northstar.io,Maya,Chen,northstar.io,Northstar Labs
maya.chen@northstar.io,Maya,Chen,fieldstone.vc,Fieldstone Ventures
The repeated Email tells HubSpot to reuse Maya’s contact record. Each Company domain name resolves a different company. Omitting the identifiers risks creating duplicate records instead of two associations.
How does a two-file import preserve associations?
A two-file import preserves associations by using one common column in both files and making that column unique in one of them.
The company file has one row per domain:
Company domain name,Company name,Industry
northstar.io,Northstar Labs,Software
cloudharbor.com,Cloud Harbor,Logistics
The contact file repeats that domain wherever a contact belongs to the company:
Email,First name,Last name,Company domain name,Job title
maya.chen@northstar.io,Maya,Chen,northstar.io,VP Revenue Operations
jon.bell@northstar.io,Jon,Bell,northstar.io,Sales Operations Manager
amina@cloudharbor.com,Amina,Diallo,cloudharbor.com,CRM Administrator
Select Contacts and Companies in the advanced import, choose Multiple files, and upload one file for each object. When HubSpot asks for the common column, select Company domain name. Select Company as the object for which that column is the unique key.
The company file must contain each common value once. The contact file can repeat a value because several contacts can belong to the same company. HubSpot’s official sample files use the same pattern, with a unique company row and matching values on the related contact rows.
Company name can serve as the common column when every company name is unique and stable. Company domain name usually gives cleaner deduplication against companies already in HubSpot. Normalise domains before import and use one bare form such as northstar.io in both files. Exact common-key values are easier to audit before upload.
Where do duplicate contacts and companies come from?
Duplicate records appear when HubSpot cannot resolve a row to one existing contact or company, or when the same business arrives under inconsistent keys.
The highest-risk cases are:
- A contact row has no
Email, Contact Record ID, or custom unique value. - A company row has no
Company domain name, Company Record ID, or custom unique value. - The import uses
Create newfor records that may already exist. - The same domain appears as
northstar.ioin one row andwww.northstar.ioin another. - A two-file company export contains the common key more than once.
- Repeated company data in a one-file import disagrees across rows, such as
Northstar LabsandNorthstar Laboratoryfor the same source account.
A custom company key needs one extra check. HubSpot allows duplicate company domains when a different custom unique property controls deduplication. Remove duplicate domains before import if the account expects one company per domain, or select Company domain name as the unique identifier.
Blank keys deserve their own review queue. A contact with no email can still be created from other contact properties, but a later import has no dependable way to match that person. A company with no domain has the same problem. Assign a custom external ID before import when the source system has one.
How do association labels change the file?
Association labels add context such as Employee, Billing contact, or Primary, and HubSpot requires a Professional or Enterprise subscription to import them.
Create custom association labels in HubSpot before the import. Add an Association label column to the row that contains the two related records:
Email,First name,Last name,Company domain name,Company name,Association label
maya.chen@northstar.io,Maya,Chen,northstar.io,Northstar Labs,Employee
jon.bell@northstar.io,Jon,Bell,northstar.io,Northstar Labs,Billing contact
Map the column as an association label rather than a Contact or Company property. The value must match a label that already exists in HubSpot. Use Primary to make the company the contact’s primary company. Separate several labels in one cell with a semicolon, such as Employee;Billing contact.
In a two-file import, place the association label and the identifier for the object being associated in the same file. Free and Starter accounts can still create the underlying contact-to-company association through the import; the label import itself needs Professional or Enterprise.
What happens to marketing status and email subscriptions?
A contact-company import creates CRM records and associations; marketing-contact status, legal basis, and email subscription status remain separate decisions.
At the end of a contact import, HubSpot asks the importer to confirm that the contacts expect to hear from the business and that the file is not a purchased list. Accounts with data privacy settings enabled can also select a legal basis for processing.
Marking imported contacts as marketing requires Marketing Hub Starter, Professional, or Enterprise with Marketing Contacts. That setting controls access to marketing tools and can affect the account’s billable marketing-contact count. It does not establish an opt-in for a particular email subscription type.
HubSpot’s subscription status rules still govern whether a contact can receive a marketing email. When an account enables the setting that permits marketing emails only for contacts with a legal basis, the contact needs both a valid legal basis and an opted-in status for the relevant subscription type. Existing opt-outs from another system should go through HubSpot’s dedicated opt-out list import, which uses an Email column and marks those addresses ineligible for marketing emails.
Do not use an association label such as Customer or Partner as proof of consent. Association labels describe the relationship between records. Subscription status records permission to receive a category of email.
Which columns should the files include?
Include the identifiers first, then only the contact and company properties the import needs to create or update.
| Contact columns | Company columns |
|---|---|
| Company domain name | |
| First name | Company name |
| Last name | Industry |
| Job title | Phone number |
| Phone number | City and country/region |
| Contact owner email or Record ID | Company owner email or Record ID |
Headers can use source-friendly names when you map them manually. Clear object-specific names reduce mistakes. Contact phone and Company phone are easier to map than two columns both called Phone. Review every automatically suggested mapping before starting the import.
What should you check before and after the import?
Check identifier coverage, relationship counts, duplicate risk, and subscription handling before upload, then verify the imported associations inside HubSpot.
- Every contact has
Email, a Contact Record ID, or a custom unique value. - Every company has
Company domain name, a Company Record ID, or a custom unique value. - Each row in a one-file import represents one intended relationship.
- The common column in a two-file import has the same header and values in both files.
- The company file contains each common key once.
- Domains contain the bare domain and use one consistent form.
-
Create and updateis selected when either object may already exist. - Association labels already exist and the account supports label imports.
- Purchased lists are excluded, and consent, legal basis, marketing status, and opt-outs have been handled separately.
- A test import covers several contacts at one company and one contact with several companies, if both patterns exist in the full dataset.
After the test, open one contact from each relationship pattern and inspect its Associated companies card. Check the import history for row errors, then compare the number of imported contacts, companies, and associations with the expected counts from the source files.
If the same export format arrives regularly, save its column and value cleanup as a reusable CSV mapping before the HubSpot upload. Stable email and domain columns make every later association import easier to audit.
The import is ready for the full dataset when the test creates the expected record counts and every sampled contact shows the intended company associations.
Map columns, standardise picklist values, and normalise dates. Save the workflow and reuse it next time.