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

# CSV Upload

> Easily add contacts to Loops by uploading a CSV file.

> [!TIP]
>
> Please read through the [contact properties](https://loops.so/docs/contacts/properties.md) information to understand how to format data in your CSV file.

## Add new contacts via CSV

1. Select **Import** in the top right of the [Audience](https://app.loops.so/audience) page.

   ![Audience page showing the Import contacts button](https://mintcdn.com/loops/jciR0tyBAW69kXCY/images/select-import-users.png?fit=max\&auto=format\&n=jciR0tyBAW69kXCY\&q=85\&s=51d16210d466a71c77cb4888d22b99d2)

2. Hover on **CSV** and click **Upload CSV**. Download the [example formatted CSV](https://app.loops.so/loops_sample.csv) to get an idea of the columns we use. By default, we recommend using at least `Email`, `First Name`, `Last Name`, `User Group` and `Source` columns.

   ![Import contacts menu showing CSV upload option](https://mintcdn.com/loops/OG31ikb--92jQDlq/images/import-users.png?fit=max\&auto=format\&n=OG31ikb--92jQDlq\&q=85\&s=f68da4c81e81193b87d77ab41ffc9d4e)

3. After uploading the CSV you'll have a chance to review any duplicates or missing information before finishing.

4. When the upload is finished, all the uploaded contacts can be viewed in the Audience page. That's it! 🎊

### Some important notes

* You can import values for any [contact property](https://loops.so/docs/contacts/properties.md), including custom properties, by adding extra columns to your CSV file. Use the property name as the column header.
* All new contacts uploaded will be automatically marked as subscribed. If you want to mark imported contacts as unsubscribed add a `Subscribed` column into your CSV file and use "false" as the column value.
* CSV uploads are not gated by [double opt-in](https://loops.so/docs/contacts/double-opt-in.md). Imported contacts do not receive a confirmation email, even when double opt-in is enabled. Only upload contacts who have already opted in to receive your emails.
* The default `Source` value for each uploaded contact will be "CSV Upload". You can change this by adding a `Source` column to your CSV file and specifying a custom value.
* Dates in your CSV file must be in one of the accepted formats listed on the [contact properties](https://loops.so/docs/contacts/properties.md#dates) page (timestamps are not supported).

## Update contacts via CSV

You can also upload a CSV file to update your existing contacts in bulk.

You can either download a CSV from your Audience page in Loops, edit the data and re-upload it, or start with a new CSV file and just include the contacts and columns you want to update.

When updating contacts, Loops will first look for a matching contact using the value in the `User ID` column, then the `Email` column.

If a contact is found, Loops will update the contact using the data provided in the CSV file. If a contact is not found with either `User ID` or `Email` values, a new contact will be created using the data provided.

### Some important notes

* The importer does not re-subscribe contacts who are marked as unsubscribed in your Audience, so updating the `Subscribed` column to `true` will not re-subscribe the contact.
* Cells that are empty in the CSV file will not overwrite existing data in Loops. If you want to clear a field, you will need to provide a value of `null` in the CSV file (4 characters, all lowercase). Note, this only works for `string` type fields.

## Send a campaign to a CSV upload

To send a campaign to the contacts in a CSV file, add a unique column to the file before you upload it. That column will be stored as a [custom contact property](https://loops.so/docs/contacts/properties.md#custom-contact-properties), which you can then select when sending.

1. Add a new column to your CSV with a unique name that you will not reuse for other uploads, for example `productUpdateSep2026`.
2. Give every row in the file the same unique value, such as `true`.
3. [Upload the CSV](#add-new-contacts-via-csv). Create the property if it does not already exist, then map the column to it.
4. When sending a [campaign](https://loops.so/docs/types-of-emails.md#campaigns), select your custom property from the list and the value you used in the CSV (for example, `productUpdateSep2026` `Is true`).

![Filter campaign audience](https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/campaign-filter.png?fit=max\&auto=format\&n=K9TRANbphBauR0pJ\&q=85\&s=9672bd5756789f880f53626fe58da5b9)

Only contacts from that upload will match the filter and receive the campaign. You can also [save the filter as a segment](https://loops.so/docs/contacts/filters-segments.md#audience-segments) if you want to reuse it.

## Trigger workflows via CSV

You can use CSV uploads as a way to trigger workflows on a group of new or existing contacts.

If you want to trigger workflows for existing contacts, download a CSV from your [Audience page](https://app.loops.so/audience) then re-upload the file. Only include the contacts you want to trigger workflows for in the CSV file.

After uploading the CSV, on the Review page select the **Trigger workflows** option. This will trigger all applicable workflows you have set up with **Contact created** and **Contact updated** triggers.

If you select to add contacts to mailing lists on this same page as well as toggle **Trigger workflows** ON, you will also trigger **Contact added to list** workflows.

![CSV upload review step showing “Trigger workflows”](https://mintcdn.com/loops/aOtgyczWtTw7x5Xz/images/csv-trigger-loops.png?fit=max\&auto=format\&n=aOtgyczWtTw7x5Xz\&q=85\&s=387b50b2c6350e031bf0673167fa4506)

## View previous CSV uploads

After uploading CSV files you can view a history of your uploads plus details for each file's rows.

On the [Audience page](https://app.loops.so/audience) click **Import contacts**, hover on **CSV** and click **Upload CSV**. On the next page click on **View imports**, which will show you a list of all of your past uploads.

Clicking on one of your uploads will let you view lists of all new, updated or duplicated contacts plus a list of any errors from the import.

![CSV imports history page in Loops](https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/csv-history.png?fit=max\&auto=format\&n=K9TRANbphBauR0pJ\&q=85\&s=b4491c021fc049fa4a280e439692949d)


## Related topics

- [Double opt-in](https://loops.so/docs/contacts/double-opt-in.md)
- [Quickstart](https://loops.so/docs/quickstart.md)
- [Contact properties](https://loops.so/docs/contacts/properties.md)
- [Email blocklist](https://loops.so/docs/contacts/email-blocklist.md)
- [Reducing product email bounce rate](https://loops.so/docs/deliverability/reducing-bounce-rate.md)
