Abstract flat illustration of two stacks of envelope icons side by side, one stack noticeably taller

CarlyEmail vs AgentMail: 2.5x the Inboxes for $20

AgentMail and CarlyEmail both give AI agents real email inboxes over an API, and the two APIs are built on the same resource model. What separates them is what $20 and $200 buy.

At $20 a month, AgentMail’s Developer plan gets you 10 inboxes and stops sending at 1,000 emails a day and 100 per five minutes. CarlyEmail’s Startup plan gets you 25 inboxes and no daily cap.

The quick answer: pick CarlyEmail if your agents send and receive mail and you would rather pay for volume than design around throttles. You get 2.5x the inboxes at $20, no daily or five-minute send cap on any paid plan, your own domain with no “Sent via” footer even on the free tier, and five times the team seats. AgentMail’s free tier sends more (3,000 emails a month against 1,000), and its $200 plan allows 150,000 emails a month against CarlyEmail’s 100,000. Switching is mostly a base-URL change for REST callers, because the paths, request fields and webhook payloads line up.

CarlyEmail vs AgentMail, plan by plan

Each cell reads CarlyEmail / AgentMail at the same monthly price. The better side of each pair is bold.

$0$20/mo$200/mo
PlanFree / FreeStartup / DeveloperBusiness / Startup
Inboxes3 / 325 / 10250 / 150
Emails a month1,000 / 3,00010,000 / 10,000100,000 / 150,000†
Daily send cap100 / 100None / 1,000None / 15,000
Five-minute send capNone / NoneNone / 100None / 1,500
Custom domains1 / 010 / 10100 / 150
”Sent via” footer on your mailNo / YesNo / NoNo / No
Team seats3 / 210 / 250 / 10
Storage1 GB / 3 GB25 GB / 10 GB250 GB / 150 GB†

†AgentMail’s pricing table leaves Startup’s monthly volume and storage blank. The plan data behind that page gives 150,000 emails and 150 GB, and its docs give the same 150,000.

AgentMail also offers a SOC 2 report on its $200 Startup plan, EU-region and bring-your-own-cloud deployment on Enterprise, and SMTP and IMAP access. It takes 20% off for yearly billing. CarlyEmail’s Enterprise tier covers higher volume, a dedicated sending domain or custom terms. The full AgentMail breakdown, add-ons included, is in AgentMail pricing.

Where CarlyEmail pulls ahead

More inboxes per dollar

Agent products count in inboxes: one per agent, one per customer, one per workflow that needs its own address. At $20, CarlyEmail holds 25 against AgentMail Developer’s 10. At $200, it holds 250 against AgentMail Startup’s 150.

Every CarlyEmail plan gets the whole API, so the tiers differ in volume only. Pods, one per tenant with keys that cannot reach another tenant’s mail, are on the free plan too.

No daily or five-minute cap once you pay

AgentMail’s Developer plan stops at 1,000 emails a day and 100 in any five minutes. Startup stops at 15,000 a day and 1,500 per five minutes. Its add-ons sell more inboxes, domains and monthly emails, while the daily and five-minute caps are fixed per plan.

That bites on bursty work. Say Emily’s agent sends 400 renewal reminders on the first of the month. On Developer, 100 per five minutes stretches that run across at least 15 minutes, and a 1,200-email day is refused after 1,000. On CarlyEmail Startup, the send ceiling is 10,000 a month.

The quota counts recipients you send to. Received mail never counts against it. If an agent does reach a cap, the request is refused with a 429 that names the cap and a Retry-After set to the exact reset. GET /v0/organizations returns every count beside its limit, so the agent can check before it is refused.

AgentMail’s free plan has no custom domains. A free agent sends as name@agentmail.to, and its outbound mail carries a “Sent via AgentMail” footer until you pay. AgentMail announced that footer on Hacker News in May, replying to complaints about agent mail arriving from agentmail.to addresses.

CarlyEmail’s free plan includes one custom domain with SPF, DKIM and DMARC set up for you, and no plan adds a footer. The free tier is where you demo to a customer, and agent@yourcompany.com reads very differently from a shared domain with someone else’s branding under your signature.

Five times the seats

