# Import from a CSV

Bring contacts, companies, opportunities, notes and tasks in from a CSV file: map the columns, check the rows, import.

Updated Oct 28, 2026. Source: https://smallbusinesschatbot.com/docs/user-guides/crm/import-csv

## What this does

The importer in the Small Business Chatbot CRM reads a CSV file, lets you match each column to a field, checks every row, then imports the rows that pass. One row can hold a contact and their company, and the two are linked. Imports never send messages or start workflows. [Triggers](https://smallbusinesschatbot.com/docs/user-guides/workflows/triggers) lists what does.

> **Note:** The file must be a .csv saved as UTF-8, up to 30 MB. In Excel, use **Save As** and choose **CSV UTF-8**.

## Import a file

1. **Open the importer**

   In the app, open **[CRM › Contacts](https://smallbusinesschatbot.com/app?panel=contacts)** and click **Import**. The **Companies**, **Tasks** and **Opportunities** views have the same button. The page reads **Import your contacts and companies**.

2. **Upload the file**

   Drop the file on **Drop your CSV here**, or click it to choose one. The app lists each column with up to three sample values.

   ![The CSV importer's heading, its three steps and the drop area for a CSV file up to 30 MB](https://smallbusinesschatbot.com/static/images/docs/user-guides/import-csv-upload-2026-10-28.webp)
   *CRM › Contacts › Import, October 2026*

3. **Map each column**

   In the table, each row is a column from your file. Pick its **Record type**, then its **Field**. Columns named like a field, such as Email, Phone or Company name, are matched for you. Pick **Skip column** for anything you don't want.

   ![The import mapping table matching First name, Last name, Email, Phone and Company to contact and company fields, with Tags skipped](https://smallbusinesschatbot.com/static/images/docs/user-guides/import-csv-mapping-2026-10-28.webp)
   *CRM › Contacts › Import, October 2026*

4. **Choose how each record type is saved**

   Under the table, each record type you mapped has a mode: **Create or update**, **Create only**, **Update only** or **Skip record type**. **Create or update** is the default.

5. **Add tags if you want them**

   Under **Tags for every imported contact**, type any tags to put on every contact in the file.

6. **Read the check**

   Once a column is mapped, the app checks the file after each change. It shows **N rows ready · M rows need attention** and the reasons for up to ten rows. **How your records will look** shows the mapped values of up to three rows, record by record. For files over 50,000 rows, click **Check file** to run the check.

   ![The import options with Create or update for contacts and companies, a tags field, and 3 rows ready with 0 needing attention](https://smallbusinesschatbot.com/static/images/docs/user-guides/import-csv-check-2026-10-28.webp)
   *CRM › Contacts › Import, October 2026*

7. **Import**

   Click **Import**. When some rows need attention, the button reads **Import N valid rows**, and those rows are left out. The result line counts successful and failed rows and ends with **No workflows or messages were triggered.**

**Import history** lists each file with its row count and status. **Cancel** stops an import that is still running. **Download results** gives a CSV of what happened to each row.

## Record types and their fields

| Record type | Fields | Required |
|---|---|---|
| **Contact (person)** | Contact ID, First name, Last name, Full name, Person’s email, Person’s phone, Person’s website, Person’s LinkedIn, Contact status | At least one mapped value |
| **Company** | Company ID, Company name, Company phone, Company email, Company website, Industry, Company description | Company name |
| **Opportunity** | Opportunity ID, Opportunity name, Contact ID, Company ID, Pipeline ID, Stage ID, Opportunity status, Value | Opportunity name, Pipeline ID, Stage ID |
| **Pipeline** | Pipeline ID, Pipeline name | Pipeline name |
| **Note** | Note ID, Note text, Contact ID, Company ID, Opportunity ID | Note text |
| **Task** | Task ID, Task title, Task description, Contact ID, Company ID, Opportunity ID, Task type, Due date, Priority, Task status | Task title |

Tags come from **Tags for every imported contact**.

## How rows match existing records

- A contact matches an existing [contact](https://smallbusinesschatbot.com/docs/user-guides/crm/contacts) by Contact ID, email or phone. With **Create or update**, a match is updated and anything else is created.
- Rows with the same company name link to the same company.
- To link each contact to their company, set your business-name column's **Record type** to **Company** and its **Field** to **Company name**.
- To import opportunities, you need the IDs of an existing pipeline and stage. An [export](https://smallbusinesschatbot.com/docs/user-guides/crm/export-and-duplicates) of **Pipelines and stages** lists them.

## If something goes wrong

| What you see | Why | What to do |
|---|---|---|
| **CSV files must use UTF-8 encoding** | The file was saved in another encoding. | Save it again as **CSV UTF-8** and upload it. |
| **Only .csv files are supported** | The file is an Excel or other file. | Save it as a .csv file. |
| **The CSV file is larger than the 30 MB import limit.** | The file is too large. | Split it into smaller files. |
| **More than one company has this name. Resolve the duplicate companies before importing.** | Two companies in your CRM share that name. | Archive or rename one in **Companies**, then check the file again. |
| **This contact already has a different company.** | [Automatic company linking](https://smallbusinesschatbot.com/docs/user-guides/crm/companies-and-opportunities) is on, and the row's business name doesn't match the contact's current company. | Map **Company name** to change the link, or skip the company columns. |
| **More than one contact matches this row.** | The row's ID, email and phone point to different contacts. | Correct the ID, email or phone in that row. |
