Migrate from AgentMail
Moving an agent from AgentMail to SendRaven.
AgentMail gives an agent a mailbox. SendRaven gives it your product's mail: sending from your domain, replies joined to the message they answer, and per-key guardrails around what the agent can do. There is no contact list to move, and nothing to import.
The migration is a change of tools on the agent's side (the MCP server or the REST calls) and a domain on yours. Threads in flight finish where they started.
Export steps checked 6 September 2026 against agentmail.to. Weighing it up? SendRaven vs AgentMail.
- List the inboxes the agent uses and which of them need to keep receiving. Each becomes an address on your domain.
- Note the threads that are still open. They finish on AgentMail; new conversations start here.
- Collect the webhook endpoints and what each one handles, so the same handlers can be pointed at SendRaven's events.
- If the agent keeps a list of addresses that bounced or asked it to stop, export that as a CSV of address and reason.
Compared
What changes when you move from AgentMail.
| What changes the architecture or the bill | SendRaven | AgentMail |
|---|---|---|
| Priced per email sent, never per contact | Yes One meter. A contact is free. | No per inbox and per plan: $20/mo for 10 inboxes and 10,000 emails |
| Transactional, campaigns and automations on one plan | Yes One key, one plan, one dashboard, one suppression list. | No no campaigns or automations |
| The reply is a thread, not a webhook | Yes Joined on Message-ID to the message it answers. | Yes |
| One query for what is awaiting a reply | Yes GET /v1/threads?awaiting_reply=true | Partly labels and drafts; no awaiting-reply query documented |
| Per-key daily cap and recipient allowlist | Yes daily_send_limit and allowed_recipients on the key, checked on every send. | Partly per-key permissions and inbox scope; allow and block lists sit on inboxes, not keys |
| Human approval hold on a key | Yes requires_approval drafts the message and waits for a person. | Partly a key can write drafts it cannot send; a person sends them |
| Unsubscribe cancels queued sends and ends the sequence | Yes Two writes: suppress the address, cancel what is scheduled for it. | No no sequences |
From AgentMail's own pricing and documentation, last verified 16 September 2026. A “No” means not offered or not documented on that date. Everything else is on SendRaven vs AgentMail.
What moves
What comes across, and what you rebuild.
| In AgentMail | In SendRaven |
|---|---|
| Inboxes | A verified domain with an inbound route. Any address on it receives; the agent reads threads rather than an inbox. |
| Sending | POST /v1/emails from your own domain, or the send_email MCP tool. From addresses are yours, not a hosted one. |
| Threads | Replies are joined by Message-ID to the message they answer, with quoted text stripped. GET /v1/threads/{id} and the MCP thread tools. |
| Webhooks | One endpoint per event type, signed. An inbound reply fires message.received with the thread id. |
| Guardrails | New here: a daily cap, an allowed-recipient list and an approval hold on the agent's key, checked on every send. |
| Suppressions | Any address that bounced for the agent should be suppressed here before it is mailed again. Import the list if you have one. |
The part that matters
Bring the opt-outs.
An agent that mails people one at a time still builds a list of addresses that bounced or asked it to stop. If that list exists anywhere, import it with the matching status before the agent sends from the new domain. A hard bounce it already learned is one the new domain does not need to learn again.
Templates and sending
The copy and the code.
For an agent on MCP, the change is the server: npx -y @sendraven/mcp with a SendRaven key, or the remote server at the MCP URL with OAuth. The tools are send_email, get_thread, list_threads and the rest; the descriptions say what each costs to get wrong, and a refused send explains itself in the error. For REST, POST /v1/emails with from, to, subject and html or text, and GET /v1/threads for the conversation.
{
"mcpServers": {
"sendraven": {
"command": "npx",
"args": ["-y", "@sendraven/mcp"],
"env": { "SENDRAVEN_API_KEY": "sk_live_..." }
}
}
}Then, in order
The steps, in order.
Verify your domain first
Add the domain under Domains and publish the DNS records it gives you. The agent sends from an address on it and receives on any address at it. Nothing sends until this is green.
Create a key with guardrails
Under API keys, give the agent its own key with the contacts, emails and threads scopes it needs, a daily send limit, and an allowed-recipient list if it only ever mails known people. Turn on the approval hold for the first week: every send waits for a person, and you see what it would have done.
Point the agent at SendRaven
Swap the MCP server or the REST base URL and key. Send one message to yourself and reply to it; the reply should appear as a thread with the quoted text stripped.
Repoint the webhooks
Create endpoints under Webhooks for the events the handlers need (message.received, delivered, bounced) and verify the signature. Then move the MX record so inbound mail arrives here.
Let open threads finish
Conversations already under way stay on AgentMail until they end; a reply to a message sent from there goes there. New ones start here. Turn the old inboxes off once the last thread is quiet.
Questions
Asked by people leaving AgentMail.
Does the agent lose its own address?
It gets one on your domain instead (agent@mail.acme.com or whatever you choose), and mail sent from it carries your domain's reputation rather than a hosted one. Anything sent to any address on the domain is received, so the agent can use several.
What is different about threads?
They are joined by Message-ID, never by subject. Two customers replying to the same "Re: Invoice" stay in two threads, and an agent reading one cannot leak the other's context into a reply. A reply that cannot be matched starts a new thread rather than guessing.
Is there anything to import at all?
Only what the agent learned about addresses: bounces and people who asked it to stop. Everything else (domain, key, webhooks) is configuration, and takes an afternoon.

Start with the domain.
3,000 emails a month, inbound included, and no charge until you switch paid sending on. Verify the domain today. The other guides are on the migrate page.

