Why Your HubSpot CSV Import Keeps Failing (and How to Fix It)
HubSpot CSV imports fail for three predictable reasons: wrong column names, rejected picklist values, and incompatible date formats. Here's how to fix each one before you upload.
You’ve exported your data, cleaned it up in Excel, and dragged it into HubSpot’s import wizard. The progress bar fills. Then: errors. Rows skipped. Fields blank. Or worse, the import “succeeds” but the data is wrong.
This isn’t a HubSpot bug. It happens because HubSpot validates every row against its own strict schema before writing anything to your CRM. If your file doesn’t match that schema exactly, rows are silently skipped or fields are imported as blank.
HubSpot imports fail for three predictable reasons, and all three are fixable before you upload.
Reason 1: You re-map the same columns every single import
HubSpot’s import wizard includes a column mapping step where you can match any column in your file to any property in HubSpot. So COMPANY_NAME and company name and Company will all appear in the mapper and you can point them at the right field.
The problem isn’t that it fails, it’s that you have to do this manually every time, for every column.
If your file has 25 columns, that’s 25 dropdowns to click through. If you’re importing every week from the same source, you’re repeating the exact same 25 decisions every week. Miss one and that field imports as blank across all rows, silently.
HubSpot has no native way to save and reuse a column mapping. Every import starts from scratch.
Rename your columns to match HubSpot’s property names before you upload. When column names match exactly, HubSpot auto-maps them in the wizard and you skip the manual step entirely. You can find the internal names in HubSpot’s property settings (the lowercased, no-space versions shown under “Internal name”). For a contact import, the most common ones are:
| Column to use | HubSpot property |
|---|---|
firstname | First Name |
lastname | Last Name |
email | |
company | Company Name |
lifecyclestage | Lifecycle Stage |
If you regularly export from another system and import into HubSpot, pre-renaming the columns before upload eliminates the mapping step entirely and removes the risk of getting it wrong.
Reason 2: Your picklist values don’t match what HubSpot expects
HubSpot picklist fields (Dropdown Select, Radio Select, Checkbox) only accept the exact values defined in the property settings. HubSpot matches imported picklist values against the option labels defined in the property settings, not the internal names. The match is exact and case-sensitive.
When a value in your CSV doesn’t match, HubSpot’s import wizard flags it and asks you to remap it before the import completes. That sounds fine for a single column. It gets painful fast when you have 10 picklist columns with dozens of unique values each, because every one needs to be handled manually in the wizard, one by one, every time you import.
Common mismatches that trigger the remapping step:
- Your file has
closed won— HubSpot’s label isClosed Won - Your file has
Marketing Qualified Lead— HubSpot’s label isMarketing qualified lead - Your file has
Technology— a custom Industry property has the optionTech - Your file has
Open(trailing space) — HubSpot’s label isOpen
The problem compounds when data comes from multiple sources. A Salesforce export, a LinkedIn export, and a manually-built spreadsheet will all have different conventions for the same concepts. Each source adds new variations to map through.
None of those remapping decisions are saved. Next import, you start the same manual process over again from scratch. If you get one wrong or skip it, that value gets imported as whatever you mapped it to, with no warning.
The scalable fix is to standardise your picklist values before uploading, so HubSpot’s wizard has nothing to flag. For default properties like Deal Stage and Lifecycle Stage, the allowed values are documented. For custom properties, check the property settings in HubSpot. A single column might contain twenty different spellings of five valid values — get the canonical list and collapse everything to it before the upload.
Reason 3: Your date formats are incompatible
HubSpot accepts dates in a specific format: YYYY-MM-DD for date fields, or a Unix timestamp in milliseconds for datetime fields. Most exports don’t use either.
Common formats that will cause HubSpot to reject or blank a date field:
15/01/2024(DD/MM/YYYY, common in European exports)01/15/2024(MM/DD/YYYY, common in American exports)Jan 15, 2024(human-readable, not machine-parseable)2024-01-15T00:00:00Z(ISO 8601 datetime, close but not what HubSpot expects for a simple date field)
If HubSpot can’t parse the date, the field is imported as blank. If you’re importing Close Date across a thousand deals, that’s a thousand deals with no close date in your pipeline.
Convert all date columns to YYYY-MM-DD before uploading. In Excel, you can use a custom format or the TEXT() function. In Google Sheets, =TEXT(A1,"YYYY-MM-DD") works for most cases. If your export mixes multiple formats in the same column (which happens with manually-filled spreadsheets), you need to handle each format separately.
Why this keeps happening on every import
Each of these issues (column names, picklist values, date formats) has to be fixed from scratch every time a new file arrives, even if it’s the same type of data you imported last month.
The underlying problem is that there’s no persistent mapping between your source data and HubSpot’s schema. Every import is a one-off. You fix it, upload it, and then repeat the same work next time.
The more sustainable approach is to treat the mapping as a reusable asset:
- Define HubSpot’s expected column names and picklist values once
- Build a transformation that maps your source columns to those names
- Apply that transformation automatically every time the same file format arrives
This is what Asphorem’s CSV Importer does. You configure the mapping once (source columns to HubSpot fields, source picklist values to HubSpot allowed values) and save it as a named template. The next time the same export arrives, you select the template and skip straight to download. The AI handles picklist normalisation automatically, catching typos, language variants, and capitalisation differences across the whole file.
Your file rows are never uploaded to our servers. Only the unique values from picklist columns are processed by the AI, not the full data.
Quick checklist before your next HubSpot import
- Columns are pre-renamed to HubSpot’s internal names so they auto-map in the wizard
- Picklist values exactly match what’s defined in each HubSpot property
- All date fields are formatted as
YYYY-MM-DD - Custom property internal names are confirmed in HubSpot’s property settings
- Required fields (Email for contacts, Deal Name for deals) are present and non-empty
If you’re importing contacts, also check: phone numbers are in a consistent format, and Lifecycle Stage values match HubSpot’s default options (subscriber, lead, marketingqualifiedlead, salesqualifiedlead, opportunity, customer, evangelist, other).
HubSpot imports fail for predictable reasons. Once you’ve fixed them once for a given file format, you shouldn’t have to fix them again.
HubSpot CSV import: frequently asked questions
What date format does HubSpot accept for CSV imports?
YYYY-MM-DD for date fields, or a Unix timestamp in milliseconds for datetime fields. Other common formats (MM/DD/YYYY, DD/MM/YYYY, Jan 15, 2024) will be rejected or imported as blank. See how to standardise date formats in a CSV for the conversion steps.
Why does my HubSpot import skip rows silently?
The most common cause is a mismatched picklist value. HubSpot flags unrecognised picklist values in the wizard for manual remapping, but if the remap is incorrect, those rows can import with the wrong value. The other common cause is a missing required field (Email for contacts, Deal Name for deals).
How do I match my CSV columns to HubSpot properties automatically?
Rename your columns to HubSpot’s internal property names before upload (firstname, lastname, email, lifecyclestage, etc.). When column names match exactly, HubSpot auto-maps them in the wizard with no manual clicking.
What are HubSpot’s default Lifecycle Stage values?
subscriber, lead, marketingqualifiedlead, salesqualifiedlead, opportunity, customer, evangelist, other. These are HubSpot’s internal values (lowercase, no spaces), and your CSV must use these exact strings to match. See how to standardise picklist values before a CRM import for the broader picklist normalisation pattern.
How do I bulk fix picklist values in a CSV before importing to HubSpot?
Build a mapping table from each source variant to the HubSpot label, then apply it as a single substitution rather than running find-and-replace per value. See how to bulk replace values in a CSV column for the approach.
Asphorem maps your columns, standardises picklist values, and normalises dates so your next import works first time. Free plan included.