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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

Compared

Different tools for different email jobs.

Resend is excellent developer email infrastructure. Mailchimp is excellent software for marketing teams. SendRaven is built for applications and AI agents that need to send, receive, automate and safely act on email.

Resend made sending email from code dramatically better. SendRaven starts from the next problem: what happens when software itself has to operate the conversation. Send, receive, read the reply, decide whether it needs an answer, respond in-thread, and put hard limits around what the agent can do.

SendRaven, Resend and Mailchimp compared: what changes the architecture or the bill
What changes the architecture or the billSendRavenResendMailchimp
Per-key daily cap and recipient allowlistYesdaily_send_limit and allowed_recipients on the key, checked on every send.Partlykeys scope to a domain and to send-only; no cap or allowlistNo
Human approval hold on a keyYesrequires_approval drafts the message and waits for a person.NoNo
The reply is a thread, not a webhookYesJoined on Message-ID to the message it answers.Noa received-email event; you fetch the message and set reply headers yourselfNo
One query for what is awaiting a replyYesGET /v1/threads?awaiting_reply=trueNoNo
Unsubscribe cancels queued sends and ends the sequenceYesTwo writes: suppress the address, cancel what is scheduled for it.Partlyan automation skips its remaining send steps for an unsubscribed contactNonot documented
Priced per email sent, never per contactYesOne meter. A contact is free.Partlytransactional by volume; marketing $40–$650/mo by contactsNoby contacts
Transactional, campaigns and automations on one planYesOne key, one plan, one dashboard, one suppression list.Notwo plans, one dashboardPartlytransactional is Mandrill, a paid add-on

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.