> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brilo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Import your contact list

> Import contacts into Brilo from a spreadsheet, get your phone numbers into a shape that actually dials, and map your own columns onto custom fields.

Everything a campaign does depends on this file being right. A list with missing country codes produces a
campaign that reports "could not be connected" for half its contacts and looks like a product fault. Ten
minutes on the spreadsheet saves that.

## Before you start

* A spreadsheet exported as CSV, from your CRM, your booking system, or wherever your customers live.
* Ten minutes on the file itself.
* Any custom fields you want to import already created. See
  [Add your own contact fields](/contacts/add-your-own-contact-fields).

## Steps

<Steps>
  <Step title="Fix the phone numbers first">
    This is the whole job. Put every number in full international format, with the country code and no
    spaces, brackets, or dashes: `+14155550123`, `+447700900123`.

    Spreadsheets like to drop the leading `+` and turn long numbers into scientific notation. Format the
    column as text before you touch anything, and check the first and last row after every edit.
  </Step>

  <Step title="Give each column a clear heading">
    First name, last name, email, phone. Simple headings map cleanly and awkward ones cost you time in the
    importer.
  </Step>

  <Step title="Remove what you do not need">
    Duplicates, people who have already asked not to be contacted, and anybody you do not have permission
    to call. Doing this in the spreadsheet is far easier than unpicking it afterwards. See
    [Calling rules you should know](/compliance/calling-rules-you-should-know).
  </Step>

  <Step title="Open Contacts and import">
    Go to **Contacts** and use **Import Contacts**. Upload the file.
  </Step>

  <Step title="Map the columns">
    Match your columns to **First Name**, **Last Name**, **Email Address**, and **Phone Number**. Any custom
    fields you have created appear here too, so your own columns can come in alongside the standard ones.

    The importer validates as you go and tells you which rows it cannot accept, with the reason.
  </Step>

  <Step title="Import 10 rows first">
    Cut your file down to ten rows and import those. Check the numbers arrived intact, with the `+` and the
    country code. Then import the rest.
  </Step>
</Steps>

## You will know it worked when

Your contacts appear with phone numbers that still have their country code, and a test call to one of them
actually connects.

## Getting phone numbers right

This causes more failed campaigns than everything else combined.

| Written as        | Result                                                       |
| ----------------- | ------------------------------------------------------------ |
| `+14155550123`    | Works                                                        |
| `+44 7700 900123` | Usually works, spaces are tolerated                          |
| `4155550123`      | Ambiguous. No country, may not dial                          |
| `(415) 555-0123`  | Ambiguous, and formatting can confuse the parse              |
| `07700900123`     | A national format. No country, will not dial internationally |
| `4.1556E+09`      | Broken by your spreadsheet                                   |

The rule: if a number does not start with `+` followed by a country code, fix it before you import. In
Excel or Sheets, format the column as **Text** first, otherwise the `+` is stripped and long numbers are
converted to scientific notation on save.

## What to import beyond name and number

The standard fields get you a campaign that calls people. Custom fields get you a campaign that sounds like
you know them:

* **Appointment date** so a reminder can say when.
* **Amount owed** and **invoice number** for a payment chase.
* **Service or product** so the call opens with the right subject.
* **Account owner email** so an email step can Cc the right colleague.

These come in as part of the same import and are then available to your agent and your email steps. See
[Add your own contact fields](/contacts/add-your-own-contact-fields).

## Before you import a list you did not collect

A purchased or scraped list is the single fastest way to get a phone number flagged and a domain
blacklisted, and in many places calling it is not legal. The platform cannot tell the difference between
your own customers and a list somebody sold you, which is why the consent confirmation exists when you
launch a campaign. See [Calling rules you should know](/compliance/calling-rules-you-should-know).

## What else you can do here

* Add a single contact by hand with **Create Contact**, which is quicker than importing one row.
* Push a filtered set of contacts straight into a campaign from the contacts list. See
  [Add contacts to a campaign](/campaigns/add-contacts).
* Let your agent recognise these people when they call in. See
  [Remember callers between calls](/agents/remember-callers).
* Have your agent write back to your CRM so this stays a one time import. See
  [Update your CRM](/actions/update-your-crm).

## If it did not work

**Rows were rejected.** The importer says why per row. Most rejections are a phone number it cannot parse
or a value that does not match the type of a custom field, such as text in a number field.

**Numbers imported without the country code.** Your spreadsheet stripped the `+`. Format the column as
text, re add the `+` and country code, and re import.

**Numbers show as `4.15E+09`.** Scientific notation. Same fix: format as text before saving.

**A campaign says "could not be connected" for most contacts.** The numbers are not dialable. Export what
you imported and check the format.

**Custom field values were dropped.** The value failed validation for that field's type, or the field key
does not exist or was archived. Check the field definition. See
[Add your own contact fields](/contacts/add-your-own-contact-fields).

**Duplicates appeared.** The source file had them. Deduplicate in the spreadsheet before importing.

## FAQ

<AccordionGroup>
  <Accordion title="How do I import contacts into Brilo from a CSV?">
    Go to **Contacts**, use **Import Contacts**, upload your CSV, and map your columns to **First Name**,
    **Last Name**, **Email Address**, and **Phone Number**. Import ten rows first and check the phone
    numbers survived.
  </Accordion>

  <Accordion title="What format do phone numbers need to be in?">
    Full international format starting with `+` and the country code, like `+14155550123`. A number without
    a country code is ambiguous and often will not dial, which is the most common cause of a campaign that
    cannot connect.
  </Accordion>

  <Accordion title="Why did my phone numbers lose the plus sign?">
    Your spreadsheet removed it. Format the phone column as **Text** before editing or saving, then re add
    the `+` and country code. Excel and Sheets both do this by default.
  </Accordion>

  <Accordion title="Can I import my own columns as well as name and number?">
    Yes, if you create the custom fields first. They then appear in the importer alongside the standard
    fields and can be used in calls and campaign emails. See
    [Add your own contact fields](/contacts/add-your-own-contact-fields).
  </Accordion>

  <Accordion title="How many contacts can I import at once?">
    Large lists are fine. The practical limit is how fast a campaign can call them, which is governed by
    your pacing settings and your plan. See
    [Control how fast a campaign dials](/campaigns/control-how-fast-it-dials).
  </Accordion>

  <Accordion title="Can I import contacts on the Free plan?">
    Yes. Importing works on every plan, so you can prepare a list and a campaign on Free and run it after
    upgrading, since outbound calling needs Starter or above.
  </Accordion>

  <Accordion title="What happens to rows the importer rejects?">
    They are reported with a reason and not imported. Fix them in the spreadsheet and import just those
    rows again.
  </Accordion>
</AccordionGroup>

## Related

* [Add your own contact fields](/contacts/add-your-own-contact-fields) to bring your own columns in
* [Add contacts to a campaign](/campaigns/add-contacts) for what to do with them next
* [Calling rules you should know](/compliance/calling-rules-you-should-know) before calling a list
* [Remember callers between calls](/agents/remember-callers) so your agent recognises them
* [What is a campaign](/campaigns/what-is-a-campaign) for the whole outbound picture
