> For the complete documentation index, see [llms.txt](https://docs.ochats.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ochats.io/module-tutorial/upload-contacts/how-to-upload-new-contacts-in-bulk.md).

# How to upload new contacts in bulk?

## Written Steps:

1. Go to **Contacts**
2. Select **Upload new contacts**&#x20;

   <figure><img src="/files/bB2BDHzPLzkkUlClJgb9" alt=""><figcaption></figcaption></figure>
3. Select **Download Template File**&#x20;

   <figure><img src="/files/XQ14SJmF5bT8VW1gIDgc" alt=""><figcaption></figcaption></figure>
4. Open the Excel Template File and fill in all the information based on the example in the Template File. (*Always remember to insert country code in front of phone number*)
5. Save the Excel Template File.&#x20;
6. Select **Import**&#x20;

   <figure><img src="/files/bYDmkUBkn0r4PEbs4Mx7" alt=""><figcaption></figcaption></figure>
7. Upload the Excel Template File
8. Select **Upload**

## **Visual Steps**

<figure><img src="/files/yUsYFXvsstVvwXHGoMGe" alt=""><figcaption><p>Step 1 &#x26; 2</p></figcaption></figure>

**Import Template Guide**

Download the template below and fill in one contact per row. The **first row is the header row — keep it and do not reorder the columns**. Columns are read by their position (A, B, C…), not by their header text. Leave a cell blank to skip that field.

**Columns**

| Col   | Field        | Required    | What it is & possible values                                                                                                                                                                    |
| ----- | ------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **A** | `channel_id` | Yes         | Which channel this contact belongs to. Use a single number:**1** — WhatsApp (incl. Cloud API)**2** — Facebook Messenger**3** — Instagram**4** — LINE**5** — Telegram**6** — Email**7** — WeChat |
| **B** | `sender_id`  | No          | **Leave this blank.** It's a technical ID the system fills in automatically when the contact first messages you on that channel.                                                                |
| **C** | `first_name` | Yes         | Contact's first name. Free text.                                                                                                                                                                |
| **D** | `last_name`  | No          | Contact's last name. Free text.                                                                                                                                                                 |
| **E** | `phone`      | Recommended | Full international number, digits only, no `+` or spaces — e.g. `14155550123`. Used to match & update an existing contact.                                                                      |
| **F** | `wa_id`      | No          | WhatsApp ID — usually the same digits as the phone number. Relevant only for WhatsApp (channel 1).                                                                                              |
| **G** | `email`      | Recommended | Valid email address. Used together with phone to match & update an existing contact.                                                                                                            |
| **H** | `tags`       | No          | Comma-separated labels, e.g. `vip,lead,newsletter`.                                                                                                                                             |
| **I** | `address`    | No          | Postal / physical address. Free text.                                                                                                                                                           |
| **J** | `opt_in`     | No          | Messaging consent: **1** = opted in, **0** = not opted in. Defaults to not opted in if blank.                                                                                                   |
| **K** | `image`      | No          | Public URL of the contact's avatar image.                                                                                                                                                       |
| **L** | `merge`      | No          | Internal merge flag. Leave blank unless instructed otherwise.                                                                                                                                   |

<figure><img src="/files/WE6i1VzhnCUqxwSsjZl0" alt=""><figcaption><p>Step 3</p></figcaption></figure>

{% hint style="info" %}
**How matching works:** within your workspace, a row is matched to an existing contact by `email` *or* `phone`. If a match is found the contact is updated (blank cells are ignored, so they won't erase existing data); otherwise a new contact is created. Provide at least a phone number or email so duplicates aren't created.
{% endhint %}

<figure><img src="/files/E8dE8fV0HMmy0ANdY0BR" alt=""><figcaption><p>Step 4</p></figcaption></figure>

<figure><img src="/files/TQ63OTvSEnZ4NPFdv1yO" alt=""><figcaption><p>Step 5 &#x26; 6</p></figcaption></figure>
