Guide · Migration
How to migrate from Mailchimp to Amazon SES
To migrate from Mailchimp to Amazon SES, export your audience, import only the subscribed contacts, keep every unsubscribed and cleaned address out, rebuild your automations, publish the SES DNS records, and warm up your sending over a few weeks. This guide covers each step, with the exact columns, records, and volume plan.
By Alejandro Medina · Updated 2026-11-06 · Prices checked November 2026
The short version
- Set up Amazon SES first: verify your domain and request production access.
- Export your Mailchimp audience. The ZIP has separate files for subscribed, unsubscribed, non-subscribed, and cleaned contacts.
- Keep unsubscribed and cleaned addresses out of the import. Put cleaned addresses on the SES suppression list.
- Import the subscribed contacts with their tags and consent columns.
- Rebuild your segments as saved filters.
- Rebuild your Customer Journeys as sequences and automations.
- Publish the SES DNS records next to your Mailchimp records.
- Warm up: send to your most engaged contacts first, then widen over 2 to 6 weeks.
- Cut over, then cancel Mailchimp when the last automation has moved.
1. Set up Amazon SES before you touch Mailchimp
A new SES account starts in the sandbox: 200 emails per 24 hours, one email per second, and only to verified addresses. Verify your sending domain and request production access first, because AWS reviews the request by hand. The AWS SES setup guide and the production access steps cover this part.
Check your SES pricing plan too. SES à la carte pricing is $0.10 per 1,000 emails. New SES accounts start on the Essentials plan at $0.16 per 1,000, and you can switch to à la carte at any time.
2. Export your contacts with tags and consent status
In Mailchimp, open Audience, choose the audience, and export all contacts. The export comes as a ZIP with one CSV per contact type: subscribed, unsubscribed, non-subscribed, and cleaned. Download it soon, because Mailchimp keeps exports for 30 days.
The subscribed file has your audience fields, the TAGS column, and the consent columns: OPTIN_TIME, OPTIN_IP, CONFIRM_TIME, CONFIRM_IP, and marketing permissions on GDPR audiences. Keep all of them. They are your proof that each person agreed to get your email.
Contact exports do not include opens and clicks. If you want that history for your warm-up, save Mailchimp segments such as "opened a campaign in the last 30 days" and export each one before you leave.
3. Keep unsubscribes and cleaned addresses out. Never re-mail them.
The unsubscribed file is people who told you to stop. The cleaned file is addresses that hard bounced or bounced again and again. Do not import either file. One send to these addresses can push your SES bounce or complaint rate past the level where AWS reviews your account.
- Save both files outside Mailchimp and BYOMailer as your record.
- Add the cleaned addresses to the SES account-level suppression list. SES supports a bulk import for this.
- Before any later import, remove the addresses that are in either file.
- Skip the non-subscribed file too, unless those people opted in somewhere else.
4. Import your subscribed contacts into BYOMailer
In BYOMailer, go to Contacts → Import contacts, pick a list, and upload the subscribed CSV or an Excel file. BYOMailer reads the email, name, and tags columns. Every other column becomes a custom field on the contact. Large files import in the background, and the list page shows the progress.
| Mailchimp column | BYOMailer | What to do |
|---|---|---|
| Email Address | Rename it. The import needs a column named "email". | |
| First Name | name | Rename it, or join First Name and Last Name into one "name" column. |
| TAGS | tags | One cell, tags separated by commas. Remove any quotes around each tag. |
| OPTIN_TIME, OPTIN_IP, CONFIRM_TIME, CONFIRM_IP | Custom fields | Keep them. They are your record of consent. |
| Marketing permissions (GDPR audiences) | Custom fields | Keep the column so you know who agreed to what. |
| MEMBER_RATING, other audience fields | Custom fields | Every column that is not email, name, or tags becomes a custom field. |
If you exported engaged segments, import each one into the same list with an extra tags value such as engaged-30d. A contact that is already there keeps its data and gets the new tag.
Prefer code? Create each contact with POST /api/v1/lists/{listId}/contacts and send the email, name, and tags. See the Contacts API docs. And on every BYOMailer plan, a person helps you with the import. You do not need a higher tier to get migration help.
5. Rebuild your segments and automations
Write each segment and Customer Journey down before you leave: its trigger, its filters, and the emails in it. Then rebuild them in BYOMailer. Start with the welcome series, because new signups land there first.
| In Mailchimp | In BYOMailer |
|---|---|
| Welcome series (Customer Journey) | Sequence with an automation that starts it when a contact joins a list |
| Tag added starting point | Automation: contact gets a tag, then add the contact to a sequence |
| Journey branch on a field value | Step filters on the sequence step, or an attribute-change automation |
| Groups and interests | Tags, or topics for subscription preferences |
| Segments | Saved segments built on tags, lists, custom fields, dates, engagement, and location |
For templates, use Export as HTML in Mailchimp and paste the HTML into a BYOMailer template. Replace merge tags such as *|FNAME|* with {{ name }}, and use the same double-brace syntax for any custom field.
6. Make the DNS changes
Add the SES records next to your Mailchimp records. The SES DKIM names use random tokens, so they do not clash with the Mailchimp k2 and k3 records. SES shows the exact values when you verify the domain. A custom MAIL FROM domain lets SPF align with your domain for DMARC. It needs exactly one MX record.
| Record | Type | Name | Value | When |
|---|---|---|---|---|
| SES DKIM (3 records) | CNAME | <token>._domainkey.yourdomain.com | <token>.dkim.amazonses.com | Before your first SES send |
| Custom MAIL FROM | MX | mail.yourdomain.com | 10 feedback-smtp.<region>.amazonses.com | Before your first SES send |
| SPF for MAIL FROM | TXT | mail.yourdomain.com | "v=spf1 include:amazonses.com ~all" | Before your first SES send |
| DMARC | TXT | _dmarc.yourdomain.com | v=DMARC1; p=none; rua=mailto:[email protected] | Now, if you do not have one |
| Mailchimp DKIM | CNAME | k2._domainkey and k3._domainkey | Leave as is | Remove only after your last Mailchimp send |
Start DMARC at p=none and read the reports. Move to p=quarantine when every source that sends as your domain passes. For branded links in your emails, add a custom tracking domain.
7. Warm up your sending
Mailbox providers trust senders with a history. AWS tells you to increase volume slowly, send to your most active recipients first, and send less when you see blocks or throttling. AWS also says that building a reputation on a new dedicated IP takes about 2 to 6 weeks, depending on the provider. This plan follows those rules:
| When | Who gets the email | Rule |
|---|---|---|
| Week 1 | Contacts who opened or clicked in the last 30 days | Start here. These people want your email. |
| Week 2 | Add contacts who opened or clicked in the last 90 days | Move on only if bounces stay under 2% and complaints under 0.1%. |
| Week 3 | Add contacts who opened or clicked in the last 6 months | If you see blocks or throttling, hold the volume for a week. |
| Week 4+ | The rest of your subscribed list | Send a re-permission email to contacts with no opens in 12 months, or leave them out. |
The limits come from AWS: keep bounces under 2% and complaints under 0.1%. AWS reviews an account at a 5% bounce rate or a 0.1% complaint rate, and can pause sending at 10% bounces or 0.5% complaints. Check your daily sending quota in the SES Account dashboard before each bigger send. SES raises the quota as you send good mail, and you can also ask for an increase.
Sources: AWS SES Developer Guide, "Warming up dedicated IP addresses", "Managing your Amazon SES sending quotas", and the SES enforcement FAQ. Checked November 2026.
8. Cutover checklist
- SES domain verified, DKIM records published, and production access granted.
- Custom MAIL FROM and DMARC records published.
- SES sending quota (Account dashboard) is higher than your largest send.
- Subscribed contacts imported. Import count matches the Mailchimp subscribed file.
- Unsubscribed and cleaned files saved outside both tools. Cleaned addresses on the SES suppression list.
- Signup forms and your app now add new contacts to BYOMailer, not Mailchimp.
- Welcome sequence and key automations rebuilt and tested with a test send.
- Unsubscribe link tested end to end.
- Mailchimp automations paused, so nobody gets the same email twice.
- Warm-up plan in your calendar.
- After the last Mailchimp send: final export for your records, then cancel or downgrade.
What it costs after the move
Mailchimp Standard costs $450/mo at 50K contacts and $800/mo at 100K, after the 12-month intro discount (US prices, November 2026). Mailchimp counts unsubscribed contacts in that total. On SES à la carte, 4 emails a month to 100K contacts is 400,000 emails, or $40. With the BYOMailer Founder plan, the total is $89. Compare Mailchimp and BYOMailer at your list size.
Real numbers: on November 6, 2026, the Legendsverse case study showed 271,987 emails sent through BYOMailer on its own SES, at 98.99% deliverability, for $27.20 in total SES fees.
Frequently asked questions
How long does a Mailchimp to Amazon SES migration take?
The export, import, and DNS work fit in one day. AWS reviews production access requests by hand, so request it first. Then plan 2 to 6 weeks of warm-up. AWS says a new dedicated IP takes about 2 to 6 weeks to build a reputation, depending on the mailbox provider.
Can I import my unsubscribed contacts from Mailchimp?
Do not import them. Keep the unsubscribed and cleaned CSV files from the Mailchimp export as your record, remove those addresses from every future import, and add the cleaned addresses to the SES account-level suppression list.
Do I keep my Mailchimp open and click history?
No. Mailchimp contact exports do not include email report data such as opens and clicks. Before you export, save your engaged contacts as Mailchimp segments and export each one, then import them with a tag such as engaged-30d. You can use those tags for your warm-up.
Will my emails go to spam after I move to SES?
Not if you authenticate and ramp up. Publish DKIM, a custom MAIL FROM with SPF, and DMARC. Send to engaged contacts first. AWS recommends a bounce rate under 2% and a complaint rate under 0.1%, and reviews accounts at 5% bounces or 0.1% complaints.
How much does Amazon SES cost compared to Mailchimp?
SES costs $0.10 per 1,000 emails at the à la carte rate. New SES accounts start on the Essentials plan at $0.16 per 1,000 and can switch to à la carte at any time. Mailchimp Standard costs $800/mo at 100K contacts after the intro discount. 400,000 emails on SES à la carte cost $40.
Does BYOMailer help with the migration?
Yes, on every plan, from Solo at $29/mo. A person helps you import contacts, rebuild sequences and automations, and verify your SES domain. You can send your first 25,000 emails before you subscribe.
Can I keep Mailchimp running while I move?
Yes. The SES DKIM records do not replace the Mailchimp k2 and k3 records, so both can send from the same domain. Pause the Mailchimp automations before you turn on the BYOMailer ones, so nobody gets the same email twice.
Keep exploring