AgentMail allows 2 people on Free and Developer and 10 on Startup. Seats are not among its add-ons, so a third engineer, or the support lead who approves drafts, means the $200 plan. CarlyEmail allows 3, 10 and 50.

Mail that fails authentication is kept

AgentMail drops inbound mail when SPF or DKIM explicitly fails. Its docs say no bounce goes back, and the sender’s server may still report the message delivered. Its own knowledge base calls failed authentication the most common reason inbound email goes missing.

CarlyEmail keeps mail that fails authentication. It is labelled unauthenticated and fires message.received.unauthenticated instead of message.received. A handler subscribed to message.received still never sees a forged sender. And when a customer says they emailed your agent twice, the message is there to find. See how receiving works.

What 25, 50 or 250 inboxes cost

AgentMail sells extra inboxes at $2 a month each on top of a plan. CarlyEmail’s tiers include them. Monthly prices:

InboxesAgentMailCarlyEmail
25$50 (Developer $20 + 15 × $2), 1,000 sends a day, 2 seats$20 (Startup), no daily cap, 10 seats
50$100 (Developer $20 + 40 × $2), 1,000 sends a day, 2 seats$200 (Business), no daily cap, 50 seats, room for 250 inboxes
250$400 (Startup $200 + 100 × $2), 15,000 sends a day, 10 seats$200 (Business), no daily cap, 50 seats

Between 26 and 99 inboxes, AgentMail’s add-ons undercut CarlyEmail’s $200 tier on sticker price, with the 1,000-a-day cap and two seats still attached. At 25 inboxes CarlyEmail costs 60% less, and at 250 it costs half.

The API is the same shape

If you have built on AgentMail, CarlyEmail will look familiar. Both have:

  • A REST API under /v0 with inboxes, messages, threads, drafts, labels, allow and block lists, domains, pods, scoped API keys, webhooks and WebSockets. An inbox’s ID is its email address.
  • TypeScript and Python SDKs, a CLI and a hosted MCP server.
  • Svix-format signed webhooks, with spam, blocked and unauthenticated mail split into their own event types.
  • Agent self-sign-up: one unauthenticated call, a six-digit code sent to a human, and an unverified account that can email only that human.
  • Whitelist permissions on keys scoped to the organization, a pod or one inbox. A key with draft_create but not message_send gets a 403 on send however the agent reasons.

The core request bodies use the same field names too: username, display_name and client_id to create an inbox; to, cc, subject, text, html and attachments to send; url, event_types, inbox_ids and pod_ids for a webhook.

Here is a CarlyEmail inbox that reads its mail and replies inside the thread:

import { CarlyEmail } from "carlyemail";

const carly = new CarlyEmail(); // reads CARLYEMAIL_API_KEY
const inbox = await carly.inboxes.create({ username: "hello" });
const { messages } = await carly.messages.list(inbox.email);
await carly.messages.reply(inbox.email, messages[0].message_id, { text: "On it." });

There are step-by-step guides for LangChain, the OpenAI Agents SDK, the Claude Agent SDK, the Vercel AI SDK, Mastra and Cloudflare Agents. CarlyEmail is the email layer, so you keep your agent and your model key.

Details that save you code on CarlyEmail

  • Thread repair. Replies join a thread on In-Reply-To and References. When a client sends no chain (Outlook is the usual culprit), a matching subject with overlapping participants inside a time window still lands the reply in the right thread.
  • A delivery log for webhooks. GET /v0/webhooks/attempts records every attempt with its status code and failure body, and GET /v0/events lists what happened while your endpoint was down.
  • A receiver you don’t write. The Python SDK’s create_email_router verifies the signature over the raw body, admits only message.received, drops the inbox’s own sends and redeliveries, checks the sender against an allowlist, and answers before your agent starts thinking.
  • Mail stays until you delete it. Messages don’t expire, and cancelling drops you to the free plan with every address and message kept.

