Skip to content

Importing your leads

CSV import with column mapping and duplicate detection — and how to avoid the two mistakes everyone makes.

3 min readUpdated 30 July 2026
Lead capture
Six intake paths, one lead record
Meta Lead Ads
Campaign, adset, ad and form attached to the lead
Google Ads
GCLID captured at the form for offline conversions
WhatsApp
An inbound message becomes a lead and a thread
Website forms
Public capture endpoint, no login, spam-guarded
IVR & calls
A call to a virtual number creates or matches a lead
CSV & REST API
Bulk migration and anything else you already run
Whichever path a lead arrives on, deduplication runs before assignment — so two agents never call the same person.

Go to Settings → Import.

Preparing your file

A CSV with a header row. The importer will show you every column and let you map it, so the column *names* do not need to match anything.

The only genuinely required field is a name. Everything else is optional — but a lead with no phone number and no email cannot be contacted, so the importer will warn you if a row has neither.

A minimal file looks like this:

csv
Name,Phone,Email,City,Source,Notes
Aarav Patel,9812300045,aarav@example.com,Mumbai,Google Ads,Asked about pricing
Diya Shah,9820011122,diya@example.com,Pune,Referral,Referred by existing customer

Mapping columns

The importer guesses from your header names and shows you what it matched. Check the guesses — "Contact" could reasonably mean a name or a phone number, and it will pick one.

You can map to:

  • Standard fields — name, phone, email, city, state, source, stage, owner, estimated value
  • Any custom field you have created
  • Skip — for columns you do not want

Duplicate handling

Before creating anything, the importer checks every row against your existing leads. Matching is on phone number and email, normalised — so +91 98123 00045 and 9812300045 are recognised as the same person.

You choose what happens to a match:

OptionBehaviour
SkipLeave the existing lead untouched
UpdateFill in blank fields on the existing lead, keep what is already there
Create anywayImport as a new lead and flag it as a possible duplicate

Update is the right default for most imports.

The two mistakes everyone makes

Importing before setting up stages

If your CSV has a Stage column with values that do not exist in your workspace, those leads land in your entry stage instead. Create your stages first, then import.

Importing with distribution switched on

Warning
Historical leads are not new leads. If distribution is active when you import three years of history, every one of those records gets assigned to a telecaller as fresh work — and your team will spend a day calling people who bought long ago.

Turn distribution off, import, assign historical leads in bulk to whoever should own them (or to nobody), then turn distribution back on.

After the import

The importer shows a summary: created, updated, skipped and failed, with a downloadable file of any rows that failed and why.

Failed rows are almost always a date in an unexpected format or a required custom field left blank. Fix the file and re-import just those rows — the duplicate check means you cannot accidentally double up.

Larger migrations

For more than about 50,000 rows, or if you are moving from another CRM with activity history and attachments, contact support. We do these regularly and it is included on Growth and above.

Something unclear or missing? Tell us and we will fix the page — send us a note.

Importing your leads — Documentation — atomcrm.ai