Browse the help centre

Import contacts from Excel or CSV

Bring an existing customer list into Juno from an Excel or CSV file — map the columns, label the batch, and read which rows were created, updated or skipped.

How-to

On this page

You can bring an existing customer list into Juno from an Excel (.xlsx) or CSV file. Each row becomes one contact, extra columns become custom attributes, and a contact you already have is updated rather than duplicated.

Juno imports contacts but doesn't export them — there's no download of your contact list from the console.

Prepare the file

The easiest start is Juno's own template. On the Contacts page, click Import contacts, then Download template. It comes with the right headers, an example row and a sheet of instructions.

The rules:

  • Row 1 is the header row. Don't delete or rename it. Without it, your first contact is read as the headers and lost.
  • Every row needs an email or a phone number with a country code. That's how a contact is identified.
  • Phone numbers need the country code, like +6591234567. A number with a + is linked as the contact's WhatsApp number, so their messages land on this profile. A number without one is kept only as a phone attribute — visible on the profile, but not linked to WhatsApp, so that contact is left out of WhatsApp broadcasts (the broadcast composer shows how many of an audience WhatsApp can reach).
  • When a row has an email, the email is the identity. If the row also has a phone number with a +, the number is linked to the same contact.
  • Extra columns are welcome. City, membership, last visit, a note — each becomes a custom attribute you can filter on in a segment, or put into a broadcast or journey message with a Contact attribute variable.
  • Up to 5,000 rows per file. Delete the example row before importing.

Import it

  1. On the Contacts page, click Import contacts and choose your file.
  2. Check Columns. Juno guesses a role for each column from its header — Email, Name, Phone, Custom attribute or Ignore. Change any guess that's wrong. Only the first email, name and phone column takes that role; a second "phone" column becomes an attribute.
  3. Look over the preview of the first rows.
  4. Fill in Label these contacts — optional, but worth it. A label is how you reach exactly this batch later, as a broadcast audience or in a segment. Without one, the only audience that includes them is everyone. The label is created if it doesn't exist yet. A misspelt label can be fixed later under Contacts → Manage labels.
  5. Click Import N contacts. A progress count shows as the rows go in. Stop halts it part-way. Rows already imported stay.

Read the result

At the end you'll see how many contacts were created, updated and skipped, with a row number and reason for each skipped row:

ReasonWhat to fix
No email, and no phone with a country codeAdd an email, or put + and the country code on the number
Not a valid email addressThe email column holds something else — often a phone number or a web link
Duplicate of an earlier rowThe same person appears twice in the file — merge the two rows
Too much data in one rowTrim the extra columns for that row
This row could not be savedCheck the row, then import the file again

It's safe to import the same file again. Existing contacts are updated, not duplicated: new attribute values are added or replace the old ones, a missing name is filled in, and a name someone typed in the console is kept.

Having someone's number doesn't mean you may message them. An imported list is a list of people who haven't opted out yet — not people who have opted in. Before you send a broadcast to it, read opt-in and opt-out.

Importing needs permission to create contacts. If the button refuses, ask your workspace owner about your role.

Where to go next