Migrating from Mailchimp to Amazon SES drops per-email cost from roughly $1.75-2.25 per 1,000 sends on Mailchimp Standard to $0.10 per 1,000 on SES (AWS, 2026) - around a 95% reduction at the delivery layer. A 50,000-contact sender paying Mailchimp $350-450 per month typically lands around $60 per month after the move ($20 in SES delivery fees plus Mailblast's $40 rung for that contact count), with no platform branding and full data ownership, in exchange for a roughly two-week project to set up infrastructure you'd previously outsourced. The destination isn't "Amazon SES" on its own - SES is a delivery API with no UI - it's SES plus a management layer like Mailblast, Sendy, or Mailwizz that gives you list management, an editor, and automation.
This walkthrough covers the architecture decision, the actual step-by-step sequence we recommend, the gotchas we see most often, and the concrete cost math at common list sizes. If you're still deciding between staying and switching, our Mailblast vs Mailchimp breakdown and Mailchimp pricing explained post are the better starting points.
Why teams migrate from Mailchimp to SES
Cost is the dominant reason, and the gap grows with list size. Mailchimp's contact-based billing means a 50,000-contact list on the Standard plan runs $350-450 per month even at modest send volumes - and unsubscribed contacts continue to count against your tier unless you manually purge them. The same volume on Amazon SES costs $0.10 per 1,000 emails (AWS, 2026), which works out to around $20 per month for four campaigns to that list, plus whatever you spend on the management layer.
The secondary reasons are structural. SES gives you per-message-level event data (delivered, bounced, complained, opened, clicked) routed to your own SNS topics or S3 buckets, so you own the raw data instead of querying it through a vendor dashboard. There's no "Sent with Mailchimp" badge in the footer. And because you sit on your own AWS account, scaling from 50k to 5M subscribers is a quota increase rather than a contract renegotiation.
The trade-off is real: you take on responsibility for bounce handling, suppression lists, warm-up, and reputation monitoring. Most of this gets handled by the management layer if you pick one, but if you go raw-SES + custom code, the operational burden is non-trivial.
The architecture decision: raw SES vs managed SES
Before exporting anything, decide which architecture you're moving to. Amazon SES on its own is a sending API priced at $0.10 per 1,000 emails (AWS, 2026) - it can deliver mail but it does not give you a campaign editor, a list management UI, an automation builder, or a click-tracking dashboard. For marketing senders, you almost always pair SES with a management layer. The three common shapes:
| Architecture | Raw SES + custom code | Managed SES + Mailblast | Self-hosted (Sendy / Mailwizz) |
|---|---|---|---|
| List management UI | ✗ Build it | ✓ Included | ✓ Included |
| Drag-and-drop editor | ✗ None | ✓ BeeFree | Basic |
| Automation / drip flows | ✗ Build it | ✓ Included on all plans | Limited |
| Bounce / complaint handling | ✗ Build SNS handlers | ✓ Automatic | Manual config |
| Suppression list | SES account-level only | ✓ Per-account + per-list | ✓ Per-list |
| Hosting / ops burden | Your code | None - hosted | You run a server |
| Recommended for marketing senders | Not really | ✓ Yes - fastest path | If you want self-hosted |
| Monthly cost (50k contacts, 4 campaigns) | $20 SES + your time | $20 SES + $40 Mailblast = ~$60 | $20 SES + hosting + license |
For most teams moving off Mailchimp, the managed-SES path (Mailblast or similar) is the closest functional replacement: same drag-and-drop workflow, same list-management workflow, same automation concept - just sitting on your own SES account at SES economics.
Step-by-step migration walkthrough
The full sequence runs about two weeks for a 50k-contact sender. The mechanical steps (export, import, DNS) take a single day; AWS production-access approval typically takes 24-48 hours and DKIM verification often completes in minutes but is allowed up to 72 hours (AWS, 2026). The rest is warm-up, automation rebuild, and the canary campaign that catches problems before the full cutover.
Step 1 - Verify your domain in Amazon SES. Open the SES console, choose your region (us-east-1 is the most common), go to Verified identities, and add your sending domain. Use Easy DKIM with 2048-bit keys (AWS, 2026); SES will publish three CNAME records that you add to your DNS. Verification usually completes within 72 hours but often takes minutes. See our Amazon SES setup guide for the full DNS walkthrough.
Step 2 - Set up a custom MAIL FROM domain and DMARC. Add a mail.example.com subdomain as the MAIL FROM, publish the MX and SPF records SES tells you to, and confirm your DMARC policy at _dmarc.example.com allows the new sending source. SPF and DKIM both need to align with the From: header for DMARC pass.
Step 3 - Export your Mailchimp audience. In Mailchimp, go to Audience > All contacts > Export Audience and request the CSV. The export includes subscribed contacts, unsubscribed contacts, and contacts marked "Cleaned" (Mailchimp's term for hard bounces and persistent complaints). Download all three - you'll need each one in a different way.
Step 4 - Clean the export. This step alone saves more bounces than any warm-up plan. We cover the exact cleanup recipe in the next section.
Step 5 - Request SES production access. New SES accounts start in the sandbox, capped at 200 emails/day and only to verified addresses (AWS, 2026). Submit the production access request from the SES console - AWS asks how you handle bounces, complaints, and unsubscribes. Approval typically takes 24-48 hours. Don't skip this; the sandbox will block any real campaign.
Step 6 - Set up bounce and complaint handling. Create two SNS topics - ses-bounces and ses-complaints - and subscribe them to your management layer's webhook URL (Mailblast provides one in the SES settings page). Then attach those topics to your verified identity in SES. Without this, bounced and complained addresses keep getting sent to, which trips the SES 0.1% complaint and 5% bounce thresholds fast.
Step 7 - Configure the SES account-level suppression list. SES has a built-in suppression list that blocks all sending to addresses you add. Import your Mailchimp "Cleaned" contacts as suppressions before sending anything.
Step 8 - Warm up your sending if your volume is high. Mailchimp's shared IP reputation doesn't transfer. If you currently send more than 10,000 emails/day, ramp on SES gradually - see the warm-up section below.
Step 9 - Rebuild your templates. Mailchimp's drag-and-drop templates don't export to a format Mailblast's BeeFree editor or any other SES tool can import directly. Recreate the 1-3 templates you actually use; most senders only have one newsletter template and one welcome email.
Step 10 - Rebuild automation flows. Mailchimp's customer journey builder doesn't export. Document each active automation (trigger condition, email content, delays, branching) and rebuild it in your new tool. Mailblast includes automation on every paid plan, not on free.
Step 11 - Run a canary campaign, then cut over. Send your first SES batch to the most-engaged 10% of your list (recent openers, last 30 days). Watch bounce and complaint rates for 24 hours. If both stay under 1% and 0.05% respectively, schedule the rest. Then update your signup forms, decommission Mailchimp at the end of the billing cycle, and archive the audience export for compliance records.
Cleaning the Mailchimp export before importing
A Mailchimp audience that's been growing for 3-5 years almost always contains addresses that will hard-bounce or spam-complain the moment you send from a fresh SES account. AWS will throttle or pause your account at 5% hard bounce rate and 0.1% complaint rate (AWS, 2026), so a dirty import can trip both thresholds inside a single campaign. Mailchimp's shared-IP reputation has been absorbing that damage for you; clean the file before importing.
Drop in this order:
- Contacts marked "Cleaned" in Mailchimp. These are hard bounces and persistent complainers. Mailchimp will not send to them; you should not either. Import them into the SES account-level suppression list, not into your active list.
- Unsubscribed contacts. Also into the suppression list, never into the active list. Skipping this step is the single most common cause of complaint-rate spikes after a migration.
- Addresses with no opens in 180+ days. Hard call, but the most reputation-protective. Old subscribers who haven't opened in six months are more likely to mark you as spam on your new sending domain than to re-engage. Either drop them entirely or move them to a re-engagement segment you send to last, after the migration has settled.
- Syntax-invalid emails. Anything without an
@, with multiple@, or with no TLD. Mailchimp's basic validation usually catches these but exports can include rows that snuck in via API. - Role accounts (optional).
info@,admin@,sales@,postmaster@,noreply@- these tend to complain more than they engage. Drop them unless you have a specific B2B reason to keep them. - Duplicates. Mailchimp can hold duplicate contacts across multiple audiences. Deduplicate by email (case-insensitive) before import.
The cleanup typically removes 15-30% of the export. That's expected and healthy - you're shedding the addresses Mailchimp's reputation was carrying for you.
Warming up SES if your sending changes shape
Amazon SES gives every new sending identity a fresh reputation, and AWS monitors bounce and complaint rates per region with thresholds of 5% hard bounce and 0.1% complaint above which sending gets restricted (AWS, 2026). If you currently send 5,000 emails per month spread across two campaigns, this doesn't matter - your volume is small enough that SES will absorb it from day one. If you send 50,000 emails per campaign or 200,000+ per month, warm up.
The basic shape: start at 1,000-2,000 emails/day to your most-engaged segment, double daily for the first week, then increase by 50% per day for week two. By day 10-14 you're at full volume. SES tracks sending statistics per region, so warm up in the region you'll send from long-term (changing regions resets warm-up history).
Our SES warm-up guide covers the ramp schedules in depth. The short version: never blast a 50k list on day one from a fresh SES account, even if your Mailchimp history was clean.
Common pitfalls
Five issues account for most failed Mailchimp-to-SES migrations, and four of them push the new account past the 5% bounce or 0.1% complaint thresholds that put SES sending under review (AWS, 2026). All are preventable if you know to look for them.
Leaving Mailchimp signup forms live while sending from SES. New subscribers join Mailchimp, never make it to your SES list, and silently drop out of every campaign you send. Replace every embedded form with a Mailblast signup form (or your own form posting to the Mailblast API) before the cutover, not after.
Not updating DMARC to allow the new sending source. If your DMARC policy is p=reject and your SPF or DKIM doesn't align with the From: header on SES-sent mail, every message fails DMARC at receivers. Test with mail-tester.com or a Gmail message header inspection before sending to the canary.
Skipping warm-up because "Mailchimp had a great open rate." Mailchimp's open rate is on Mailchimp's reputation. Your SES reputation starts at zero. A 50k blast on day one from a brand-new SES account routinely triggers temporary throttling at Gmail and Outlook.
Keeping triggered/transactional flows in custom code instead of migrating them. If you have welcome emails, password resets, or receipts flowing through the Mailchimp transactional API (Mandrill), every one of those code paths needs updating - either to the SES SDK directly or to the Mailblast API. Audit the codebase for mandrillapp.com and mailchimp.com/3.0/ references before pulling the plug.
Forgetting the SES sandbox. New accounts can only send 200 emails/day to verified addresses. Production access is a separate request that takes 24-48 hours to approve. Submit it on day one of the migration, not day ten.
Cost comparison after migration
The savings scale with list size because Mailchimp bills per contact while SES bills per email sent at $0.10 per 1,000 messages (AWS, 2026). The chart below shows annual cost for a sender with 50,000 contacts running four campaigns per month (200,000 sends/month, 2.4M sends/year) - Mailchimp Standard runs roughly $4,800 per year at that tier, against around $720 for SES plus Mailblast's $40/month rung (50,000 contacts).
The raw-SES column is technically cheapest but misleading - it doesn't include the engineering time to build list management, an editor, automation, and a reporting dashboard. For senders who already have an in-house product engineering team, raw SES + a thin internal UI is defensible. For everyone else, the middle column is the realistic comparison.
How Mailblast handles the migration for you
Mailblast is a hosted management layer on top of your own Amazon SES account (BYO-SES), which means the migration from Mailchimp lands you in a tool that looks similar to what you left, just sitting on different delivery infrastructure. The pieces that matter for the move:
- CSV import wizard for the cleaned Mailchimp export, with column mapping for custom fields.
- BeeFree drag-and-drop editor that lets you visually recreate Mailchimp templates close to the original (manual recreation, no automated import - the underlying formats are too different).
- Automation builder for welcome sequences and drip campaigns, included on every paid plan (free tier is 1,000 contacts, 10,000 emails/month, no automation sends).
- Signup form embed code to replace your Mailchimp embedded forms one-for-one, posting new subscribers directly to your Mailblast lists.
- SES IAM credentials instead of holding your AWS root account - Mailblast only needs send permissions and the SNS topic ARNs.
- No platform branding on any paid rung - just your domain, no "Sent with Mailblast" footer (the free tier keeps the footer).
Paid plans start at $10/month for 1,000 contacts on a 32-rung ladder; a 50,000-contact sender, typical of those moving off Mailchimp Standard, lands around $40/month.
FAQ
How long does a Mailchimp to Amazon SES migration take?
Plan around two weeks end to end for a typical 50,000-contact sender. The CSV export and SES domain verification only take a few hours, but warming up sending volume, rebuilding automation flows, and running a small canary campaign before full cutover stretches the project across roughly 10 business days. Larger lists with active drip flows or multiple brands take longer.
How much can I save by moving from Mailchimp to Amazon SES?
A 50,000-contact sender on Mailchimp Standard pays roughly $350-450 per month. The same sending volume on Amazon SES costs $20 in raw delivery fees plus Mailblast's $40/month rung for that contact count - around $60 total. That's an 85% drop. Senders above 100,000 contacts often see 90%+ reductions (AWS, 2026).
Can I use Amazon SES on its own without a tool like Mailblast?
Technically yes, but raw SES is just a delivery API. It has no UI for list management, no campaign editor, no automation builder, and no analytics dashboard. For marketing email you almost always pair SES with a management layer - Mailblast, Sendy, Mailwizz, or your own code. Transactional senders can use the SES SDK directly.
Do I need to warm up Amazon SES if I'm coming from Mailchimp?
Probably yes, if you send more than 10,000 emails per day on Mailchimp today. Mailchimp's shared IP reputation does not transfer to your SES account. SES gives you a fresh sender identity from the regional IP pool, and ramping volume gradually over 2-4 weeks avoids bounce-rate spikes that can trip the SES reputation thresholds (AWS, 2026).
Will my Mailchimp signup forms keep working after migrating to SES?
No. Mailchimp's embedded signup forms post submissions to Mailchimp's audience API. You need to replace each form with a Mailblast signup form (or your own form posting to the Mailblast API) before retiring Mailchimp, otherwise new subscribers disappear into a deprecated audience. Plan this swap during the cutover, not after.
Disclosure: Mailblast publishes this blog. The migration steps above describe how Mailblast sits on top of your own Amazon SES account, but the cleanup, warm-up, and DMARC guidance applies whether you choose Mailblast, Sendy, Mailwizz, or raw SES as your destination.