HubSpot Import Best Practices: Prevent Bad Data at the Source

Master HubSpot data imports. Learn file preparation, field mapping, duplicate handling, and post-import validation for clean CRM data.

Imports are the #1 source of bad CRM data. One poorly prepared spreadsheet can introduce thousands of duplicates, formatting inconsistencies, and incomplete records.

This guide shows you how to import data into HubSpot correctly—every time.

Pre-Import Checklist

Before importing anything:

☐ Define the purpose of this import
☐ Identify the source and its reliability
☐ Clean and standardize the data file
☐ Map fields to HubSpot properties
☐ Configure duplicate handling
☐ Test with a small batch first
☐ Plan for post-import validation

File Preparation

Required Format

HubSpot accepts:

  • CSV (recommended)
  • XLSX (Excel)

CSV Settings:

  • UTF-8 encoding (for international characters)
  • Comma delimiter
  • Text qualifier: double quotes

Column Headers

Good headers (match HubSpot property names):
firstname, lastname, email, company, phone, jobtitle

Bad headers (will require manual mapping):
First, Last, E-mail Address, Company Name, Tel, Job

Pro tip: Export existing HubSpot contacts first to get exact header names.

Data Cleaning

Before import, clean your file:

1. Remove completely empty rows

Before:
John,Smith,john@acme.com
,,
Jane,Doe,jane@acme.com

After:
John,Smith,john@acme.com
Jane,Doe,jane@acme.com

2. Standardize phone formats

Before:
(555) 123-4567
555.123.4567
5551234567

After (pick one):
+15551234567
+15551234567
+15551234567

See Phone Number Standardization for details.

3. Validate emails

Check for:
- Missing @ symbol
- Invalid domains
- Typos (gmial, yahooo)
- Role addresses (info@, sales@)

4. Normalize text fields

Before:
JOHN SMITH
john smith
John smith

After:
John Smith

5. Standardize company names

Before:
Acme Inc
Acme, Inc.
ACME
Acme Incorporated

After:
Acme Inc

6. Handle special characters

Check for:
- Line breaks within cells (will break CSV)
- Commas in text (need quoting)
- Unicode characters (need UTF-8)

Data Validation Script

Use Python or Excel to validate before import:

import pandas as pd
import re

df = pd.read_csv('import_file.csv')

# Check for required fields
required_fields = ['email', 'firstname', 'lastname']
for field in required_fields:
    missing = df[df[field].isna() | (df[field] == '')]
    if len(missing) > 0:
        print(f"Warning: {len(missing)} rows missing {field}")

# Validate email format
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
invalid_emails = df[~df['email'].str.match(email_pattern, na=False)]
if len(invalid_emails) > 0:
    print(f"Warning: {len(invalid_emails)} invalid emails found")

# Check for duplicates
duplicates = df[df.duplicated(subset=['email'], keep=False)]
if len(duplicates) > 0:
    print(f"Warning: {len(duplicates)} duplicate emails in file")

# Preview
print(f"Total rows: {len(df)}")
print(f"Ready for import: {len(df) - len(invalid_emails) - len(duplicates)}")

Import Process

Step 1: Start Import

  1. Go to Contacts (or Companies, Deals)
  2. Click Import
  3. Choose Start an import
  4. Select File from computer

Step 2: Choose Import Type

Single object:

  • Contacts only
  • Companies only
  • Deals only

Multiple objects:

  • Contacts and Companies (associated)
  • Deals with Companies and Contacts

For related data, import in order:

  1. Companies first
  2. Contacts second (associate to companies)
  3. Deals last (associate to contacts and companies)

Step 3: Upload and Map

Upload your file, then map columns:

CSV Column          → HubSpot Property
─────────────────────────────────────────
email               → Email
firstname           → First name
lastname            → Last name
company             → Company name
phone               → Phone number
jobtitle            → Job title
website             → Website URL
linkedin            → LinkedIn (custom property)
lead_source         → Original source

Handling unmapped columns:

  • Create new property (if needed)
  • Don’t import (skip column)

Property types matter:

  • Text → Single-line or multi-line text
  • Number → Number property
  • Date → Date property (check format!)
  • Dropdown → Must match existing options

Step 4: Duplicate Handling

This is critical. Configure carefully:

Duplicate detection options:
─────────────────────────────────────────

1. Contact email address
   → Recommended for contacts
   → Unique identifier

2. Company domain name
   → Recommended for companies
   → Based on website URL

3. Don't create duplicates (update existing)
   → Import updates existing records
   → Creates new only if no match

4. Create new records always
   → Dangerous! Creates duplicates
   → Only use for truly new data

Recommended settings:

For Contacts:
  Duplicate field: Email
  Action: Update existing and create new

For Companies:
  Duplicate field: Company domain name
  Action: Update existing and create new

Step 5: Review and Import

Before clicking Import:

  1. Review the summary
  2. Check mapped fields
  3. Verify duplicate settings
  4. Note the estimated record count

Import Settings Deep Dive

Date Formats

HubSpot accepts various date formats:

Supported:
- YYYY-MM-DD (2026-01-29) — recommended
- MM/DD/YYYY (01/29/2026)
- DD/MM/YYYY (29/01/2026) — ambiguous!

Set your format:
1. During import, click the date column
2. Select correct format
3. Preview to verify

Number Properties

Correct:
- 1234567
- 1234.56
- -500

Incorrect:
- $1,234 (remove currency symbols)
- 1,234,567 (no thousand separators)
- 1.234.567 (European format)

Multi-Select Properties

For properties allowing multiple values:

Format: Semicolon-separated

Column: industries
Value: Technology;Healthcare;Finance

HubSpot stores: ["Technology", "Healthcare", "Finance"]

