Skip to content
NewSee how

Import contacts from CSV (column mapping)

Upload a CSV, map its columns to FirstSales fields, and bulk-import contacts into a list. With automatic email cleaning.

  1. Open the importer

    On Contacts, click Import Contacts to slide open the CSV import panel.

  2. Pick the destination list

    Choose a Contact List at the top of the panel. The file picker stays disabled until a list is selected: every imported contact needs a home.

    Pick the destination list
  3. Upload your CSV

    Drag or click to select a .csv file. FirstSales accepts files up to 5MB and 10,000 rows. If you're not sure what shape the file should be, click Download sample CSV first to see the expected header row.

  4. Review the auto-detected stats

    Before you import anything, the panel shows Total, Valid (rows with a well-formed email), and No Email counts, so you know exactly what will and won't come in.

  5. Map your columns

    Each CSV header maps to a FirstSales field: Email is the only required one. Recognized headers (like emailaddress or jobtitle) auto-map for you; adjust anything that mapped wrong or set a column to Skip. Columns that don't map to a target field are kept as custom fields, not discarded.

  6. Add list-wide tags (optional)

    Type a tag and press Enter to chip it. Any tags you add here are applied to every contact in this import, which is a fast way to mark a whole batch for later segmentation.

  7. Import and read the result

    Click Import. The done panel reports Imported, Duplicates, Errors, and Total, plus a cleaning summary if auto-cleaning is turned on for your workspace.

Pro tips

  • Only Email is required

    Every other target field is optional. Leave columns you don't need on Skip instead of forcing a mapping.

  • Semicolon-separate tags in one cell

    Put multiple tags in a single CSV cell like `saas;marketing` and map that column to Tags: each value becomes its own tag on import.

  • Nothing in your file is lost

    Any header FirstSales doesn't recognize is saved as a custom field on the contact, even without a matching target field.

  • Turn on cleaning before you import

    Enable Contact cleaning in Tools settings first, so dead emails are caught at 0.2 credits per new contact: you're only charged for brand-new contacts.

Frequently asked questions

What's the maximum file size and row count?

5 MB and 10,000 rows per file. Split larger exports and import them in batches.

Which column is required?

Only Email. The import button stays disabled until one column maps to Email and at least one row has a valid address.

What happens to duplicate contacts?

They're detected on import and reported in the Duplicates count. Existing contacts are added to the destination list rather than re-created.

My CSV has columns FirstSales doesn't list: are they lost?

No. Unmapped columns are stored as custom fields on each contact.

How do I add several tags at once from the file?

Use one column with semicolon-separated values and map it to Tags, or type panel-level tags that apply to every row in the import.

What if I run out of credits during import?

Contacts still import, but email cleaning is skipped and you'll see an “imported but not verified” notice with a top-up link. You can re-run cleaning later from the contacts table.

Does importing send any emails?

No. Import only adds contacts to a list. If that list feeds an active campaign, enrolment is a separate step: see the list-transfer flow for how enrolment confirmation works.

List Management

Outreach that keeps going after you log off.Leads, emails, follow-ups and replies, handled.

Connect unlimited mailboxes and let AI agents find leads, write each email and follow up. Or send your own templates in manual mode. From $29/mo.

$1 for 3 days · Cancel anytime · No contract

Install with AI

Your coding agent sets up the FirstSales CLI and skills for you.

Prompt for Claude Code

I'm setting up FirstSales (https://firstsales.io), an AI outbound sales platform: campaigns, contacts, a reply inbox, deliverability and lead signals. Help me get my workspace sending real, good emails end to end, from Claude Code.

Read these first so you know how FirstSales works:
- Developer docs and API: https://developer.firstsales.io
- CLI: https://www.npmjs.com/package/@firstsales.io/cli
- Skills for coding agents: https://github.com/firstsalesio/firstsales-skills (read README.md and GUIDE.md)

Setup
1. Install the CLI: npm install -g @firstsales.io/cli
2. Install the FirstSales skills:
   claude plugin marketplace add firstsalesio/firstsales-skills
   claude plugin install firstsales@firstsales
3. Ask me if I already have a FirstSales account. If not, send me to https://app.firstsales.io to sign up.
4. Ask me to create an API key under Settings → API → API Keys, with only the scopes we need.
   Never ask me to paste the key into this chat. Tell me to run this in my own terminal, so the key stays hidden:
   read -rs FS_KEY && firstsales auth login --api-key "$FS_KEY"; unset FS_KEY
5. Run `firstsales whoami` and tell me which workspace and organisation we are connected to.

Then ask me about my business: what I sell, who I sell to (roles, company size, countries), my best customers, and what I use today for outbound (tools, lists, mailboxes). Walk me through:
1. Teaching FirstSales my business: website, offer, proof points and case studies in the knowledge base, so the AI writes like someone who knows the product.
2. Connecting my sending mailboxes and checking my sending domain: SPF, DKIM, DMARC and warm-up. If anything is unhealthy, tell me the exact DNS record to add.
3. Bringing in contacts: import my CSV or CRM export into a clean list, remove duplicates and bad emails, and block domains I must never email (customers, competitors, my own).
4. Building my first campaign: the right list, senders, steps and timing. Write the sequence with me, show me the drafts, and do not launch until I say yes.
5. Setting up Signals if it fits: find people engaging with LinkedIn posts about topics my buyers care about, and turn them into leads.
6. Inviting my team and giving each person the right access.

Once campaigns run, show me how to work the reply inbox from here: which replies need an answer, draft responses in my voice, and move good conversations into deals. If I use Cal.com, connect it so follow-ups can offer my booking link (not the first email).

Throughout, as you learn about my business, proactively suggest and help create:
- Reply templates for the questions and objections my prospects are likely to raise, based on my product, site and codebase if you can see them.
- Campaign ideas and segments worth testing, with the reason for each.

Safety rules:
- Show every change as a dry run (--dry-run) first and wait for my yes. Never send emails, launch campaigns or delete anything without my yes.
- Tell me before anything that spends credits, and how many.

Be opinionated. If the docs give a sensible default, just use it. Don't make me choose between five options.