Importing a CSV contact file into Emelia

Your file becomes a lead list, which you then plug into one or more campaigns. Here is how to prepare it, import it, map its columns, and avoid the two mistakes that cost the most: contacts lost on import, and prospects who get the same email twice.

How Emelia stores your contacts

In Emelia, contacts live in lists, grouped under the Lead Lists menu. A campaign does not hold a file: it points to one or more lists and works out its recipients from them, minus the lists you exclude.

In practice, you import once, into a list, and reuse that list wherever you want. The list is also where you add contacts later, run the email finder, and see each contact's status.

ℹ︎ Accepted formats

.csv files only: an Excel workbook (.xlsx) has to be saved as CSV first. The separator is detected automatically: comma, semicolon, tab or vertical bar. Completely empty rows are skipped.

Prepare the file

Most failed imports are fixed before you even open Emelia. Go through the file with this checklist.

  • One header row, at the very top. No title, logo or empty row above the column names.
  • Every column name different, case included: Email and email count as a duplicate. This is the number one cause of failed imports: an empty email column, values landing in the wrong fields, and no error message.
  • One email column only, and one address per cell.
  • First name and last name in two separate columns. Personalization, the email finder and LinkedIn automation all rely on these two fields.
  • The company website or domain if you want Emelia to find the addresses: it is the piece of data that moves the result the most.
  • All your personalization variables (opening line, city, industry, pre-written message). A list can be completed later, but it is simpler to have everything from the start.
  • UTF-8 encoding, otherwise accented characters turn into gibberish in your emails.
  • No useless columns: empty columns, internal IDs, email_emelia and domain_emelia columns left by an older email search, and above all the Status column of an export (more on that below).
✕ File saved without UTF-8Hi François,Hi Hélène,Hi Étienne,✓ Same file as CSV UTF-8Hi François,Hi Hélène,Hi Étienne,
The same file, saved without UTF-8 and then as CSV UTF-8. The first one will put “Hi François” in your emails.
✦ From Excel or Google Sheets

In Excel: File > Save As > CSV UTF-8 (Comma delimited), not plain “CSV”. In Google Sheets: File > Download > Comma-separated values (.csv). Note that Google Sheets only exports the tab you are looking at.

Step 1: create a new list

In the left menu, open Lead Lists (Listes de leads on the screenshot), then click New List at the top right.

Emelia Lead Lists page with the left menu and the New List button12
  • 1In the left menu, open Lead Lists.
  • 2At the top right, click New List.
New ListChoose how you want to import your leads.CSV FileUpload a .csv file1LinkedInImport from a classic LinkedIn searchSales NavigatorImport from Sales NavigatorHubSpotSync contacts from HubSpotPipedriveSync contacts from PipedriveEmpty listCreate an empty list and add your contacts later
The “New List” window offers six sources. For a file, pick CSV File.

Step 2: drop the file

Drag your file into the drop zone, or click it to pick the file on your computer. Give the list a name, then click Upload.

Pick a name you will recognize in three months, when you look for it in a campaign's settings: the target, the source and the date are enough (“HR directors Lyon, October 2026”).

New List from CSVUpload a CSV file to create a new lead list.Drop your CSV file here or click to browseOnly .csv files are accepted1List nameHR directors Lyon, October 20262CancelUpload3
1. Drop the file. 2. Name the list. 3. Click Upload: the mapping window opens right away.

Step 3: map the columns

The Column Mapping window opens. On the left, the name of each column in your file. In the middle, the target field: what that column will become in Emelia, and the only place you need to act. On the right, a preview of the first values, which saves you from picking the wrong column when two names look alike.

Emelia has already done part of the work. It recognizes columns by their name (“First Name”, “Prénom”, “Email”, “Company”, “Website”, “LinkedIn”…), by their content (a column full of email addresses or URLs), or because they carry the name of a custom variable you already created in your account. Everything else lands on Skip, and a skipped column is not imported.

Column Mapping window with the file column, the target field and the preview1234
  • 1Left: the column name in your file.
  • 2Middle: the target field. Click it to change it.
  • 3Right: the first values, so you can check.
  • 4When everything looks right, click Save Mapping.
Here, first and last name were recognized on their own. The rest is waiting for a decision. (Screenshot of the French interface.)
Dropdown of the target fields available for a column12
  • 1Skip: the column is not imported.
  • 2Standard fields, by technical name: firstName for the first name.
Standard fields show up under their technical name, grouped by Lead, Company, then your custom variables.

The names worth knowing: firstName, lastName, email, linkedinUrlProfile (LinkedIn profile URL) and jobTitle on the lead side; companyName, websiteUrl and companyDomain on the company side.