Associations

To associate contacts with companies during import:

Option 1: Company domain column
- Include website/domain for each contact
- HubSpot matches to existing companies

Option 2: Two-file import
- File 1: Companies
- File 2: Contacts with company domain
- Import companies first

Post-Import Validation

Immediate Checks

After import completes:

  1. Check the import summary
Records imported: 5,000
Records created: 4,200
Records updated: 800
Errors: 47
  1. Review error file
  • Download the error report
  • Fix issues in source data
  • Re-import failed rows
  1. Spot-check records
  • Open 10-20 random records
  • Verify data looks correct
  • Check associations

Validation Workflow

Create a workflow to flag imported records:

Workflow: Post-Import Validation

Trigger: Contact property "Recent import" equals "January 2026 Trade Show"

Actions:
1. Wait: 1 day

2. If/then: Data quality check
   If email is empty:
     → Add to "Import - Missing Email" list

   If company is empty:
     → Add to "Import - Missing Company" list

   If phone format is invalid:
     → Add to "Import - Bad Phone" list

3. Calculate data quality score
   (See: Salesforce Data Quality Scorecard for similar approach)

Data Quality Report

Run reports after import:

Report: Import Quality Assessment

Metrics:
- Records imported: X
- Complete records (all required fields): Y%
- Missing email: Z
- Missing company: W
- Duplicate potential: V

Breakdown by:
- Lead source
- Import batch
- Owner

Duplicate Prevention

Before Import

  1. Dedupe your file first
# Remove duplicates from import file
df_clean = df.drop_duplicates(subset=['email'], keep='first')
print(f"Removed {len(df) - len(df_clean)} duplicates")
  1. Check against existing records
Export current HubSpot contacts:
- Get all email addresses

Compare import file:
- Mark records that already exist
- Decide: update or skip?

During Import

Configure HubSpot’s duplicate detection:

  • Always use email for contacts
  • Always use domain for companies
  • Choose “Update existing” over “Create new”

After Import

Run HubSpot’s duplicate management:

  1. Go to ContactsActionsManage duplicates
  2. Review suggestions
  3. Merge legitimate duplicates
  4. Mark false positives

Import Workflows

Workflow 1: Trade Show Lead Import

Source: Trade show badge scans (CSV)

Pre-import:
1. Clean company names
2. Standardize phone numbers
3. Validate emails (remove role addresses)
4. Add custom property: Lead Source = "Trade Show - January 2026"

Import settings:
- Object: Contacts
- Duplicate handling: Email (update existing)
- Create associations: By company domain

Post-import:
1. Run deduplication check
2. Assign to appropriate owner
3. Add to trade show list
4. Trigger nurture sequence

Workflow 2: Purchased List Import

Source: Purchased prospect list

Pre-import:
1. Verify list source is legitimate
2. Heavy validation (many purchased lists are poor quality)
3. Check against suppression lists
4. Add: Lead Source = "Purchased List - [Vendor]"

Import settings:
- Object: Contacts
- Duplicate handling: Email (skip if exists)
- Do NOT update existing records

Post-import:
1. Immediate quality check
2. Email verification workflow
3. Gradual outreach (don't blast)
4. Monitor bounce rates closely

Workflow 3: CRM Migration

Source: Salesforce export

Pre-import:
1. Export Salesforce data with IDs
2. Clean and transform
3. Map Salesforce fields to HubSpot properties
4. Test with 100 records first

Import order:
1. Companies (with Salesforce ID)
2. Contacts (with company association)
3. Deals (with contact and company associations)

Post-import:
1. Validate associations
2. Check all custom properties
3. Verify data integrity
4. Update any integrations

Common Import Mistakes

Mistake 1: Importing Without Cleaning

Problem: Raw data goes straight into HubSpot

Solution:

  • Always clean in spreadsheet first
  • Standardize formats
  • Remove empties and duplicates

Mistake 2: Wrong Duplicate Settings

Problem: “Create new records” creates thousands of duplicates

Solution:

  • Always use email/domain matching
  • Default to “Update existing and create new”
  • Never blind-create

Mistake 3: Ignoring Errors

Problem: 500 errors get ignored, data is incomplete

Solution:

  • Always download error file
  • Fix and re-import failed rows
  • Track import quality over time

Mistake 4: No Post-Import Validation

Problem: Imported data silently wrong

Solution:

  • Spot-check immediately
  • Run quality reports
  • Use validation workflows

Mistake 5: Single Massive Import

Problem: 100,000 records in one import, something goes wrong

Solution:

  • Break into batches (5,000-10,000)
  • Validate each batch
  • Easier to troubleshoot

Automation for Regular Imports

Scheduled Imports

For recurring data sources:

HubSpot Operations Hub:
1. Set up data sync or workflow
2. Configure source (Google Sheets, Dropbox, etc.)
3. Map fields
4. Schedule frequency
5. Set up error notifications

API Imports

For developer-managed imports:

// HubSpot API batch create
const hubspot = require('@hubspot/api-client');
const client = new hubspot.Client({ accessToken: 'your-token' });

async function importContacts(contacts) {
  const batchInput = {
    inputs: contacts.map(contact => ({
      properties: {
        email: contact.email,
        firstname: contact.firstname,
        lastname: contact.lastname,
        company: contact.company
      }
    }))
  };

  try {
    const response = await client.crm.contacts.batchApi.create(batchInput);
    console.log('Imported:', response.results.length);
  } catch (e) {
    console.error('Error:', e.message);
  }
}

Integration-Based Imports

For tools that sync with HubSpot:

  • Clay → HubSpot integration
  • Salesforce sync
  • Marketing automation platforms

Configure sync settings carefully—same duplicate rules apply.