From Mailchimp to Postal, without reactivating people who left the list
Export your audience, separate who can receive from who can't, and import into Postal. You rebuild templates, campaigns, automations and forms, and this guide shows how.
- Data format
- CSV
- Where each contact stands
- 4 statuses
- Automations and forms
- Redo
- Per imported file
- 20 MB
Overview
What comes along and what you redo
The contact base comes as a CSV file. You recreate the rest in Postal, with this guide beside you. Nothing happens on its own: you export, check and import.
Comes as a file
Subscribed contacts, name, custom fields, tags and who unsubscribed. The file also includes the signup date and IP, which help record consent.
You rebuild in Postal
Templates (the HTML comes over, the design not always), campaigns, automations and signup forms. This guide says where each thing lives.
Stays in Mailchimp
Each contact's open and click history, reports and old campaigns. Download whatever you want to keep before closing your account.
Equivalence
The same concepts, other names
What Mailchimp calls one thing, Postal may call something else. Use this table as a dictionary during the move.
| In Mailchimp | On Postal | How it works on Postal |
|---|---|---|
| Audience | Audience | Contacts, segments, tags, topics and properties in one place. Each email appears once per team. |
| Subscribed | Subscribed contact | A contact who isn't unsubscribed. |
| Unsubscribed | Unsubscribed | Doesn't receive campaigns or automation emails, whatever the topic. |
| Cleaned | Suppression list | Addresses that must not receive anything. They're removed from all sending and never become contacts. |
| Non-subscribed | No equivalent | People who gave their email but didn't agree to receive marketing shouldn't enter the audience. |
| Tags | Tags | Mark contacts without needing a segment. Useful in filters and automations. |
| Groups | Topics | Subjects the contact chooses to receive or not, on the preferences page that opens from the unsubscribe link. |
| Audience fields | Properties | Custom fields with a type: text, number, yes/no or date. Up to 100 per team. |
| Segments | Segments | Static (a list built by hand or by import) or dynamic (by filters, updated automatically, depending on the plan). |
| Campaigns | Campaigns | Sending to a segment, and, if you want, only to those subscribed to a topic. |
| Templates | Templates | Visual editor or HTML. |
| Automation flows (formerly Customer Journeys) | Automations | A trigger and steps: wait, send email, condition, change the contact. |
| Signup forms | Forms | A ready-made page or one on your site, with email confirmation (double opt-in). |
| Reports | Reports | Deliveries, opens, clicks and unsubscribes per campaign, from the first send on Postal. |
Prepare the move
Before exporting, agree on who does what. Don't close Mailchimp yet: you'll need it until the end.
- Whoever exports must be an Owner or Admin of the Mailchimp account.
- Create your Postal account. See your plan's contact limit on Pricing: the Free plan has 1,000 contacts, Pro 5,000 and Scale 50,000.
- Make a list of what exists in Mailchimp: audiences, groups, tags, saved segments, templates, campaigns, automations and forms.
- If you have more than one audience, remember that in Postal each email is a single contact per team. Merge what makes sense and use segments to separate them.
- Whoever manages your site or domain will need to publish a few DNS records (next step).
Verify the sending domain
For Postal to send on behalf of your brand, the domain must be verified. In Domains, Postal shows a few records for whoever manages DNS to copy, and checks them on its own for up to 72 hours, flagging what's wrong.
- Prefer a subdomain just for marketing, like
news.exemplo.com.br. That way, whatever happens with your campaigns does not affect your system's emails. - Check whether any existing record has the same name before you publish the new ones.
- Names are relative to the domain. If your DNS panel complains about a repeated domain, remove it from the name. The details are in Domains and DNS.
Export your audience from Mailchimp
In Mailchimp, open Audience, click Export audience, then Export CSV. The file may arrive as a ZIP with one CSV for each type of contact.
- The file includes the audience fields, tags (
TAGS), the date and IP of the signup (OPTIN_TIMEandOPTIN_IP) and those of the confirmation (CONFIRM_TIMEandCONFIRM_IP). - According to Mailchimp, the file does not include: opens and clicks, purchases, language and signup source.
- You can also export just one segment, tag or group with Export segment.
- The file stays available in your account for 30 days.
- If accents look wrong in Excel, do not save over the file: Postal reads files in UTF-8 and Windows-1252.
Sort by status: consent comes first
Mailchimp splits contacts into four statuses, and each one goes to a different place in Postal. This is where you protect the people who asked to leave.
They agreed to receive.
Import as contacts.
They received your campaigns and asked to leave.
Import them marked as unsubscribed so Postal remembers. Never as subscribed.
Addresses with a permanent or repeated error (bounce).
Put them on the suppression list. Do not import them as contacts.
They gave their email but did not agree to marketing.
Leave them out of campaigns.
- Unsubscribed: in their file, leave an Unsubscribed column filled with
simin every row and map that column to the Unsubscribed (yes/no) field in the import. - Subscribed: do not map the Unsubscribed column. For people already in Postal, the value in the file wins: a “no” would reactivate someone who already left.
- Cleaned: during import, Postal ignores addresses that are on the suppression list. To suppress a large list, use the API (
POST /suppressions/batch/add, 100 at a time) with help from whoever looks after your system; in the dashboard, Suppressions accepts one address at a time. Without the API, import the cleaned contacts along with the unsubscribed ones: they will never receive campaigns, but they take up a spot in your plan's contact limit. - Non-subscribed: the safe default is to leave them out. If you have another legal basis for contacting them, the decision is yours and it must be documented.
Import into Postal
In Audience, on the Contacts tab, click Import CSV. Choose the file, say which field each column matches and check the preview before importing. The import runs in the background and you can follow the result.
- First create the Properties for the custom fields you want to keep, such as city or date of last purchase. The types are text, number, yes/no and date.
- The tags column accepts names separated by commas or semicolons. Any that do not exist are created.
- Mailchimp groups can become Topics. The simplest way is to export each group as a segment and import each file, selecting the topic in Subscribe to topics. That field subscribes every contact in the file.
- Leave the Trigger automations option off. When it is on, each new contact can start automations, and a large list may receive the welcome sequence all at once.
- Contacts that already exist are updated by email. Empty cells do not erase values, and repeated emails in the file count only the first time. Rows with errors appear in the result.
- Each file can be up to 20 MB: split larger ones. The import stops when your plan's contact limit is reached.
- Keep the consent record: create properties such as
origemanddata_inscricaoand import the signup date and IP into them. The date type stores only the day. - Before sending, run the list through Email validation, which flags invalid and risky addresses.
Rebuild templates and campaigns
Templates and campaigns do not carry over on their own. What you can take with you is the HTML, and the rest has to be rebuilt.
| In Mailchimp | On Postal | Note |
|---|---|---|
*|FNAME|* | {{{FIRST_NAME}}} | Accepts a default value: {{{FIRST_NAME|cliente}}}. |
*|LNAME|* | {{{LAST_NAME}}} | |
*|EMAIL|* | {{{EMAIL}}} | |
A field of your own, like *|CIDADE|* | {{{contact.cidade}}} | The property must exist. Its key is what counts. |
*|UNSUB|* | {{{POSTAL_UNSUBSCRIBE_URL}}} | Without the variable, Postal adds an unsubscribe footer at the end of the email. |
*|UPDATE_PROFILE|* | {{{POSTAL_UNSUBSCRIBE_URL}}} | The preferences page covers unsubscribing from everything, resubscribing and choosing topics. |
*|ARCHIVE|*, *|FORWARD|* | No equivalent | Remove these links from the email. |
*|MC:SUBJECT|*, *|CURRENT_YEAR|*, *|LIST:NAME|*, *|LIST:COMPANY|* | No equivalent | Write the text directly. |
- Templates coded in Mailchimp: in Campaigns > Email templates, open More options and choose Export as template to download the HTML. According to Mailchimp, drag-and-drop editor templates cannot be exported this way.
- The full account export brings a folder with the HTML of templates and campaign emails. Only one is allowed per 24 hours and it can take up to 24 hours. Check what came through, because Mailchimp does not detail the case of drag-and-drop templates.
- In Postal, under Templates, build the email in the visual editor or paste the HTML. Campaigns also accept HTML. If the HTML points to Mailchimp images, upload the images again before closing your account.
- To rebuild a campaign, open Campaigns and choose the segment (and, if you want, the topic), the sender from a verified domain, the subject and the preview text. Send a test and schedule it.
- Who receives it: only contacts in the segment who are not unsubscribed, not on the suppression list and, if there is a topic, subscribed to it.
- Campaigns already sent are not imported. Keep the HTML and the reports: in Mailchimp, View analytics > Download All Reports generates an export of campaign reports (automations are left out, and the file does not show who opened or clicked). Postal keeps emails, events and logs for 30 days.
Rebuild the automations
Mailchimp's documentation only describes copying an automation within the same account. We did not find an export to another platform, so treat each flow as new and use the chance to review what still makes sense.
| Flow in Mailchimp | How it looks in Postal |
|---|---|
| Welcome for new subscribers | Contact created or form submitted trigger, a wait and the email. |
| Sequence from a tag | Tag received trigger. |
| Someone joins an interest group | Topic subscription or segment entry trigger. |
| Opened or clicked | Open or click trigger, or the step that waits for the contact to open, click or reply. |
| Abandoned cart and store orders | Trigger for an event sent by your system, which requires a developer. The ready-made integrations are Stripe, Supabase, Clerk, Auth0 and Firebase, with no store platforms. |
- The available steps are wait, send email, check a condition, change the contact and call a webhook. A/B testing depends on the plan.
- Imports don't start automations unless you turn that option on. Review who would enter before you activate it.
- Each plan has a monthly limit of runs. See Automations.
Rebuild your signup forms
Hosted, embedded and pop-up forms keep sending people to Mailchimp for as long as they stay live. Recreate each one in Postal and swap the address or the code on your site.
- Under Forms, use the ready-made page (
forms.postal.so/seu-nome) or submit from your own site. - Turn on double opt-in: the person confirms their email before joining the audience.
- A consent field stores the date and IP of the opt-in. Each answer can be saved to a property, subscribe the person to topics and add them to a segment.
- Only turn off the Mailchimp form after the new one is live and tested. See Forms.
Check what does not migrate and the consent
Before the first campaign, look over this table and the consent checklist. It applies to any list you bring from another platform.
| Item | Does it come to Postal? | What to do |
|---|---|---|
| Subscribed contacts | Yes, via CSV | Import in Audience > Contacts. |
| Unsubscribed | Yes, via CSV, marked | Import with Unsubscribed = yes. |
| Cleaned | Not as contacts | Put on the suppression list. |
| Non-subscribed | No | Leave out of campaigns. |
| Tags and custom fields | Yes | File columns; create the properties first. |
| Groups | Partly | Export each group as a segment and import into the topic. |
| Segment rules | No, only the contacts | Rebuild the filters in dynamic segments. |
| Templates | Partly | The HTML of coded templates; drag-and-drop ones may need to be rebuilt. |
| Sent campaigns | No | Keep the HTML and the report. |
| Automations and forms | No | Refazer. |
| Opens and clicks for each contact | No | Mailchimp's contacts file does not include them. |
| Landing pages, ads and website | No | Mailchimp does not export them. |
Consent and LGPD
- I imported as contacts only those who were subscribed in Mailchimp.
- People who were unsubscribed came in as unsubscribed, and I did not import a spreadsheet with “no” in the Unsubscribed column on top of them.
- Cleaned addresses are on the suppression list or came in as unsubscribed.
- I did not import non-subscribed contacts as if they had agreed to marketing.
- I kept where each contact came from and when they signed up, so I can show the legal basis for sending.
- The option to trigger automations was off during the import, and the automations were reviewed.
- Every email carries the unsubscribe link, and I tested mine on a real address.
- The new form uses double opt-in and the consent text is clear.
- The first send goes to the most engaged segment, and volume grows gradually.
- I kept the reports and the HTML of old campaigns before closing the Mailchimp account.
Frequently asked questions
Do I need to keep Mailchimp during the migration?
Yes, until you finish: export, import, check, and have new forms and automations live. According to Mailchimp, a deleted audience can no longer be exported. Also download the reports and the HTML of your campaigns before closing the account.
Can I import people who unsubscribed, just so Postal remembers them?
Yes, and it is recommended. Import the unsubscribed file with the Unsubscribed column set to sim. They take up a spot in your plan's contact limit, but they never receive campaigns.
Do cleaned contacts start receiving emails again?
No. Addresses on the suppression list never become contacts and are removed from every send. If the person corrected their address, add the new address as a contact.
My list is bigger than my plan's limit. Now what?
The import stops when the contact limit is reached and tells you in the result. See the plans on Pricing or talk to us through the contact form before importing.