Migrate
Bring the list. Bring the opt-outs. Then send.
Every provider exports contacts. The part that decides whether the move goes well is whether the unsubscribes, bounces and complaints come too. The import reads them from a status column or a whole file, and suppresses them before your first send.
Export steps last checked 17 September 2026.
From MailchimpMailchimp exports an audience as a zip of CSVs, one per status: subscribed, unsubscribed, cleaned, and non-subscribed.From LoopsLoops exports its audience as one CSV with a subscribed column and one column per contact property, which is the easiest shape there is: one file, one import, the status read from the column..From ResendThe send call is close to a rename, and an audience is a short list of fields (email, first name, last name, unsubscribed), so this is the smallest migration on this page.From SendGridSendGrid keeps contacts in Marketing Campaigns and opt-outs in five suppression lists (global unsubscribes, group unsubscribes, bounces, spam reports, invalid emails), and each exports separately.From MailgunMailgun's mailing lists export as a CSV of address, name, vars and subscribed, and its suppressions (bounces, unsubscribes, complaints) export per domain.From PostmarkPostmark holds no contact list, so there is no audience to import.From AgentMailAgentMail gives an agent a mailbox.
The same six steps, whichever tool
The order matters more than the tool.
Verify your domain first
Add the domain under Domains and publish the DNS records it gives you. Use a subdomain you have not sent from before if you can (mail.yourdomain.com for transactional, news.yourdomain.com for campaigns), so the two reputations stay separate. Nothing sends until this is green, and it can take a while for DNS to settle, so start it before the export.
Import the subscribers
Contacts → Import a CSV. Pick or create the list, upload the export, and check the column mapping: address, names, tags, and which columns become custom properties. Re-running the same file is safe: existing contacts are updated, not duplicated.
Import the opt-outs
Then the unsubscribed, bounced and complained lists, with the matching status. Each one is flagged and suppressed before your first send: unsubscribes for marketing only, bounces and complaints for everything. An import never resubscribes someone who has opted out here.
Check the counts
The audience page shows how many were imported, updated and suppressed. Compare the suppressed count to what the old provider reported. If it is far off, the status column was read differently from how you meant. The mapping step shows what each value became.
Switch the API key
For transactional mail, point the code at POST /v1/emails with a SendRaven key. The request shape is from, to, subject, html or text, and an Idempotency-Key header. Keep the old key alive for a day in case something still points at it.
Send the first campaign to the engaged part of the list
A new domain has no history, and mailbox providers judge it on the first few thousand messages. Opens and clicks start from your first SendRaven send, so use the old provider's engagement: tag the recently engaged people on import, send the first campaign to a segment on that tag, then widen. A new sending domain also warms up, so a large first campaign spreads over several days on its own. The reputation gate refuses a campaign once the bounce or complaint rate is already high; it cannot refuse the one that gets you there.
What the import does
One upload, with a mapping step in the middle.
- Recognises the export. Mailchimp, Loops, Resend, SendGrid and Mailgun exports are identified by their headers and the mapping is pre-filled. Any other CSV works too; you just confirm the columns.
- Carries tags and custom fields. A tags column splits on commas. Every other column becomes a typed custom property, or maps onto one you already have.
- Reads status the way the file means it. A subscribed column, an unsubscribed column, or a worded status. Files with no status column, like Mailchimp’s unsubscribed and cleaned exports, take one status for the whole file.
- Refuses to guess. A status it does not recognise is left out and reported, never assumed subscribed. Mailchimp’s “pending” is the usual one.
- Never resubscribes. Someone who opted out in SendRaven stays opted out no matter what a later file says. Re-running an import is safe.
The same import is an API call and an MCP tool, so an agent can run a migration as well as a person.