The fields that really matter

FieldWhat it is for
emailThe address emails are sent to. Without it, the contact can only receive LinkedIn steps.
firstName, lastNamePersonalization, the email finder and LinkedIn automation. Always map them to these standard fields, never to a custom variable.
linkedinUrlProfileRequired for any LinkedIn step, and for finding a phone number.
websiteUrl, companyDomain, companyNameEssential if you want Emelia to find addresses: the search starts from the website, then the domain, then the company name.
jobTitle, city, industry…Segmenting your lists and personalizing your messages.
⚠︎ No email and no LinkedIn URL: contacts you cannot use

If no column is mapped to email or linkedinUrlProfile, Emelia warns you at the bottom of the window: these contacts can't be reached by any campaign. You can still import them, for example to find their addresses afterwards.

✦ No addresses yet? Map the name and the company

Importing a file without emails in order to find them afterwards is common. What matters is that you mapped the first name, last name and company (ideally its website): that is where the search starts. Details in finding email addresses.

Create a custom variable

Some columns match no standard field yet are worth importing: an AI-generated opening line, a pre-written message, information specific to your trade. Open the field list and pick Add Custom Variable, at the very bottom. The Add Custom Variable window opens.

  • Technical Name: letters, digits and underscores, no spaces or hyphens, and unique in your account (for example opener or message_step1).
  • Display Name: free text, with spaces and capitals (“Message, step 1”). Without it, Emelia shows the technical name.
  • A variable created once stays available in all your lists. On your next import, a column carrying exactly its technical or display name is mapped to it automatically.
Add Custom Variable window with the technical name, display name and schema123
  • 1The Technical Name: the one you will write between braces in your messages.
  • 2The Display Name, optional, only helps you find your way.
  • 3The Schema: Lead for information about the person, Company for information about the company.
Screenshot of the French interface: Technical Name, Display Name, Schema.
Technical name checked as available and choice of schema between Lead and Company123
  • 1Emelia checks the name is free and shows Available.
  • 2Pick Lead or Company.
  • 3Click Save: the column is mapped to the new variable.
⚠︎ Two almost identical variables, and your emails go out with a gap

If you create icebreaker today and ice_breaker next month, you have two variables for the same thing. The day you write {{icebreaker}} in a message sent to a list that carries the other one, the email goes out with a blank where your opening line should be. Keep the same column names in your files, and insert variables with the editor's button rather than typing them: see writing and personalizing your messages.

Step 4: save and let the import finish

Click Save Mapping. Progress shows at the bottom left of the window, row by row. Once it is done, the list appears in Lead Lists with its number of leads, email addresses and LinkedIn URLs: a useful first check. If you expected 1,200 emails and see 40, a column was mapped wrong.

Mapping window during the import, with the progress counter at the bottom left12
  • 1Import progress, row by row.
  • 2A column recognized on its own: zip becomes postalCode.
Here a list coming from HubSpot, but the screen is the same for a file.
ℹ︎ Closed the window too early?

If you close the window before saving, the list stays in Pending mapping. Open the ⋮ menu at the end of its row and pick Map columns to pick up where you left off.

Step 5: plug the list into a campaign

In your campaign, the Campaign Settings panel has a Lead list block: select your list there. The block right below, Lead exclusion, removes contacts found in other lists (customers, people already contacted): everything is explained in blacklist and exclusions.

Lead list and Lead exclusion blocks in the campaign settings12
  • 1Pick the list to contact in Lead list.
  • 2Optional: the lists to leave out in Lead exclusion.
ℹ︎ 15,000 contacts maximum per campaign

Above that, the campaign won't launch. There is no limit on the total number of contacts in your account: just split a big file into several lists, and duplicate the campaign for each one.

Duplicates and rows without an email

The list keeps everything. An address that appears twice in the file gives two records, and a row without an email is imported as soon as it holds at least one piece of data.

The campaign deduplicates. The same contact appearing twice, or in two lists attached to the same campaign, gets the sequence only once. The comparison uses the email address, or the LinkedIn URL when there is no address. Two different addresses for the same person, however, count as two contacts.

Rows without an email are still useful for a LinkedIn campaign or for an email search. But in a campaign that starts with an email, a contact without an address never gets past that first step: Emelia drops them, and they won't receive the LinkedIn steps that follow either. For them, run a campaign that starts with LinkedIn, or put a condition on the email variable at the top of the sequence.

ℹ︎ Between two campaigns, nothing is automatic