Switching from AgentMail to CarlyEmail

  1. Create the account. Get started at carlyemail.com, or run npx carlyemail signup --human-email you@example.com --username support and then npx carlyemail verify 123456 with the code from your inbox. You can also hand it to the agent: Read https://docs.carlyemail.com/llms.txt and set yourself up with an email address.
  2. Recreate inboxes and pods. It is the same POST /v0/inboxes call with the same usernames. For multi-tenant setups, create a pod per customer first and pass its pod_id.
  3. Bring your domain on a fresh subdomain. Add something like agents.yourcompany.com. CarlyEmail generates the DKIM, SPF, DMARC and MX records and hands them over as a zone file you can import. Run it beside the AgentMail subdomain, so replies to open threads still arrive where they were sent.
  4. Swap the client. REST callers change the base URL from api.agentmail.to to api.carlyemail.com and swap the key, which both take as a bearer token. SDK callers rename a few calls:
// AgentMail
const client = new AgentMailClient({ apiKey: process.env.AGENTMAIL_API_KEY });
await client.inboxes.messages.send(inboxId, { to, subject, text });

// CarlyEmail
const carly = new CarlyEmail(); // reads CARLYEMAIL_API_KEY
await carly.messages.send(inboxId, { to, subject, text });
  1. Move the webhooks. Register your endpoint with POST /v0/webhooks and store the new whsec_ secret. Signing uses the same Svix scheme and the event body follows the same contract, so a handler that reads event_type and message.thread_id keeps working. See webhooks.
  2. Repoint MCP. Replace https://mcp.agentmail.to/mcp with https://api.carlyemail.com/mcp. Coding agents send the key as Authorization: Bearer rather than x-api-key, and chat clients such as claude.ai and ChatGPT sign in with OAuth, no key to paste. In Claude Code:
claude mcp add --transport http carlyemail https://api.carlyemail.com/mcp \
  --header "Authorization: Bearer $CARLYEMAIL_API_KEY"
  1. Wind down the old account once open threads have gone quiet and you have exported any history you need. Past messages don’t move on their own.

For other options in the category, see AgentMail alternatives and email MCP servers.

FAQ

Is CarlyEmail cheaper than AgentMail?

At the same $20 and $200 price points, CarlyEmail includes more inboxes (25 vs 10, 250 vs 150), five times the seats and no daily send cap. For 25 inboxes, AgentMail costs $50 a month with add-ons and CarlyEmail costs $20. AgentMail includes more free emails (3,000 vs 1,000 a month) and allows 150,000 a month on its $200 plan against CarlyEmail’s 100,000.

Is the CarlyEmail API compatible with AgentMail’s?

The resource model, the /v0 paths, the core request field names, the Svix webhook signing and the event payload line up. REST code mostly needs a new base URL and key. SDK code needs light renaming: client.inboxes.messages.send becomes carly.messages.send.

Does AgentMail have a daily sending limit?

Yes. It is 100 a day on Free, 1,000 a day and 100 per five minutes on Developer ($20), and 15,000 a day and 1,500 per five minutes on Startup ($200). CarlyEmail’s free plan allows 100 a day, and its paid plans have no daily or five-minute cap.

Can I use my own domain on the free plan?

On CarlyEmail, yes. The free plan includes one custom domain with SPF, DKIM and DMARC configured, and no footer is added to your mail. AgentMail’s free plan has no custom domains and adds a “Sent via AgentMail” footer. Its custom domains start on the $20 Developer plan.

Can an AI agent sign itself up for CarlyEmail?

Yes. One unauthenticated call (POST /v0/agent/sign-up with human_email and username, or npx carlyemail signup) creates the account and its inbox. Until the owner confirms a six-digit code, it can email only that owner, 10 a day and 100 a month, with no domains or webhooks. To try it, paste Read https://docs.carlyemail.com/llms.txt and set yourself up with an email address. into any agent.

Which one works with Claude, ChatGPT and Cursor?

Both run hosted MCP servers. CarlyEmail’s is at https://api.carlyemail.com/mcp with 33 tools. Chat clients connect with OAuth and dynamic client registration, and coding agents pass an API key as a bearer token. See the MCP setup guide.

Give your agent a real inbox

Your agent gets its own email address. People can email it, it answers in the same thread, and your personal inbox stays out of it. Start with 3 inboxes, no card needed.

Get started
See the prompt
Read https://docs.carlyemail.com/llms.txt and set yourself up with an email address.