LealUp Docs
Integrations

Import CSV

Bulk load customers from CSV — required columns, mapping, validation, best practices.

CSV import is the fastest way to populate LealUp on day one, especially if you're migrating from Gainsight, ChurnZero, Planhat, or just a spreadsheet.

When to use it

  • Initial onboarding — import your entire book (20–2000 customers in minutes).
  • Migrating from a previous CS tool — export → import is the universal path.
  • Bulk update — change owner on many customers at once, update tier, etc.
  • Backfill of custom fields — populate a new field for the whole book.

Where

Admin → Customers → Import CSV

Requires admin or director role.

Required columns

Your CSV must have at least these columns (case-insensitive, we accept multiple common names):

ColumnAccepted alternativesType
namecustomer_name, company, account_nametext
email_domaindomain, primary_domaintext
arrarr_usd, annual_revenue, acvnumber
owner_emailcsm_email, csm, owneremail
ColumnWhat for
statusActive, Trial, Churned, Paused (default: Active)
renewal_dateISO 8601 date (YYYY-MM-DD)
countryISO 3166 code (CL, MX, BR, US, etc.) or name
segmentvalue that matches your segment configuration
tierPlatinum / Gold / Silver / Bronze
industryFintech / Retail / Healthtech / etc.
created_atwhen the customer started with you (defaults to today)

Custom fields

Any column prefixed with cf_ is treated as a custom field:

  • cf_tier → maps to the tier custom field.
  • cf_acv_target_usd → maps to acv_target_usd.

The field must be created beforehand in Admin → Custom fields. If it doesn't exist, LealUp offers to create it during import.

Wizard flow

  1. Upload file — max 10 MB, .csv format (UTF-8 recommended, also supports latin-1).
  2. Preview — LealUp shows the first 10 rows, auto-detects headers.
  3. Mapping — CSV columns ↔ LealUp fields. Auto-suggests, but you can override.
  4. Validation — errors and warnings per row:
    • Invalid email → error (row skipped).
    • Non-numeric ARR → error.
    • Domain duplicate with existing customer → warning (option: skip / update / merge).
    • Non-existent custom field → warning (option: create or skip).
  5. Dry-run report — summary: "Create X, update Y, skip Z". Downloadable as a log.
  6. Confirmation — click "Import".
  7. Background processing — for big CSVs (>500 rows), it runs async. Notification on finish.

Minimum CSV example

name,email_domain,arr,owner_email
Acme Inc,acme.com,145000,[email protected]
Globex,globex.io,80000,[email protected]
Initech,initech.cl,32000,[email protected]

Example with optional and custom fields

name,email_domain,arr,owner_email,renewal_date,segment,cf_tier,cf_industry
Acme Inc,acme.com,145000,[email protected],2026-06-15,Enterprise LATAM,Platinum,Fintech
Globex,globex.io,80000,[email protected],2026-08-20,Mid-Market,Gold,Retail

Validation in detail

Errors (row is not created)

  • Owner email doesn't exist in the workspace as an active user.
  • Non-numeric or negative ARR.
  • Empty domain when it's a required column.
  • Wrongly-formatted date (renewal_date must be ISO 8601).
  • DROPDOWN value out of range (e.g., tier: Ultra when you only have Platinum/Gold/Silver).

Warnings (row is created with reservations)

  • Duplicate domain — a customer with that email_domain already exists. Choose: skip (default), update (merge fields), or create-anyway (rare).
  • ARR = 0 — created but flagged as "no ARR".
  • Unrecognized country — created but flagged.

Info (non-blocking)

  • Customers in Trial with ARR — OK, feeds the tier/plan calculation.
  • Name duplicates — if there's no domain but there is a name, warning "possible duplicate".

Matching existing customers

When importing, LealUp searches in order:

  1. email_domain exact match.
  2. external_id (if you're setting it via an external_id column).
  3. Fuzzy name match (threshold 90%).

If there's a match, it offers options:

  • Skip — don't touch.
  • Update — update fields that are empty in LealUp with values from the CSV.
  • Overwrite — overwrite with CSV values (destructive, requires confirmation).

Bulk update

If your CSV has only customers that already exist (all match), the flow is effectively a bulk update:

  • All new ARRs overwrite the old ones.
  • New owner_email reassigns ownership.
  • Custom fields get updated.

Useful for:

  • Updating ARR after an annual RevOps exercise.
  • Massively reassigning a book when a CSM leaves.
  • Updating a new field for the whole portfolio.

Rollback

If after the import you find an error:

  • Admin → Audit log → Filter by "bulk_import" → find the import ID.
  • Undo import → reverts every change in that operation.

Window: 24h from the import. After that, manual.

Migrate from Gainsight / ChurnZero / Planhat

Suggested process:

1. Export from the previous tool

  • Gainsight: Companies → Export (full CSV with custom fields).
  • ChurnZero: Accounts → Export.
  • Planhat: Companies → Export.
  • Custify: Customers → Export.

2. Clean the CSV

  • Rename columns to LealUp's standard names (or map in the wizard).
  • Remove columns you don't care about (simpler).
  • Verify date formats (ISO 8601).

3. Import with dry-run

  • First pass: dry-run only (no commit).
  • Review errors and warnings calmly.
  • Adjust the CSV or mapping.

4. Real import

  • Commit it.
  • Sample-check customers (pick 3–5 random ones and verify everything's fine).

5. Complement with integrations

  • Connect Gmail/Calendar → the timeline rebuilds going forward (no historical import).
  • Connect Zendesk/Jira for support.
  • Optional: import historical events via POST /v1/ingest/events batch.

6. Recreate playbooks

  • Playbooks don't migrate automatically (different logic between tools).
  • Start with LealUp's 5 seeded playbooks and adapt.

Common issues

"UTF-8 breaks with Latin characters"

  • Save the CSV as UTF-8 with BOM.
  • If your CSV comes from Excel, use "Save As → CSV UTF-8".

"LealUp says 'too many errors'"

  • If >25% of rows fail, the import pauses to review.
  • Download the log, fix the CSV, retry.

"Import got stuck in processing"

  • Large CSVs (>5000 rows) run async.
  • Admin → Audit log → Imports — see status.
  • If it stayed "processing" >2h, contact support with the import ID.

"Customers without owner"

  • If an owner_email from the CSV doesn't exist as an active user, the row fails.
  • Fix: create the users first in Admin → Team, then re-import.

Limits

  • Max 10 MB per file (approx 50k rows with typical columns).
  • Max 10 concurrent imports in queue per workspace.
  • Columns: max 50 per CSV.

For larger volumes, contact support (Scale/Enterprise can use the POST /v1/admin/bulk-import endpoint directly via API).

On this page