Emelia does not stop you from writing, in a new campaign, to someone already contacted in another one: that is deliberate, you may want to follow up. To avoid it, use lead exclusion or the blacklist: see blacklist and exclusions.

Adding contacts or columns to an existing list

Open the list and click Import at the top right. This button exists on lists created from a file or created empty, not on a list synced with HubSpot or Pipedrive, nor on a LinkedIn extraction.

After the usual mapping, Emelia asks which field identifies duplicates between the new file and the list: most often the email address, detected automatically. Matching rows are not created again: their new columns are added, and for columns present on both sides you choose Keep existing or Use new values. The other rows become new contacts. Finally, click Start Import.

Import Data into HR LyonDuplicate checkemailField detected automatically.1Ready to import into HR Lyon.• 120 new entries will be created.• 880 existing entries matched: new columns will always be added.2For columns that exist in both CSVs:Keep existingUse new values3Start Import
1. The field used to recognize duplicates. 2. What is about to happen, before importing. 3. What to do with values already there.

If the list is already used by a running campaign, the new contacts join it at the first step, at the campaign's new-contacts-per-day pace.

✦ The right way to add a variable afterwards

You generated opening lines for contacts already imported? Add the column to your file (keeping the email column), then import it into the same list with the duplicate check on email. The opening lines land on the right records without creating a single duplicate.

Re-importing an export: the status trap

A list export (⋮ menu > Export list) contains a Status column: each contact's status, such as “Email sent”, “Email opened”, “Email reply” or “Bounced”. If you re-import that file, Emelia automatically maps this column to the contact's status. The re-imported records therefore show a status… but they are new records.

A campaign remembers what it already sent record by record, not address by address. If you delete the old list and attach the new one to the same campaign, it picks all those contacts up again at the first email. Those who already got it receive it a second time, and an “Email reply” status inherited from the file does not protect them. Only the “Bounced” and “Unsubscribed” statuses, and the blacklist, block sending.

What we recommend
  • Keep the original list in the campaign, and add new contacts with that list's Import button.
  • Add contacts to a list already attached rather than attaching a new list to a running campaign.
  • If you must start from an export: set the Status column to Skip, and put the old list in lead exclusion.
What we advise against
  • Deleting a list and then re-importing its export into a campaign already launched.
  • Keeping the Status column of an export, or of a file coming from another tool.
  • Fixing addresses by deleting and recreating contacts of a running campaign: they start again at the first email.
List A (deleted)paul@example.comrecord #1Email 1 sent on 22/09Export then re-importStatus column carried overList Bpaul@example.comrecord #2Status shown: Email sentSame campaignRecord #2 has never received anything in this campaign:→ Email 1 sent again to paul@example.com
Same address, two records: for the campaign, record #2 is a new contact.

Your contacts live in a CRM?

If your file is just a HubSpot or Pipedrive export, connect the CRM instead: the list updates itself every night, and campaign activity can flow back to the contact record. Mapping works exactly as it does for a file.

Frequently asked questions

The questions we get asked on this topic, answered briefly.

Why does my campaign count fewer contacts than my file?

The list keeps every row holding at least one piece of data; only completely empty rows are skipped. The campaign is what removes contacts: duplicates (same email, or same LinkedIn URL when there is no email), contacts in an exclusion list, those on the blacklist and, in a sequence that starts with an email, contacts without an address.

My accented characters look broken (é, è): what do I do?

The file was not UTF-8. Reopen it in your spreadsheet, save it as CSV UTF-8, delete the broken list if no campaign uses it yet, then import again. Fixing records one by one is not worth it.

The email column is empty after the import

Three causes, in this order: two columns share the same name (case included) and the empty one was picked; the email column was left on Skip during mapping; an old email_emelia column was mapped instead of the real one. Fix the file, then import again.

Can I import an Excel file (.xlsx)?

No, only .csv files are accepted. In Excel, save the file as CSV UTF-8 (Comma delimited).

How do I add a variable to contacts already imported?

Add the column to your file, keep the email column, then import it into the same list with the Import button and the duplicate check on email. The new values complete the existing records instead of creating duplicates.

Will a contact who is in two lists get my emails twice?

Not if both lists are attached to the same campaign: it recognizes the contact by email address and sends the sequence once. Between two different campaigns, though, nothing is automatic: use lead exclusion.

How many contacts can I import?

There is no limit on the total number of contacts in your account. The limit is per campaign: 30,000 contacts at most, beyond that the campaign won't launch. Split big files into several lists and duplicate the campaign.

What happens to a column left on “Skip”?

It is not imported at all. That is the right setting for every column that does not help you send, segment or write: a full export often holds dozens of useless columns that just weigh the list down.