Before you can take advantage of your customer data, you first need to connect your different data sources to the Brevo Customer Data Platform (CDP) so that they are all in one place, ready to be accessed, unified, and leveraged.
Before you start
You can create as many connections as needed and as many of the same nature. For example, if you are using a Brevo integration to create orders or contacts in Brevo, you can connect multiple Brevo accounts as your source and send this data to the Brevo CDP to unify it.
🛢️ Data sources compatible with the Brevo CDP
As part of the CDP setup, our team will connect your Brevo CRM sub-account(s) and a Brevo SFTP server as data sources and destinations in your Brevo CDP. You will be able to connect and import data from other data sources from the Connections menu:
- A Brevo CRM sub-account fed by APIs or plugins and integrations, such as WordPress, WooCommerce, PrestaShop, or Shopify.
- An external database or data warehouse such as PostgreSQL, MariaDB, MySQL, or BigQuery.
- An (S)FTP server to which your JSON or CSV files from your ERP, POS, or other systems are uploaded. When importing your data to the Brevo CDP via FTP servers, follow the CSV guidelines to import them correctly.
➡️ To learn more, check our dedicated FTP server section in Prepare your data sources to meet the Brevo CDP requirements.
❓ How to choose the right data sources for your business?
Choosing the most suitable data sources for your business depends on two factors:
-
What type of data you want to import into the Brevo CDP
Core business data can be imported to the Brevo CDP through any of our compatible data sources. However, complex data types require FTP or database connections. The table below shows which data sources work with different integration methods:
Entities Brevo API Plugins and integrations Database or Datawarehouse (S)FTP server Contacts ✅ ✅ ✅ ✅ Products ✅ ✅ ✅ ✅ Orders ✅ ✅ ✅ ✅ Orders items ✅ ✅ ✅ ✅ Companies ✅ ✅ ✅ ✅ Stores ❌ ❌ ✅ ✅ Subscriptions ❌ ❌ ✅ ✅ Interactions ❌ ❌ ✅ ✅ Tickets ❌ ❌ ✅ ✅ ➡️ To learn more on about the different types of data you can import into the Brevo CDP and their associated name and types, check our dedicated section Examples of the expected data structure.
-
Where your data is currently stored
If your data is hosted on a platform with a compatible plugin or database, integration with the Brevo CDP is seamless. For example, if you store products in a Shopify account, you can connect it to Brevo through our Shopify plugin for easy data synchronization. If your platform doesn't have a compatible plugin or database with Brevo—or if you need to import advanced entities—you'll need to use an FTP server, external database, or data warehouse.
You can combine different types of data sources with the Brevo CDP to cover all your necessary data types.
🧪 Prepare your data sources to meet the Brevo CDP requirements
Before connecting your data sources to Brevo CDP, you have to ensure that they meet the requirements necessary for correct import. Expand the accordions corresponding to each of the data sources you want to connect to the Brevo CDP to discover their requirements:
Each entity you want to import has to follow the same data structure as indicated in the API documentation:
👥 Contacts | 📦 Products | 🧾 Orders | 🗄️ Categories | 🏢 Companies |
If you use one of our plugins or integrations to connect your website to Brevo, Check the documentation specific to your plugin or integration in our dedicated section Plugins & Integrations.
The Brevo CDP allows you to import structured data from FTP servers (with CSV or JSON/JSONL files) for one-shot or recurring automated imports. When importing your data to the Brevo CDP via FTP servers, your files need to follow a specific format to be imported correctly.
You can use your own FTP server, or we can provide one for you.
Check below for our general and specific file requirements, along with recommendations for your FTP files:
📑 General file requirements
All the files containing your data have to follow the following requirements before importing them into the Brevo CDP:
- Save your file in one of the following formats:
.CSV .JSON/.JSONL .ZIP/.GZIP Check our specific file requirements for your CSV and JSON/JSONL files.
- Create one file per entity. An entity is the scope of data you are importing such as contacts, orders, or products for example.
- Save your file with UTF-8 or UTF-8 BOM encoding. These types of file encoding allow for reading the content of your file when it contains special characters.
- Each record in an entity must have at least the source primary key value filled.
A source key is a column from your file that acts as a unique identifier (ID) for the records of a given entity. For example, for the Contacts entity, the ID could be contact_id or contact_email, and for the Orders entity, the ID could be order_id. You can also combine different columns that will form a unique ID for each record, such as order_id AND product_id for the Order items entity.
📄 Specific file requirements
The CSV and JSON files require additional elements to be compatible with the Brevo CDP. Open the tab corresponding to the file you want to import to the Brevo CDP to learn more:
We have created a sample CSV file that you can download and update with your own data.
- We recommend using a comma, pipe, or semicolon as separator for your CSV file, but other separators are also supported.
- The following value types are accepted: plain text string, JSON, number, date, boolean, or list of values.
- We recommend using timestamp for date format in your source file, but you will be able to convert other formats into timestamps in the Brevo CDP. We can cover most custom date formats, e.g.
`YYYY-MM-DD HH:mm:ss`
,`DD/MM/YYYY`
. - Define the first line as headers. Since column headers are used for mappings and labels, they have to remain consistent for recurring imports. Their order has no impact on import.
- Each line must include the same number of columns as the headers.
- Each line should contain a single record without breaking line characters.
- If your raw value contains a character that could be mistaken for a CSV separator, either remove it or enclose the entire value in double quotes.
➡️ For example
If your raw value is
1234 Chester field ; road
, you can either:- Remove the character:
1234 Chester field road
, or - Enclose your value in double-quotes:
“1234 Chester field ; road”
.
- Remove the character:
JSON
In a JSON file, all records are grouped in a single array []
. Each record is an element inside the array. When using JSON files to source data, use a path to specify where the data is located.
Check our examples and requirements below for valid JSON files:
[ |
|
{ |
|
JSONL/NDJSON
In a JSONL file, each line is an independent JSON object. There is no need to put records inside an array.
Check our example and requirements below for a valid JSONL file:
{ |
To import records fully, you need to specify:
|
✅ Recommandations
- By default, new and updated data are imported every hour to ensure relevant and up-to-date data.
- You can use the following naming convention:
<entity>-<source>-<subsection>_<date>.csv
:- Elements surrounded by
<>
must be replaced with a real value and are required. For example,<entity>
will be<contacts>
for a file containing contacts. -
<entity>
is one of the business entities described above. -
<source>
is the name of system where the data comes from (e.g. prestashop, pos, etc.). -
<subsection>
is an optional parameter to used to provide additional information. For example, you can have two files of contacts for a single source contacts_prestashop_customers and contacts_prestashop_subscribers. -
<date>
is the date of the day when the file was created. The date must follow the formatYYYYMMDD_H24MISS
. For instance, a file created on 2024-10-19 at 15:12:39 will have the following suffix_20241019_151239.csv
.
- Elements surrounded by
- The file name can be extended with additional information at the beginning (prefix) and directly before the date .csv extension (suffix). Suffixes should be placed before the date.
Databases and datawarehouses, such as PostgreSQL, MariaDB, MySQL, or BigQuery, do not require specific elements to be compatible with the Brevo CDP. However, we highly recommend setting up incremental import by adding a last_updated column to your database or datawarehouse.
Incremental import allows you to:
- Increase performances.
- Keep up-to-date data as incremental imports fetch new records every hour, ensuring your data stays up to date. Without incremental imports, you can only import new records once a day through a full import.
- Be more eco-friendly.
💡 Examples of the expected data structure
Your data structure depends on your data source and can adapt to your specific column format. Expand the accordions below to see examples of expected column names and types for some entities:
Columns | Type |
---|---|
id | String |
String | |
phone | String |
firstname | String |
lastname | String |
birthdate | Timestamp |
country | String |
city | String |
postal_code | String |
acquisition_source | String |
gender | String |
created_at | Timestamp |
modified_at | Timestamp |
Columns | Type |
---|---|
id | String |
contact_id | String |
store_id | String |
status | String |
channel | String |
total_amount | Float |
discount_amount | Float |
billing_addresss | String |
billing_city | String |
billing_phone | String |
billing_country_code | String |
billing_postal_code | String |
billing_payment_method | String |
billing_region | String |
created_at | Timestamp |
modified_at | Timestamp |
Columns | Type |
---|---|
id | String |
quantity | Float |
unit_price | Float |
discount_amount | Float |
total_amount | Float |
order_id | String |
product_id | String |
variant_id | String |
created_at | Timestamp |
Columns | Type |
---|---|
id | String |
sku | String |
categories | String |
price | Float |
name | String |
description | String |
parent_id | String |
url | String |
brand | String |
image_url | String |
created_at | Timestamp |
modified_at | Timestamp |
Columns | Type |
---|---|
id | String |
contact_id | String |
created_at | Timestamp |
modified_at | Timestamp |
type | Float |
started_at | String |
ended_at | String |
amount | String |
Columns | Type |
---|---|
id | String |
name | String |
city | String |
country | String |
postal_code | String |
is_open | Boolean |
latitude | String |
longitude | String |
type | String |
created_at | Timestamp |
modified_at | Timestamp |
⏭️ What's next?
🤔 Have a question?
If you have a question, feel free to contact our support team by creating a ticket from your account. If you don't have an account yet, you can contact us here.
If you’re looking for help with a project using Brevo, we can match you with the right certified Brevo expert partner.
- CSV-CDP-sample-import-file.csv245 Bytes