Brevo → Sendtim
Migrate from Brevo to Sendtim
4 min read · Updated
Brevo and Sendtim think about contacts in much the same way, which makes this one of the easier moves: contacts with attributes, grouped into lists, filtered by conditions. The work is in the blocklist and in carrying your consent record across intact.
The same ideas, different words
| Brevo | Sendtim |
|---|---|
| Contact attribute | Contact field or custom property |
| List | List |
| Folder | Nothing — lists are flat; use a naming convention |
| Segment | Segment |
| Email campaign | Campaign |
| Automation workflow | Automation |
| Blocklisted contact | Suppression |
| Transactional email | Transactional template, sent over the API |
Brevo’s standard attributes (FIRSTNAME, LASTNAME, SMS) map onto Sendtim’s own contact fields. Everything you added yourself becomes a custom property, which is also a merge tag: an attribute called PLAN becomes {{plan}} in an email.
Folders have no equivalent, by design — a list in Sendtim records how someone arrived, and a segment answers everything else. If you used folders to keep lists organised, a prefix in the list name does the same job.
1. Export from Brevo
Export your contacts with all attribute columns included, and export the blocklist separately. The blocklist is the part people forget, and it is the part that cannot be rebuilt.
- Contacts, per list if you intend to keep the same list structure, with every attribute column.
- Blocklisted contacts — unsubscribes and hard bounces. These become suppressions, not contacts.
- Campaign statistics for the last year, so you have a baseline to compare against after the move.
- The HTML of any email you plan to rebuild, plus a written description of each automation workflow.
If you are on a paid plan, export before you downgrade. Export access usually goes with the plan, and nobody will retrieve it for you afterwards.
2. Carry the consent record, not just the contacts
If you are running under GDPR, the obligation that survives the migration is being able to show *when* and *how* each contact opted in. The contact row moves easily; the evidence behind it is the thing to be deliberate about.
Two practical moves. Keep the Brevo export files themselves — dated, access-controlled, alongside your other records — because they are the snapshot of what you held and when. And bring the opt-in date across as a custom property such as consent_date, so it is visible on the contact in Sendtim rather than only in an archived CSV.
On import, tick the consent box only for contacts you actually hold opt-in for. Sendtim records the date and “import” as the source. Contacts you cannot evidence should not come across as subscribers at all.
3. Load suppressions, then contacts
Import the blocklist into Sendtim’s suppression list first. After that, suppressed addresses are skipped by every import whatever the file says, so a later pass with an older export cannot put anyone back.
- Go to Contacts → Import and upload the contact file. Up to 200 MB, processed in the background.
- Map
FIRSTNAMEandLASTNAMEto first and last name; Sendtim recognises most common headers without help. - Give every remaining attribute column a custom property key — lowercase, no spaces:
plan,consent_date,account_manager. - Choose the list these contacts join under Options. Run one import per list if you are keeping Brevo’s structure.
- Check Recent imports afterwards for created, updated and rejected counts.
4. Rebuild campaigns and workflows
Rebuild emails in the Sendtim editor rather than pasting Brevo’s exported HTML. The export carries Brevo’s tracking and template wrapper; pasting it into a Custom HTML block brings all of that with it, including links that still point at the old platform.
Brevo workflows become automations: a trigger, waits, conditions and sends. Rebuild them one at a time and walk yourself through each from the real trigger before any contact reaches it.
Contacts already part-way through a Brevo workflow are the one thing you cannot migrate — that state exists only inside Brevo. Either let the old workflow finish for people already in it while new signups start in Sendtim, or accept a small gap and tell those contacts nothing changed.
5. Repoint whatever writes contacts
Brevo’s contact API maps closely onto Sendtim’s. Both upsert by email, both take a properties object, both accept list membership in the same call.
curl -X POST https://sendtim.com/api/v1/contacts \
-H "Authorization: Bearer $SENDTIM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "ada@example.com",
"firstName": "Ada",
"lastName": "Lovelace",
"customProperties": { "plan": "trial" },
"listIds": ["YOUR_LIST_ID"],
"consentGiven": true,
"consentSource": "api"
}'A failed request always returns the same shape — { "error": { "code", "message", "details" } } — so one error handler covers every endpoint. Rate limits are per key and per minute: 60 on Free, 300 on Starter, 600 on Pro and Scale.
6. Cut over
- Add and verify your sending domain in Sendtim, publishing SPF, DKIM and DMARC. Leave Brevo’s records up until it has stopped sending.
- Start with your most engaged contacts and widen over a week or two rather than sending to everyone on day one.
- Give each email type one owner. Switch Brevo off for that type the day Sendtim takes it on.
- Watch hard bounces and complaints for a fortnight, against your Brevo baseline rather than an industry average.
Why each of those matters is set out in Switch email platforms without losing deliverability.
