First, get the real error
HubSpot does not fail an import as one lump. It imports the rows it can and lists the rows it could not, with a reason against each. That list is the useful part, and it is easy to miss.
Open the import from the imports list and download the error file. It gives you the failing rows with the error name attached, which turns a vague failure into a specific fix. Everything below is keyed to those error names.
Worth knowing before you go back to the spreadsheet: some of it can be fixed inside the import tool. At the mapping stage you can replace a value and HubSpot applies the change to every row in that column where it appears, which handles a misspelling repeated across hundreds of rows. That works well for one or two bad values. It stops being the quicker route when several columns need work, or when the same file arrives every month.
If the whole import was rejected before it got to the rows, it is almost always one of the file-level problems in the next section. HubSpot checks the shape of the file before it looks at the contents.
Error message lookup
Find the message from your error file below, then go to the section that fixes it. The error names are HubSpot's own, as its Review and troubleshoot record import errors article lists them (updated September 25, 2026). The table covers the errors this page fixes; that article lists every one and says what it means, and this page says how to fix the file.
| Error in the error file | Where it's fixed on this page |
|---|---|
| Incorrect number of columns, Invalid file type, Invalid sheet count, Invalid spreadsheet, Row data too large | The file itself was rejected |
| Property definition not found, Missing required property, Invalid required property, Property validation rule error | Your columns did not match HubSpot |
| Invalid enumeration option, Ambiguous enumeration option, Could not parse date, Could not parse number, Could not parse row, Failed validation of Email, Could not find owner, Multiple owners found | Individual values were rejected |
| Duplicate unique property value, Duplicate record ID, Invalid record ID, Multiple companies with this domain | Duplicates and identifiers |
| Association record not found, Invalid association identifier, Duplicate association ID, Failed to create association, Failed to find record for associations, Association label not found, Association limits exceeded | Importing companies and contacts together |
| Create only import, Update only import | It said it worked, but nothing changed |
| Limit exceeded, GDPR blocklisted email | The ones you cannot fix in the file |
The file itself was rejected
Most of these stop the import before a single row is read; Row data too large skips only the row that is too big. They are the quickest to fix and the most common cause of a file that will simply not upload.
| Error | What it means | The fix |
|---|---|---|
| Incorrect number of columns | At least one column has data in it but no header | Give every column a header, or delete the stray column. A single value pasted into an unlabeled column does this. |
| Invalid file type | The file is not a .csv, .xls, or .xlsx | Save or convert it. A .numbers, .tsv, or Google Sheets link will be refused. |
| Invalid sheet count | The workbook has more than one sheet | Send one sheet. Export the sheet you want on its own. |
| Invalid spreadsheet | The file is corrupt or not really a spreadsheet | Open it, save it again as .csv or .xlsx, and retry. |
| Row data too large | A single cell or row holds more than 1 MB | Find the offending cell. It is usually a note or description field with something pasted into it. |
A file refused for having far more rows than you can see is carrying rows that only look empty: formatting or a stray value far below your data makes them count. Press Ctrl+End to see where Excel thinks the data ends, delete the rows and columns past your data, then save and check again. A file that really is too big has to go in as several; see how to split a large file for a CRM import.
Your columns did not match HubSpot
These are about the header row and the properties behind it. HubSpot has to turn each of your column names into one of its own properties, and it will tell you when it cannot.
| Error | What it means | The fix |
|---|---|---|
| Property definition not found | A column header does not match any HubSpot property | Map it to an existing property during the import, or create the property first. Renaming the column to the exact property name avoids the question. |
| Missing required property | A property HubSpot requires has no value in some rows | Fill the gaps, or filter those rows out and handle them separately. |
| Invalid required property | A required property has a value HubSpot will not accept | Check the format that property expects. This is usually email, a date, or a number. |
| Property validation rule error | A value breaks a validation rule set on the property | Look at the rule on the property in HubSpot. Someone on your team set it, and the file has to satisfy it. |
Individual values were rejected
These are the ones that let most of the import through and quietly drop the rest, which is why an import can look successful and still leave you short.
| Error | What it means | The fix |
|---|---|---|
| Invalid enumeration option | A dropdown value does not match any existing option | Either correct the values in the file or add the option in HubSpot. This is the classic one behind a country column with fourteen spellings. |
| Ambiguous enumeration option | The value matches more than one option, or uses the label where HubSpot wants the internal value | Use the internal value, not the display label. |
| Could not parse date | The date does not match the format you picked during the import | HubSpot asks you to choose a date format when you import. Pick the one your file actually uses, or convert the column to match. |
| Could not parse number | A number property contains something that is not a number | Strip the currency symbols, commas, and any text such as n/a. |
| Could not parse row | The row cannot be processed at all | Usually a stray delimiter or line break inside a cell. Re-save the file as CSV and check that row. |
| Failed validation of Email | The address is not shaped like an email | Fix or remove it. Dead addresses import fine, so this is about format, not deliverability. |
| Could not find owner | The owner value does not match an active HubSpot user | Use the owner's email address rather than their name. |
| Multiple owners found | The owner name matches more than one user | Use the email address instead. |
Duplicates and identifiers
HubSpot matches on a unique identifier, usually email for contacts and domain for companies. Most of these errors mean your file disagrees with itself about which record is which.
| Error | What it means | The fix |
|---|---|---|
| Duplicate unique property value | Two rows carry the same unique identifier | Deduplicate the file before importing. HubSpot will not choose between them for you. |
| Duplicate record ID | The same record ID appears more than once | Keep one row per record, the most recent one. |
| Invalid record ID | A record ID does not exist in HubSpot | Export the current records to get real IDs, or match on email instead. |
| Multiple companies with this domain | The domain matches several company records | Merge the duplicates in HubSpot first, then re-import. |
Email matching is case-insensitive in HubSpot, but a leading or trailing space is not the same address. If updates are landing as new contacts, check for whitespace before you check anything else.
Importing companies and contacts together
You can bring contacts and their companies in with one file or two. In one file, each row holds a contact and its company, with an identifier for each: Email or Record ID for the contact, Company domain name or Record ID for the company. Leave the identifiers out and HubSpot creates duplicate records instead of linking each contact to its company.
A contact who belongs to two companies takes two rows, with the same email and a different company domain in each. With two files, one for contacts and one for companies, both need a column in common that connects the records. If both files carry Record IDs, name the columns apart, for example Record ID - Contacts and Record ID - Companies.
Company domain name keeps only the domain: anything after it, such as /about, is removed on import. When one domain matches several companies already in HubSpot, HubSpot leaves that company unchanged and lists Multiple companies with this domain. Merge or delete the extra companies, or import with Record ID instead.
| Error | What it means | The fix |
|---|---|---|
| Association record not found | An identifier used to link the records is missing, has a line break, or runs past 100 characters | Fill in the identifier, or export the existing records and use their Record IDs. |
| Failed to create association | HubSpot imported the records but could not link them in this format | In one file, give each object its own identifier column. In two files, pick a column both files share. |
| Failed to find record for associations | The same identifier was used for different records of one object in a multi-object import | Make each identifier unique. On an update-only import, check the values exist in HubSpot. |
| Association label not found | A label in your Association label column does not exist in HubSpot, so the records are linked without it | Create the label first, or match the spelling of an existing one. Importing association labels needs a Professional or Enterprise subscription. |
| Invalid association identifier | The column that links the records is not a unique property, or its values have line breaks or run past 100 characters | Link on Email for contacts, Company domain name for companies, or Record IDs. |
| Duplicate association ID | The column your two files share has values that are not unique | Pick a different shared column, one whose value stands for a single record on the other side, such as the company name for the contacts who work there. |
| Association limits exceeded | The import adds an association past a limit set in your account | Raise the limit if the records should be linked, then import again or link them by hand. |
With Association record not found, Invalid association identifier, Failed to create association, Association label not found and Association limits exceeded, the records still import. Only the link or its label is missing, so you can fix the file and import again, or link the records by hand in HubSpot.
It said it worked, but nothing changed
This is not really an error, and it catches people out more than the errors do. HubSpot asks whether the import should create records, update them, or both, and it does exactly what you chose.
Create only import means your file matched existing records and HubSpot left them alone, as instructed. Update only import means the opposite: rows that matched nothing were skipped rather than created. If you meant to do both, choose create and update, and run it again.
The ones you cannot fix in the file
Some errors are about your HubSpot account rather than your spreadsheet, and no amount of cleaning will move them.
Limit exceeded means you have hit your record allowance. GDPR blocklisted email means those contacts cannot be added by import at all, whatever the file says. Those two are HubSpot-side decisions, and the file is not the lever. Association errors are mostly about the file, and they are under Importing companies and contacts together.
The imports that do not fail
Every error above announces itself. The imports that cause real trouble are the ones that succeed. Nothing is rejected, the summary looks healthy, and the damage only surfaces days later when a report is wrong or a rep asks why a contact went cold.
Experienced HubSpot admins consistently name the same handful. An import can overwrite Original Source, which is the field your attribution reporting rests on. It can move Lifecycle Stage, sometimes backwards. It can replace tidy dropdown values with free text typed by whoever built the file. It can break company associations, change record owners and the routing that depends on them, and land values in the wrong property entirely because two columns had similar names.
The one that surprises people most: an import can trigger workflows. If enrollment criteria match the records you just touched, automation fires on all of them at once, and that can mean live emails going out to a few thousand people who were not expecting them.
The question worth asking before any import is not whether the file is clean. It is: what is this file allowed to change? Everything else follows from the answer.
Importing an Apollo export into HubSpot
An Apollo people export usually imports into HubSpot with few errors. The trouble is in what it brings with it: more than 70 columns, some named so that HubSpot maps them to the wrong property. These are the ones to deal with before you upload.
1. Check for the locked placeholder email
Apollo now asks you to access each email, at a credit apiece, before it exports a contact. Older exports can still carry rows where every unrevealed email is the same placeholder, email_not_unlocked@domain.com. HubSpot imports the first of those rows and rejects the rest with a Duplicate alternate ID error, so only one of those people arrives. Filter them out, or reveal the contacts in Apollo and export again.
On the mapping screen, before the import. After it, the same rows are listed as Duplicate alternate ID.
2. Decide what to do with Email Status
Apollo marks each address, for example Verified or Unverified. HubSpot has no field for it and doesn't suggest one. Import only the Verified rows, or create a custom contact property and map the column to it so you can filter later.
3. Choose which phone goes where
Apollo exports five phone columns: Work Direct, Home, Mobile, Corporate and Other. HubSpot maps Mobile Phone to Mobile Phone Number on its own. Map one work number to Phone Number by hand. Corporate is usually the switchboard, so Work Direct is the better choice when it is there.
4. Keep person and company columns apart
The person's location is in City, State and Country, next to the company's Company Address, Company City, # Employees and Annual Revenue. Map the person columns to the contact. The company columns belong on the Company record, in a separate company import.
5. Check every row HubSpot maps for you
HubSpot fills in the mapping from the column names and can get it wrong: in our test it mapped Company City to Company size. Go down the list before you click Next. To skip a column, choose Don't import column in its Import as dropdown, then check Continue without mapping all columns.
6. Set Lifecycle Stage and Lead Status yourself
The export carries neither. Its Stage column is Apollo's own stage, such as Cold, so don't map it to Lifecycle Stage. New contacts get your account's default lifecycle stage and no Lead Status, so add both columns to the file, for example Lead and New, to land them in the views and workflows that filter on them.
7. Match Account Owner to HubSpot users
Account Owner holds the Apollo user's email address, and the export's Contact Owner column holds the same one. If that address belongs to a HubSpot user, map Account Owner to HubSpot's Contact owner property. If not, the mapping screen says Could not find owner and lets you pick a HubSpot user for each value. Left as No owner, the contacts import without one.
Operelio's Apollo.io to HubSpot template makes most of these choices for you: it maps Mobile, the first work number and the person's City, State and Country, leaves out Home Phone and Apollo's Stage, sets Lead and New, and puts Seniority, Departments and Apollo lists into Notes with their labels.
A checklist that prevents most of it
None of this is difficult. It is the difference between an import you can undo and one you cannot.
1. Export a backup of the records you are about to touch
Before anything else. HubSpot's restore tool can roll an import back within 14 days, but only a Super Admin on a paid hub can run it, and property history only tells you what changed one record at a time. An export you already have is worth more than any amount of care afterwards.
2. Run a sample first
Twenty or thirty rows. Import them, then open two or three of those records and read the property history to see exactly which fields the import wrote. This is the step people skip and then wish they had not.
3. Decide what the file is allowed to change
Map only the columns you intend to update. A column that is in the file but should not overwrite anything is safer left unmapped than mapped and hoped about. Treat Original Source, Lifecycle Stage, and owner fields as protected unless changing them is the actual goal.
4. Check what automation will fire
Look at which workflows enroll on the properties you are about to write. If the import should not set anything off, turn those workflows off for the duration, or import into a staging property instead.
5. Put untrusted data in its own field
When a list comes from a conference badge scanner or a bought file, the job title in it is a claim, not a fact. Writing it into a separate imported or submitted field keeps your clean data clean and still gets the new information in.
Fixing it once instead of per error
Most of the list above comes from three things: a header row that does not match, values that do not match a dropdown, and duplicates. HubSpot lets you patch some of these in the import tool one value at a time, which is fine once. It is the wrong shape when the same export arrives every month, because you are redoing the same corrections by hand each time.
Clean Headers standardizes the header row and removes the blank and duplicate names behind Incorrect number of columns and Property definition not found. Find & Replace collapses the spelling variants behind Invalid enumeration option. Deduplicate removes the repeated identifiers behind Duplicate unique property value. Excel to CSV takes one sheet out of a multi-sheet workbook, which is Invalid sheet count. The CRM Formatter maps your columns onto HubSpot's real property names and shows a preview of what will be created and updated before anything is written.
Dates have two fixes and it is worth knowing both. HubSpot asks you to pick a date format during the import, so choosing the one your file already uses often solves it without touching a cell. When the column itself is inconsistent, which is the harder case, Data Health Check flags the mixed formats and its Standardize dates fix converts them to YYYY-MM-DD, reading the column in its own day and month order. A date that could be either, in a column that doesn't settle it, is left as it is for you to check.
Originally published in the Operelio how-tos. Which HubSpot import error do you hit most?



