Mailchimp → Sendtim
Migrate from Mailchimp to Sendtim
5 min read · Updated
Mailchimp keeps one audience with tags hung off it. Sendtim keeps one contact book per workspace, with lists for how someone arrived and segments for what is true about them now. Most of the work in this move is deciding which of your tags is which.
The model is slightly different, and it matters
Mailchimp charges per audience, so teams end up with one big audience and a lot of tags doing several different jobs at once: some record where a contact came from, some record what the contact did, some are really just a saved filter.
Sendtim splits those three. Before you export anything, go through your tags and sort them:
| A Mailchimp tag that means… | Becomes |
|---|---|
| Where this person signed up | A list — permission and origin, set once. |
| A fact about this person (plan, city, role) | A custom property — a value you can personalize with and segment on. |
| A group you keep re-selecting by hand | A segment — rules that re-evaluate themselves, so the group is never stale. |
Doing this sort on the way in is the difference between a clean workspace and a copy of the mess you were trying to leave. It takes an hour and you only do it once.
1. Export from Mailchimp
Export the audience while the account is still active. The export gives you separate files per contact status, and you need more than the subscribed one.
- Subscribed — the people you will import and mail.
- Unsubscribed — they must arrive in Sendtim as suppressed, never as contacts.
- Cleaned — Mailchimp’s word for addresses that hard bounced or were rejected. Treat them as suppressed too; they are not a list to re-try.
- Non-subscribed and transactional — people who bought or submitted something without opting in to marketing. Do not import these as subscribers. If you cannot show consent, you do not have consent.
Keep every merge field column in the export, including the ones you think are dead. FNAME and LNAME are obvious; the custom ones are usually what a segment was quietly built on.
Save the HTML of any campaign or journey email you intend to rebuild, and write your Customer Journeys down as a list of trigger, wait, condition and email. Nothing exports a journey in a form you can replay.
2. Load the suppressions before the subscribers
Import the unsubscribed and cleaned addresses into Sendtim’s suppression list first. From that point an import cannot undo them: a suppressed address is skipped whatever a later file says, so a second pass with a stale export cannot resurrect anyone.
Do it in this order even if you are in a hurry. It is the only step in the migration that cannot be corrected afterwards — an email to someone who unsubscribed in 2023 is sent.
3. Import the contacts
Go to Contacts → Import and upload the subscribed file. Files up to 200 MB are handled in the background, so a large audience does not tie up the browser.
- Map the obvious columns. Sendtim recognises headers such as “Email Address”, “First Name” and “Company” on its own, so a Mailchimp export usually needs very little correction.
- For every merge field you decided was a fact, type a custom property key beside its column —
plan,signup_source,city. Leave the rest blank to ignore them. - Under Options, pick the list these contacts join. If you sorted your tags into several lists, run one import per list rather than one import and a lot of tidying.
- Tick the consent box only if you hold documented opt-in for everyone in the file. Sendtim records the date and “import” as the source, which is what you would show if someone asked how you got their address.
- Start the import, then check Recent imports for how many were created, updated and rejected. Rejected rows tell you why.
Every custom property you create becomes a merge tag of the same name: a property called plan is {{plan}} in an email. Mailchimp’s *|FNAME|* becomes {{first_name}}.
4. Rebuild the emails and the journeys
| Mailchimp | Sendtim |
|---|---|
| Audience | The workspace’s contacts |
| Tag (origin) | List |
| Tag (fact) and merge field | Custom property |
| Segment | Segment |
| Regular campaign | Campaign |
| Customer Journey | Automation |
| Unsubscribed and cleaned | Suppression |
| Signup form | Form, or the contacts API |
Rebuild rather than paste. Mailchimp’s exported HTML carries its own tracking and template chrome, and pasting it into a Custom HTML block keeps all of it. The editor will get you a cleaner email in less time than cleaning up the old markup takes.
Rebuild journeys as automations, then send yourself through each one end to end before you point real signups at it. A welcome sequence that silently fails is the failure you will notice last.
5. Redirect the signups
Find everything that currently writes into Mailchimp — embedded forms, a Zapier zap, your checkout, the API — and point it at Sendtim. Anything you miss keeps filling an audience you no longer send from, and you will not notice for a month.
From your own code, a signup is one request:
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",
"customProperties": { "plan": "trial" },
"listIds": ["YOUR_LIST_ID"],
"consentGiven": true,
"consentSource": "api"
}'Keep the key on your server. The full endpoint reference is in Use the Sendtim REST API, and there are no-code routes through Zapier and hosted forms.
6. Cut over
- Add your sending domain in Sendtim and publish its SPF, DKIM and DMARC records. Leave Mailchimp’s authentication in place until it has stopped sending.
- Send the first campaign to your most engaged contacts — people who opened something in the last month — not to the whole list.
- Move one email type at a time, and switch Mailchimp off for that type the same day. Never run both for the same email.
- Watch hard bounces and complaints for two weeks. A bounce spike means the export included addresses Mailchimp had already cleaned.
- Keep the export files until you are certain. They are the rollback plan.
The reasoning behind each of those is in Switch email platforms without losing deliverability.
