Before you start
You'll need:
- A Brevo account with contact-list export permission
- An AcelleMail installation up and running
- ~30 minutes for <50k contacts
Export from Brevo
In Brevo's left sidebar, click Contacts → Lists → choose the list to export. On the list detail page, click Export contacts in the top-right.
Brevo asks for export format — pick CSV. The file is prepared in the background; check Export history for the download link (usually <2 minutes).
The exported CSV includes: email, all custom attributes (FIRSTNAME, LASTNAME, custom fields), list memberships, opt-in date, blacklist status.
For attribute mapping, note Brevo's field names — they map to AcelleMail's custom fields in the next step.
Import into AcelleMail (the same 6 clicks for every source)
Once you have the CSV exported from your previous platform, the import flow in AcelleMail is identical regardless of where the data came from.
1. Open your destination list
In AcelleMail's sidebar, click Audience → choose the list that will receive the migrated subscribers (or create a new one — New list button top-right).

You'll see a per-list overview card with subscriber counts:

2. Click "Import" in the list toolbar
The wizard entrypoint is on the list detail page:

3. Upload your CSV
Drop the CSV file from the previous platform into the upload area:

AcelleMail parses the file and confirms detection:

4. Map the columns
The wizard auto-detects standard columns (email, first_name, last_name) and shows green Mapped to EMAIL chips. Adjust manually for any non-standard column from the source:

5. Pick duplicate handling
In the same screen, choose what AcelleMail does when a subscriber already exists in this list:
- Skip — keep the existing row, don't overwrite
- Update — overwrite name/tags/custom fields with values from the CSV
- Unsubscribe — mark existing rows as unsubscribed (rare; used when re-importing an opted-out list)
6. Run the import
Click Start import. The job runs in the background — close the popup, work elsewhere, return to Audience → [list] → Import to see progress:

You'll see Pending → Running → Complete per import job, with rows-imported / rows-skipped / errors counts.
After the import
- Verify list count matches your expected size (rows that failed validation appear in the Errors column with a downloadable error CSV).
- Re-tag if needed — for behavioural data that doesn't fit a CSV column (e.g. "opened campaign X"), you may need to re-create the tag via segmentation rules.
- Pause for warm-up — if the imported list is large (>10k) and your sending IP is new or recently rotated, run a short warm-up campaign to your most-engaged 10% before the full send. See IP warm-up best practices for the schedule.
Rebuilding workflows
Brevo's "automations" map to AcelleMail's Automation workflows. Equivalent triggers:
| Brevo trigger | AcelleMail trigger |
|---|---|
| Subscribed to list | Subscribed to list |
| Custom attribute change | Field value change |
| Date attribute matches | Date relative |
| Webhook event | Custom event (API) |
| Email opened/clicked in campaign | Link clicked |
Re-create each automation via Automations → New automation in AcelleMail — same drag-and-drop builder, same step types.
Merge-tag syntax differences
Brevo uses {{contact.FIRSTNAME}}; AcelleMail uses {{ subscriber.first_name }}. Find/replace patterns:
| Brevo | AcelleMail |
|---|---|
{{contact.FIRSTNAME}} |
{{ subscriber.first_name }} |
{{contact.LASTNAME}} |
{{ subscriber.last_name }} |
{{contact.EMAIL}} |
{{ subscriber.email }} |
{{mirror}} |
{{ web_view_url }} |
{{unsubscribe}} |
{{ unsubscribe_url }} |
Advanced: API-driven migration for large lists
For lists >500k or scripted CI-driven sync, both platforms expose REST APIs.
Export from Brevo via API:
curl -X GET "https://api.brevo.com/v3/contacts?limit=1000&offset=0" \
-H "api-key: <BREVO_API_KEY>" \
-o brevo-contacts.json
Brevo's API returns 1000-row pages; paginate via offset.
Import into AcelleMail via REST API:
ACELLE_TOKEN="..."
ACELLE_LIST_UID="..."
jq -c '.contacts[] | {email: .email, first_name: .attributes.FIRSTNAME, last_name: .attributes.LASTNAME}' brevo-contacts.json \
| while read subscriber; do
curl -X POST "https://acellemail.com/api/v1/subscribers" \
-H "Authorization: Bearer $ACELLE_TOKEN" \
-d "{\"list_uid\":\"$ACELLE_LIST_UID\",\"subscriber\":$subscriber}"
done
The CSV-through-UI path is faster for one-time migration; API path is for scheduled sync.
Related articles
- Importing contacts CSV — best practices and field mapping
- Migration from Mailchimp to AcelleMail
- Building a welcome email series in AcelleMail
- Email list hygiene
5 bình luận