How to migrate from Mailchimp to a self-hosted newsletter (without wrecking your deliverability)
If you've decided Mailchimp's per-subscriber pricing no longer makes sense for your sending pattern, the migration itself is fairly straightforward. The catch is that doing it wrong can tank your deliverability for weeks, and "wrong" usually means rushing the steps.
This walkthrough covers what to do, in what order, and what to watch for. Aimed at people moving to Listmonk specifically (whether self-hosted or via a managed service), but most of the advice applies to any self-hosted newsletter platform.
If you're still deciding whether to leave, read our Mailchimp alternatives with flat pricing piece first. This article assumes the decision is made.
What you actually need to export from Mailchimp
Most migration guides tell you to export your audience and call it a day. That misses a few things.
The full export checklist:
- Your active subscriber list. Mailchimp calls this "Audience". Export to CSV with email, name, and any custom fields you use.
- Your suppression list. People who unsubscribed, bounced, or marked you as spam. Mailchimp keeps these to prevent re-sending. You need them on the new platform too, or you'll re-mail people who already opted out, which is illegal under CAN-SPAM and a fast path to deliverability problems.
- Your tags and segments. If you use Mailchimp's tagging to segment campaigns, you need the same labels on the new platform. Export segment members as separate CSVs.
- Your most recent campaign sends. Useful for reconstructing your sending pattern (how often you send, what time, etc).
- Your sending domain configuration. Note your current SPF, DKIM, and DMARC records. You'll change DKIM during the move.
For the suppression list specifically, in Mailchimp go to Audience, then Manage contacts. The Cleaned (bounces) and Unsubscribed views both export to CSV.
Clean the list before you import
This is the step most people skip and most people regret. A Mailchimp list that has been quietly accumulating subscribers for years is full of dead weight. Importing it directly to a new platform with a fresh sending reputation produces a high bounce rate on your first campaign, which is exactly what Gmail and Outlook use to decide you're a low-quality sender.
What to remove before importing:
- Anyone who hasn't opened or clicked anything in 12 months. Sounds harsh. It isn't. Cold subscribers don't generate revenue, they tank deliverability. Mailchimp can sort by engagement, so you can export only the engaged segment.
- Hard bounces. Already on your Mailchimp suppression list. Keep them suppressed on the new platform. Do not import them as active subscribers.
- Role addresses. info@, support@, hello@, admin@. These usually don't open emails and frequently bounce.
- Obviously broken addresses. Typos like gmial.com or hotmial.com. A quick sort by domain catches most of these.
- Anyone who marked you as spam. Treat as permanently removed. Do not import.
If your Mailchimp list is 10,000 people and 4,000 haven't engaged in a year, your real list is 6,000. Send to the 6,000, leave the rest. You can run a re-engagement campaign later from the new platform if you really want, but doing that on a brand-new sender domain is asking for trouble.
Set up the new platform
Whichever self-hosted option you pick (Listmonk on a small VPS, a managed service, Pikapods, Railway), the setup steps are roughly:
- Install Listmonk and Postgres. Listmonk's docker-compose template works out of the box.
- Pick a sending provider. Postmark, Amazon SES, Mailgun. Postmark is the easiest to get clean sending reputation with. SES is cheapest but requires moving out of sandbox mode, which has gotten harder over the past year.
- Configure SMTP in Listmonk. Settings, then SMTP, then enter your provider's credentials.
- Set up a list with the right opt-in mode. For public signup, use double opt-in. For an imported list you already had explicit consent for, single opt-in is acceptable but riskier on a new sender.
Skip Listmonk's default templates and write your own from scratch. The defaults are functional but generic. A plain text or lightly styled HTML template performs better in spam filters than a heavily designed one anyway.
We covered the platform-comparison angle in more detail in our piece on picking between Postmark, Amazon SES, and Mailgun.
Authenticate your sending domain
This is the technical step that trips most non-developers up. It's also non-negotiable. Email providers in 2026 will reject or spam-folder mail from any domain that isn't properly authenticated.
You need three DNS records:
- SPF. Tells receiving servers which IP addresses are allowed to send mail from your domain. Your sending provider gives you the value.
- DKIM. Cryptographically signs your outbound mail so the recipient can verify it came from you. Your sending provider gives you a CNAME or TXT record to add.
- DMARC. Tells receiving servers what to do with mail that fails SPF or DKIM. Start with
p=noneso you can monitor without blocking. Move top=quarantineonce you're sure everything is signing correctly.
If you've never set up DKIM before, follow your sending provider's wizard exactly. Postmark, SES, and Mailgun all have step by step guides. The most common mistake is forgetting to remove the old DKIM record from Mailchimp's sending domain after the move, which causes signing conflicts.
Warm up your sending reputation
You can't import your 6,000 cleaned subscribers and blast them all your first campaign. New sending domains, or new IPs on shared providers, have no reputation. Gmail and Outlook treat unknown senders with suspicion. If your first send goes to 6,000 people and even one percent bounces, that signals "low-quality sender" and the next campaign goes straight to spam.
A safe warmup pattern:
- Day 1: Send to your 50 most engaged subscribers. Real content, not a "we're moving!" email. Pick people who open every campaign.
- Day 3 to 5: Send to your top 500 engaged subscribers. Same content type.
- Day 7 to 10: Send to the next 2,000.
- Day 14: Send to the rest.
Watch the metrics after each send. Open rates should stay normal. Bounce rate should be under 2 percent. Complaint rate should be under 0.1 percent. If anything looks off, slow down and figure out why before continuing.
This adds about two weeks to your migration timeline. Skipping it can cost you months of recovery from a damaged reputation.
Send your first campaign carefully
Your first "we moved!" campaign should not be the email that announces the move. Instead, just send your normal content from the new platform. Subscribers don't need to know which tool you use. If they notice the unsubscribe link looks different, that's fine.
If you really want to announce the move (some founders do, as a "we're now privacy friendly" or "we're now EU hosted" message), send it after a couple of successful campaigns. By then your reputation is established and the announcement is just bonus context.
What to avoid in the first campaign:
- Heavy images. Plain text or lightly styled HTML only.
- Spammy subject lines. No ALL CAPS, no excessive punctuation.
- Misleading headers. The From name and From address should match what your subscribers expect.
- Unfamiliar sending IP. If your provider supports it, use a shared IP pool for the first month. Dedicated IPs need their own warmup, which takes weeks.
Monitor the first 30 days
After migration, watch these numbers across the first month:
- Open rate. Should match or exceed your Mailchimp baseline. If it drops sharply, something is authenticating wrong, or your content is landing in spam.
- Bounce rate. Should be under 2 percent. Higher means your list cleanup was incomplete.
- Complaint rate. Should be under 0.1 percent. Higher means subscribers don't remember opting in, often because you imported cold subscribers.
- Unsubscribe rate. Will probably tick up slightly right after migration as some forgotten subscribers wake up and leave. Normal.
- Spam folder placement. Periodically test with Gmail, Outlook, and Yahoo accounts you control. Send to each, see if they land in inbox or spam.
If any of these are off, address it before sending the next campaign. Reputation compounds. Bad sending today is recoverable. Bad sending repeated weekly is not.
A practical timeline
For someone with a list of around 5,000 to 10,000 subscribers, plan roughly:
- Week 0: Export Mailchimp data, clean the list, decide which platform.
- Week 1: Set up new platform, configure SMTP, authenticate sending domain. Run a small test campaign to yourself and a few friends.
- Week 2: Warmup phase. Send to engaged segments only, watching metrics.
- Week 3: Full send.
- Week 4 onward: Normal cadence, watching the metrics.
Plan four weeks from "decide to move" to "back to normal cadence". Rushing tends to cost more time in reputation recovery than the warmup would have saved.
Where Yellaro fits
Yellaro is one option for the managed service path. EU hosted, runs Listmonk, flat per-tier pricing, Postmark handles deliverability. If you want to skip the install and maintain side of self-hosting, the trial is 30 days, no credit card required. Everything in this guide works the same way whether you self-host or use a managed option.
If you'd rather run your own VPS, the Listmonk docs cover that path well. Either way the migration steps in this guide are identical.