Intercom CSV Import — Critical Facts First:
- Company data CANNOT be imported via CSV — Intercom's CSV import is for users and leads only. Companies must be created via the UI or API.
- User CSV import updates existing users on email match — no duplicates created
- Custom user attributes: column header must match attribute name exactly (case-sensitive)
created_atfield: ISO 8601 timestamp format required (2026-03-19T14:30:00Z)- Company association via CSV: include
company_idattribute to associate imported users with existing companies - Segment assignment: CSV import does not assign segments — segments are evaluated based on user attributes after import
Quick Answer
Intercom CSV import is for users (contacts) and leads only. Company records cannot be created or updated via CSV. If you're trying to import company data, the CSV path does not exist — you need the API or manual UI entry.
Why it matters: Teams migrating to Intercom from other CRMs expect to import both contacts and companies in one CSV operation. Intercom's architecture separates these completely. Understanding this architecture before import prevents a frustrating discovery mid-workflow.
The fix for users: validate custom attribute names match exactly, format created_at as ISO 8601 if included, and use the company_id attribute to associate users with pre-existing company records.
What actually happens when company association fails:
CONSEQUENCE LADDER:
Users imported without company_id:
→ Account-based segments don't include these users
→ Company-level sequences don't trigger
→ Account health scores are missing user engagement data
→ CS team can't see which users belong to at-risk accounts
→ Churn risk undetected until renewal conversation
Revenue impact:
→ Account expansion plays require knowing which users are at which companies
→ Without association: upsell targeting is blind
→ Product usage by company is unavailable
→ QBRs lack usage data for the imported cohort
Root cause: Intercom's data model treats companies as parent records that users associate with — not as importable objects themselves. Companies must exist before users can be associated with them.
What Intercom's Error Messages Actually Mean
"Some users couldn't be imported" — One or more rows failed validation. Download the import error CSV from the import results page for per-row detail.
"Invalid attribute type for [field]" — A custom attribute received a value that doesn't match its configured data type (number field received text, date field received non-ISO format).
"User already exists — updated" — Informational. An existing user with the same email was updated. Not a failure.
"Company not found" — The company_id value in your CSV doesn't match any existing Intercom company record. The company must exist before user association via CSV is possible.
"Invalid email address" — Email format validation failed (missing @, invalid domain, non-ASCII characters).
Import completed but users have no company association — The company_id column was either missing, used the wrong ID format, or referenced companies that don't exist in Intercom yet.
Fast Fix (90 Seconds)
⏱ Expected time by error type:
- Custom attribute name fix: 5–10 minutes (check Settings → People Data)
- created_at format fix: 5 minutes (reformat to ISO 8601)
- Company association fix: 15–30 minutes (export company IDs, VLOOKUP)
- Email format fix: 5 minutes (trim spaces, remove non-ASCII)
If your Intercom import just failed:
- Download the error CSV from the import results page — per-row failure reasons
- Check the error type — attribute type errors mean field format issues; company errors mean the company doesn't exist yet
- For company association issues: export your existing Intercom companies via Settings → Companies → Export — get the correct
idvalues - Validate locally before re-importing — run through Data Cleaner without sending user data to another server
TL;DR: Intercom CSV import handles users only — not companies. Fix custom attribute type errors, format created_at as ISO 8601, and use company_id to associate users with existing companies. Use Data Cleaner — your user data never leaves your browser.
You're migrating your customer database to Intercom. You've exported contacts and companies from your old CRM. You go to import companies first. You look for the company import option. It doesn't exist.
You search Intercom's help docs. Companies cannot be imported via CSV. They must be created via the API or manually through the UI. This is not buried in a footnote — it's a fundamental architectural decision Intercom made. The CSV import is for users (people) only.
Once you understand this, everything changes: you create companies first (via API or UI), then import users with a company_id attribute that associates each user with their company.
This guide covers the full Intercom user import workflow including company association. All behavior verified against Intercom's current documentation, March 2026.
Table of Contents
- The Company CSV Limit — What It Means and Your Options
- Fix 1: Custom Attribute Type Errors
- Fix 2: created_at Format Requirements
- Fix 3: Company Association via company_id
- Fix 4: Email Validation in Intercom
- Intercom CSV Import Template Reference
- Additional Resources
- FAQ
The Company CSV Limit — What It Means and Your Options
This is the most important thing to understand before attempting any Intercom import.
INTERCOM DATA MODEL — WHAT CSV IMPORT COVERS:
CSV IMPORT: ✅ Users (people), ✅ Leads
CSV IMPORT: ❌ Companies (organizations), ❌ Events, ❌ Custom Objects
WHY companies aren't CSV-importable:
Intercom's company records are parent objects. Users associate with companies
via a company_id. The architecture requires companies to exist before
user-company associations can be created.
YOUR OPTIONS FOR COMPANY DATA:
Option 1 — Intercom API (recommended for bulk company creation):
POST /companies with name, company_id, and custom attributes
Requires API access and basic scripting ability
Option 2 — Manual UI entry:
Intercom → Companies → New Company
Practical only for small numbers of companies (<50)
Option 3 — Third-party integration:
Segment, Census, Hightouch, or similar tools can sync company data from
your data warehouse to Intercom without manual API calls
Once companies exist in Intercom:
→ Export companies via Settings → Data → Export
→ Get the Intercom-generated company IDs
→ Map those IDs to your user CSV's company_id column
→ Import users — they will be associated with the correct companies
CORRECT IMPORT WORKFLOW:
Step 1 → Create companies in Intercom (API or UI)
↓
Step 2 → Export company IDs from Intercom
↓
Step 3 → Map IDs to your user CSV (VLOOKUP)
↓
Step 4 → Import users with company_id column
↓
Step 5 → Users are associated with correct companies ✅
WRONG WORKFLOW (what teams try first):
Step 1 → Try to import companies via CSV ❌
↓
"Company import" option does not exist in Intercom
↓
Search for it for 20 minutes, find nothing
↓
Import users anyway without company_id
↓
Users imported — company associations all blank ❌
↓
Re-import required with correct company_id values
⚠️ Migration trap — the most expensive Intercom mistake:
If you import users BEFORE creating companies:
Result:
→ All users import successfully (no errors)
→ company_id column references companies that don't exist yet
→ Intercom silently ignores the company_id values
→ Import summary shows 0 errors — everything looks fine
→ You trigger onboarding sequences
→ Two weeks later: every user in Intercom has no company association
→ Account-based reporting is useless
→ Fix requires: create companies, then re-import all users with company_id
Time cost: 2+ hours of re-work
Prevention: create companies first, always
This is the single most common Intercom migration failure. The fix is architectural, not technical — change the order of operations, not the file format.
🚨 Import Success ≠ Company Association in Intercom
Intercom's import summary is the most misleading success message in any CRM context:
INTERCOM IMPORT SUMMARY — WHAT IT HIDES:
"3,847 users imported successfully"
What it tells you:
→ User records were created or updated ✅
What it does NOT tell you:
→ Whether company_id values matched existing companies
→ Whether custom attributes populated correctly
→ Whether created_at preserved original dates
Silent failure: you can have 3,847 "successfully imported" users
with zero company associations, wrong attribute values, and
created_at set to today's date — all in one "successful" import.
"Successfully imported" = records exist in Intercom.
It does not mean = data is correct.
Always open 5 imported users and verify fields manually.
Fix 1: Custom Attribute Type Errors
Intercom custom user attributes have specific data types (string, number, boolean, date). The value in your CSV must match the attribute's configured type.
❌ BROKEN — custom attribute type mismatches:
Intercom attribute: "Monthly Revenue" (type: number)
CSV value: "$5,000" → ❌ currency symbol and comma — not a number
CSV value: "5000" → ✅ plain integer accepted
CSV value: "5000.00" → ✅ decimal accepted
Intercom attribute: "Account Tier" (type: string)
CSV value: "Enterprise" → ✅ string is flexible
CSV value: "1" → ✅ string accepts numeric-looking values
Intercom attribute: "Trial Started" (type: date)
CSV value: "03/19/2026" → ❌ not ISO 8601
CSV value: "2026-03-19" → ❌ date only without time — may be accepted or may fail
CSV value: "2026-03-19T00:00:00Z" → ✅ full ISO 8601 with time and timezone
Intercom attribute: "Is Churned" (type: boolean)
CSV value: "true" → ✅ lowercase boolean
CSV value: "True" → depends on Intercom version — use lowercase to be safe
CSV value: "Yes" → ❌ not a boolean — use "true" or "false"
CSV value: "1" → ❌ numeric boolean not accepted — use "true" or "false"
HOW TO CHECK ATTRIBUTE TYPES:
Settings → People Data → Custom Data → view each attribute's type
Match your CSV values to the type shown for each attribute.
Fix 2: created_at Format Requirements
The created_at field in Intercom represents when the user record was originally created (e.g., when they first signed up in your product). If you include this field in your import, it must be formatted as a Unix timestamp (seconds since epoch) or ISO 8601 datetime.
CREATED_AT FORMAT OPTIONS:
Unix timestamp (recommended for precision):
1710849000 → ✅ March 19, 2026 14:30:00 UTC
1710849000.000 → ✅ milliseconds also accepted by some Intercom versions
ISO 8601 datetime (human-readable alternative):
"2026-03-19T14:30:00Z" → ✅ UTC timezone (Z suffix)
"2026-03-19T14:30:00+00:00" → ✅ UTC with explicit offset
"2026-03-19T14:30:00" → ⚠️ no timezone — may default to UTC or reject
"2026-03-19" → ❌ date without time — rejected
"03/19/2026" → ❌ US date format — rejected
"March 19, 2026" → ❌ long-form date — rejected
CONVERT DATES TO UNIX TIMESTAMP IN EXCEL:
=(A2-DATE(1970,1,1))*86400
Where A2 contains a standard Excel date value.
This gives you seconds since Unix epoch (January 1, 1970).
Why include created_at at all? If you don't include it, Intercom sets the user's creation date to the import date — losing the original signup history. For migrating users from another system, preserving original creation dates is important for lifecycle reporting and customer tenure calculations.
Fix 3: Company Association via company_id
Since you can't import companies via CSV, company association happens through the company_id attribute in your user import file. This attribute must match the company_id of an existing Intercom company record.
COMPANY ASSOCIATION WORKFLOW:
Step 1 — Create companies in Intercom (choose one method):
a) API: POST to /companies with your company data
b) UI: Intercom → New Company (for small numbers)
c) Integration: Segment/Census sync from data warehouse
Step 2 — Export company IDs from Intercom:
Settings → Data → Export → Companies
The export includes Intercom's internal company IDs
Step 3 — Map company IDs to your user CSV:
Your source data: User "[email protected]" belongs to "Acme Corp"
Intercom export: "Acme Corp" has company_id = "comp_abc123"
VLOOKUP: match company name → get company_id
Step 4 — Add company_id column to user CSV:
email,name,company_id
[email protected],Alice Chen,comp_abc123
[email protected],Bob Smith,comp_abc123
[email protected],Carol Jones,comp_def456
Step 5 — Import users with company_id column
Intercom associates each user with the matching company automatically.
❌ BROKEN — company_id not found:
company_id: "ACME-001" ← your internal CRM ID, not Intercom's ID
company_id: "Acme Corp" ← company name, not ID
company_id: "123456" ← wrong ID format
FIXED — using Intercom's actual company ID:
company_id: "comp_abc123" ← from Intercom company export
❌ BROKEN — company_id column using wrong ID format:
Your user CSV:
email,name,company_id
[email protected],Alice Chen,ACME-001
[email protected],Bob Smith,Acme Corp
[email protected],Carol Jones,456
Intercom behavior:
[email protected] → company_id "ACME-001" → not found (your internal ID, not Intercom's)
[email protected] → company_id "Acme Corp" → not found (company name, not ID)
[email protected] → company_id "456" → not found (numeric, not Intercom's comp_ format)
Import result: 3 users created, 0 company associations.
No error shown. Import summary says "3 users imported."
FIXED — using Intercom's actual company IDs (from company export):
email,name,company_id
[email protected],Alice Chen,comp_abc123
[email protected],Bob Smith,comp_abc123
[email protected],Carol Jones,comp_def456
Import result: 3 users created, all associated with correct companies.
HOW TO GET INTERCOM COMPANY IDs:
Settings → Data → Export → select Companies → download CSV
The "id" column contains the comp_xxxxxxxx format IDs to use.
Fix 4: Email Validation in Intercom
Intercom's email validation follows standard format rules with a few additional behaviors:
INTERCOM EMAIL VALIDATION:
Standard validation (same as most CRMs):
✅ [email protected]
❌ alice @company.com (space before @)
❌ alicecompany.com (missing @)
❌ alice@ (missing domain)
Intercom-specific behavior:
→ Email updates: if you import a user with an email that already exists,
the existing user is UPDATED — not a new user created
→ Multiple emails: Intercom supports multiple email addresses per user via API,
but CSV import only handles one email per row
→ Unsubscribed users: import does not change email subscription status —
previously unsubscribed users remain unsubscribed after CSV update
DUPLICATE HANDLING:
Intercom deduplicates on email address.
Same email = update existing user.
This is usually correct — verify import values before uploading if you're
unsure whether you want to overwrite existing attributes.
Company Association Checklist
Use this before every Intercom user import where company association is needed.
COMPANY ASSOCIATION CHECKLIST:
□ Step 1: Companies exist in Intercom
→ Go to Intercom → Companies
→ Confirm all companies in your import are already created
→ If any are missing: create via API or UI before continuing
□ Step 2: Export Intercom company IDs
→ Settings → Data → Export → Companies
→ Open the export CSV
→ Identify the "id" column (format: comp_xxxxxxxx)
→ Save this as your company_id reference file
□ Step 3: Map your user data to Intercom company IDs
→ In your user CSV: add a "company_id" column
→ VLOOKUP: =VLOOKUP([company name], company_reference, [id column], FALSE)
→ Verify: spot-check 5 rows — company names resolved to correct IDs?
□ Step 4: Validate company_id values before import
→ Check for blank company_id rows (user has no company → expected or error?)
→ Check for "N/A" or "#N/A" VLOOKUP errors → company not found in Intercom
→ Fix any #N/A rows before importing — these will fail silently
□ Step 5: Import users
→ Include company_id column in final CSV
→ After import: open 3 users → verify company association shows correctly
→ If blank: company_id value didn't match any existing company
Time to complete checklist: 15–20 minutes
Failures prevented: all silent company association errors
Intercom CSV Import Template Reference
Use this table to build your import file correctly on the first attempt.
| Column Name | Required | Format | Notes |
|---|---|---|---|
email | Yes | standard email | Dedup key — existing user updated on match |
name | No | text | Full name or display name |
user_id | No | text | Your internal user ID — use for API dedup key |
created_at | No | Unix timestamp or ISO 8601 | Original signup date — defaults to import date if omitted |
company_id | No | Intercom company ID | Must match existing Intercom company record |
[custom attribute] | No | matches attribute type | Column header = exact attribute name |
How custom attribute column names work:
- Column header: exact attribute name as defined in Settings → People Data
- Case-sensitive in most Intercom versions — "Monthly Revenue" ≠ "monthly revenue"
- Spaces in names: include as-is — "Monthly Revenue" not "Monthly_Revenue"
- New attributes: if your CSV includes a column that doesn't match any existing attribute, Intercom creates a new custom attribute (if you have permissions) or fails silently
✅ How to Confirm Your Intercom Import Worked
- Check the import results page — shows: total rows, users created, users updated, rows failed. Download the error CSV if any rows failed.
- Open 3 imported users — verify custom attributes populated correctly, company association shows the right company,
created_atshows the original date (not today's date). - Search by a known email — confirm the user exists in Intercom and attributes are correct.
- Check company association — open a company that should have associated users. Verify the user count and the specific users are listed.
🔁 Safe Re-Run Workflow
Intercom deduplicates on email — re-importing a partially successful file is safe. Existing users are updated, failed rows are retried. No duplicates are created.
For rows that failed due to missing company associations: create the companies first (API or UI), then re-import the failed rows with the correct company_id values.
⚠️ Edge Case: If you import a user who is already in Intercom as a Lead (not a User), the import behavior depends on your account's lead conversion settings. In some configurations, importing a Lead's email as a User converts the Lead to a User automatically. Verify this behavior with your Intercom admin before bulk-importing if you have an active Lead pipeline.
🛡 Prevent This Next Time
- Create the API company import workflow before your next migration — company CSV import won't arrive in Intercom. Build a simple script or use a sync tool (Segment, Census) to handle company data. Having this workflow ready prevents the blocking step that most teams hit mid-migration.
- Export Intercom company IDs before every user import — company IDs change if you re-create companies. Always pull a fresh export.
- Map
created_atat the source — preserve original signup dates in your data warehouse or CRM export. Converting and includingcreated_aton every import keeps your historical data accurate.
⏱ Recovery Cost: Import Order Matters
The company-before-users rule is not a preference — it's architecture. Getting it wrong has a specific recovery cost:
| Did This | Recovery Required | Time |
|---|---|---|
| Created companies first, imported users | Nothing — correct workflow | — |
| Imported users without company_id | Re-import all users with company_id | 30–60 minutes |
| Imported users with wrong company_id format | Create companies → export IDs → re-import | 1–2 hours |
| Didn't include created_at | Re-import to fix dates (all users updated) | 30–60 minutes |
| Triggered sequences before verifying | Sequence fired to users with no company context | Days to recover attribution |
The company_id mapping step (VLOOKUP from Intercom export) takes 15–20 minutes. The re-import after getting it wrong takes 1–2 hours — and if sequences have already fired, there's no clean recovery for the attribution data.
🧠 Cross-CRM Pattern: The "import order matters" principle — create parent records before child records — applies across all CRM platforms. In Salesforce, import Accounts before Contacts. In HubSpot, create Companies before importing Contacts with company association. In Intercom, create Companies before importing Users. In every platform, the child-to-parent relationship fails silently when the parent doesn't exist yet. Build this order-of-operations awareness into every CRM migration you run.
Why Validate Intercom Import Files Locally
Intercom import files contain your product's user base — names, email addresses, behavioral attributes, account tier, and revenue data. This is among the most sensitive customer data in a SaaS company's stack. Many teams clean these files in cloud-based tools before importing, creating an exposure point separate from Intercom's own data processing.
SaaS customer data is subject to GDPR Article 6 obligations (lawful basis for processing) and may require GDPR Article 28 Data Processing Agreements with any tool that receives the data — including pre-import validation services. SplitForge validates files in Web Worker threads in your browser — for raw file contents, nothing is transmitted to any server during processing.
For general CRM import error codes, see CRM import error codes explained. For email validation before import, see email validation before CRM import. For the complete CRM import guide, see CRM import failures complete guide.
Additional Resources
Tested: Intercom user import behavior, CSV format requirements, and company association workflow verified against Intercom Developer Documentation and Intercom Help Center. March 2026.
Official Intercom Documentation:
- Intercom: Import users with CSV — Official CSV import guide
- Intercom: Importing your contacts — Updated contact import reference
- Intercom Developer: Companies API — API path for company data since CSV import is unavailable
Standards:
- ISO 8601 — Date and time format — Required format for Intercom's
created_atfield - GDPR Article 28 — Processor obligations — Applies when validation tools receive your Intercom user files
Related Guides:
- HubSpot CSV Import Contact Properties — Similar user/contact import patterns
- CRM Import Error Codes Explained — Cross-platform error taxonomy