Importing leads via CSV
Upload a CSV of leads to add them to a campaign. No credits used. Here's the format, the required fields, and how to check the column mapping is right.
If you already have a list of people you want to email, the fastest way to get them into a campaign is to upload a CSV. CSV uploads use no credits. The credit-based AI Lead Search is for when you don't have a list yet.
This page covers the format, the required fields, the upload flow, and what to check before confirming.
Where to find it
| From | How |
|---|---|
| New campaign wizard | Lead source step → Upload Your Own |
| Existing campaign | Campaign detail → Leads tab → Import Leads button (top right of the leads table) |
Both open the same flow.
File requirements
| Limit | Value |
|---|---|
| Format | .csv only — Excel files (.xlsx / .xls) are not supported. Open them in Excel / Numbers / Google Sheets and re-export as CSV first. |
| Row count | Up to 20,000 rows per file. Split larger lists into multiple uploads. |
| File size | Up to 100 MB. |
Required columns
Every row needs values for these fields. Rows missing any of them are rejected during validation.
| Required field | What goes in the column |
|---|---|
| Name | A full name, or separate first/last name columns mapped into the Name field |
| A valid email address | |
| Industry | The industry the lead's company is in (e.g. SaaS, Construction, Healthcare) |
You can have a single Full name column, or separate First name and Last name columns — the mapping step lets you map either format.
Recommended columns (optional but worth having)
These don't block the upload, but they unlock personalization variables in your sequence. Without them the variable renders as blank.
| Column | Powers the variable |
|---|---|
| Job title | {{title}} |
| Company | {{companyName}} |
| LinkedIn URL | {{linkedin}} |
| Phone | {{phone}} |
| Number of employees | {{employees}} |
| City | {{city}} |
| State | {{state}} |
| Country | {{country}} |
| Tags (comma-separated) | Adds tags to each lead for filtering later |
You can also map any other column as a custom variable — useful for personalisation that doesn't fit the standard fields (a recent news mention, a piece of context, an opener hook).
The upload flow
Upload the CSV
Drag the file onto the upload zone, or click Choose a .CSV file. You can also click Download template if you want a starter CSV with the expected column headers.
Check the column mapping
This is the step that goes wrong most often. The import screen shows File Column on the left and Attribute on the right. The platform reads your column headers and tries to auto-map each one to a known field — but the auto-mapper is a fuzzy match. It won't always get it right.
A header like email maps cleanly. A header like Email Address, e-mail, Primary Email, or work_email may or may not map automatically. Same for first/last names with separators (First_Name, given name, firstname) and for company columns (Employer, Org, Account).
Before clicking Next, check every required field is mapped to the right column. Open each mapping dropdown and confirm the source column name actually contains that data. The required fields above are the non-negotiable ones — those mappings being wrong means the upload either fails or imports the wrong data into the wrong field.
A few checks that catch most problems:
- Does First name point at a column that actually contains first names — not full names, not titles?
- Does Email point at the column with email addresses — not at a "secondary email" column?
- Does Industry point at an industry column — not at a job title or department?
- Does Company name point at the company column — not at a "company website" or "company description"?
Also check for false positives. For example, a column called Stage can be guessed as an unrelated standard field. If a column should not be imported, set it to No mapping selected.
Anything you don't map is ignored by the import.
Map extra columns as custom variables
For extra CSV columns you want to keep for personalization, open the column's mapping dropdown and choose Map as {{Column Name}}. The mapped value becomes a custom variable you can use later in the sequence.
(Optional) Turn on email verification
The upload footer has a checkbox labeled Automatically verify lead emails on upload. It is off by default. With it on, every email is checked before being added to the campaign — invalid addresses get filtered out before they can hurt your bounce rate.
| Switch it on when | Switch it off when |
|---|---|
| The list came from a third party (purchased, shared, scraped externally) | The list is from a recent export of known-good contacts |
| It's more than a few months old | It came from a CRM with active records you maintain |
| You've had bounce-rate issues on previous campaigns | Speed matters more than safety on this list |
Verification adds a few minutes to the import.
Review values
The Review values step shows the rows with your mapping applied. It also shows validation errors by column, with a Show only rows with errors checkbox.
Rows with validation errors are skipped if you continue. Fix the cells in the table, go back to mapping, or restart with a corrected CSV if the errors are widespread.
Preview import and confirm
The Preview import step shows a Confirm Import summary before the import runs:
- How many valid records will be imported.
- How many rows have validation errors and will be skipped.
- Whether the import fits inside your Workspace Contact Capacity.
When the preview looks right, click Import N leads.
Wait for the import to finish
Small files (a few hundred rows) finish in seconds. Larger files (thousands of rows, or any file with email verification on) run as a background job — you'll see a progress card on the Leads tab.
Check the results
When the import is done:
- New leads show up in the Leads tab with Active status (ready, but not yet emailed).
- A summary tells you how many rows imported, how many were skipped as duplicates, and how many failed validation.
How duplicates work
The platform checks for duplicates across every campaign that still exists in your workspace, including paused, draft, and completed ones. Only deleted campaigns stop counting. A lead that's already in another campaign is skipped by default. This prevents the same person being emailed by two of your campaigns at once.
To force-add a lead that's flagged as a duplicate, open the other campaign, go to its Leads tab, select the lead, and click Delete Selected. Then re-import.
You'll know the import worked when…
- The Leads tab shows the new leads with Active status.
- Clicking into any lead shows the fields populated as expected — name, company, title, industry filled in, not blank.
- A sequence preview correctly fills in personalization variables for those leads.
- If the campaign is Active, it starts sending to them in its next sending window. If the campaign is still a Draft, nothing sends until you launch it.
If something's not right
A row count or "rows rejected" message
The most common cause: a required field (Name, Email, or Industry) is blank on those rows. Open the source CSV, fill in the missing values, and re-upload.
The other common cause: an invalid email — typos, missing @, extra spaces. Fix in the source file.
My personalisation variables are rendering blank
Two causes:
- The column wasn't mapped during the upload. Open a lead's record from the Leads tab — if the field is empty, the variable can't fill in. Re-import with the right mapping.
- The column was mapped but lots of source rows are blank. Same fix.
The CSV won't upload
Most often the file isn't a real CSV — it's an Excel file renamed, or an export with weird encoding. Open it in Excel, Numbers, or Google Sheets and Save As → CSV (UTF-8). Re-upload.
Most of my leads got skipped as duplicates
They're already in another active campaign in this workspace. Either work with them in that campaign, or remove them from the other campaign before re-importing here.
I can't find the Import Leads button on an existing campaign
It's on the Leads tab of the campaign — the top of the leads table, alongside Add Leads and Export CSV. If you can't see it, your role may not have permission to add leads — ask the workspace admin.
Email verification flagged a lot of invalid emails
Normal on older lists — addresses bounce, people change jobs, accounts deactivate. If more than 10% are invalid, regenerate the list from its original source (or run it through a dedicated verification service) before re-uploading.
Related
- Leads tab — where imported leads land and how to manage them
- AI Lead Search — the credit-based alternative when you don't already have a list
- Personalization — why column mapping matters
- Credits — confirming CSV uploads cost no credits
- Lead lifecycle — what happens to leads after import
- Lead Search FAQ — common upload questions