Free
$0 / mo
3,000 emails / month
3,000 inbound replies / month
- 1 agent
- TypeScript + Python SDKs, REST
- MCP server
- Magic-link signup, no card
Self-serve only: no procurement, no “contact us for Enterprise”, and no sales team to call.
Your agents send emails and receive replies a month
$0 / mo
3,000 emails / month
3,000 inbound replies / month
$20 / mo
50K emails / month
50K inbound replies / month
$99 / mo
250K emails / month
500K inbound replies / month
Self-serve
No Enterprise gate
All on the self-serve Scale plan
Each recipient counts as one email, so a message to two addresses counts as two, whether they are in to, cc or bcc. Sending stops at your plan’s monthly cap until the next billing cycle or an upgrade, and the dashboard warns you at 80%.
An inbound reply is one message delivered to one of your agents. It includes the parse to a structured payload, the injection scan, the sender-reputation lookup and webhook delivery. Inbound replies over the cap are still stored, but they are not scanned or sent to your webhook.
On paid plans, an optional classify step extracts intent, entities and urgency from first-contact mail (message.received) with our 2-call classifier (opt-in per agent). If your agent already runs an LLM on every new message, leave classification off: you don’t need the work done twice. If you want fast routing (switch (event.intent) with no extra LLM call), turn it on and we’ll do the extraction once for you.
For teams that want reputation isolated from the shared pool. It is ramped by your own real traffic, with no seed network and no schedule we can fake, and you request it through the contact form, on Scale, with no contract negotiation. It is optional: most senders stay on the shared pool. Worth saying plainly: an IP only earns a reputation from sustained volume, so below a few hundred thousand messages a month the warm shared rail delivers better than your own cold IP.
| Feature | Free | Pro | Scale | Enterprise |
|---|---|---|---|---|
| Emails + inbound replies, each with its own monthly allowance, counted apart. | 3,000 + 3,000 | 50K + 50K | 250K + 500K | 250K + 500K |
| Counted per recipient. Past it, the API answers 429 with Retry-After: 60. | 30 | 500 | 2,000 | 2,000 |
| Counted per recipient. Past it, the API answers 429 with Retry-After: 3600. | 300 | 5,000 | 20,000 | 20,000 |
| Each agent is an address of its own, with its own reputation. | 1 | 5 | Unlimited | Unlimited |
| Send from hello.yourcompany@send.mails.ai, with zero DNS setup. | Included | Included | Included | Included |
| Send from @yourcompany.com: verified with DNS records you create at your registrar, and DKIM-signed per domain. | Not included | Included | Included | Included |
| Feature | Free | Pro | Scale | Enterprise |
|---|---|---|---|---|
| Hold each agent to the domains you allow and to its own hourly and daily caps. The agent’s own key can’t loosen them. | Included | Included | Included | Included |
| Every inbound reply is scanned for prompt injection, alongside the parse, the sender-reputation lookup and webhook delivery. | Included | Included | Included | Included |
| A per-agent reputation classifier scores what goes out. | Included | Included | Included | Included |
| Known-bad recipients never get a message. | Included | Included | Included | Included |
| Complaint and bounce rates are checked every 15 minutes; a sender over 0.3% is paused before the upstream provider flags it at 0.5%. | Included | Included | Included | Included |
| Signed with a key generated for your domain. | Not included | Included | Included | Included |
| Reputation isolated from the shared pool, on request on Scale. | Not included | Not included | On request | On request |
| Any OpenID Connect provider, on Scale. With Enforce on, it is the only way in. | Not included | Not included | Included | Included |
| Feature | Free | Pro | Scale | Enterprise |
|---|---|---|---|---|
| @mailsai/sdk on npm and mailsai on PyPI. | Included | Included | Included | Included |
| Plain HTTPS from any language. | Included | Included | Included | Included |
| Use mails.ai from an MCP client, run locally or hosted. | Included | Included | Included | Included |
| Intent, entities and urgency on first-contact mail, at no extra charge. | Not included | Included | Included | Included |
| Feature | Free | Pro | Scale | Enterprise |
|---|---|---|---|---|
| Billed in advance through Stripe, with no annual commitment. | $0 | $20 | $99 | $99 |
| Two months free. | Not included | $200 | $990 | $990 |
| Free starts with a magic-link signup and no card. | No | Yes | Yes | Yes |
List prices for four agent shapes, side by side, from each vendor’s pricing page, checked October 2026. Mails.ai comes out cheapest when an agent receives a lot of mail; for send-only volume, a sending service is cheaper. Resend and Postmark count received email toward the plan; mails.ai counts it separately.
For what agents do with an inbox, see the use cases.
Custom-domain mail leaves through mail servers we run ourselves, not through a third party’s sending API. The full provider architecture, and the failover plan for the shared rail, are documented on the architecture page.
Every send is checked before it leaves our system: a per-agent reputation classifier scores what goes out, and suppression runs at send time so known-bad recipients never get a message. The classifier is invisible to your code: it’s deliverability infrastructure, not a product axis you have to choose between.
A per-sender cron monitors complaint and bounce rates every 15 minutes. Any sender crossing a 0.3% complaint rate gets paused before the upstream provider flags it at 0.5%, so one sender’s complaints are contained before they reach the pool you share. For teams that want reputation isolated from the shared pool, the Dedicated IP add-on is available on request (Scale).
In numbers: the complaint sweep runs every 15 minutes, the auto-pause threshold is 0.3%, and the injection scan looks for 6 kinds of injection.
“Replies come back as events with an injection score already on them. We deleted a whole layer of parsing code the week we switched, and we gate on the quarantine flag, so our agent never sees the ones that look like attacks.”
“Moving our agent onto our own domain was a few DNS records at the registrar. No nameserver move, and our existing mail kept working. Replies to the agent still come back to its inbox, threaded with the message they answer.”
“Our agent writes every reply as a draft, with a key that can’t send. Someone on the team reads it and hits Send now in the dashboard.”
“Our tests send to the test address and wait for the real reply, so the whole loop is covered before a customer ever writes in. It answers in about a second, which keeps the suite fast.”
“Adding the MCP server was one JSON block. Claude Code could send and read its own inbox a minute later.”
“A reputation score per agent tells us exactly which one needs attention, instead of one number for the whole account. It comes from each agent’s own replies, bounces and complaints, and we read it from the API.”
“Sends and replies have separate allowances, so a busy inbox never eats our sending quota. Pricing was the easy part.”
“Half our agents are LangGraph in Python and half are Node. Both SDKs make the same calls, so the team doesn’t have to think about it.”
“Signed webhooks, retries with backoff and an event id to dedupe on. The boring plumbing, done properly.”
“We signed up, made a key and sent our first message without talking to anyone, and the free tier never asked for a card. That’s how infrastructure should feel.”
Free covers 3,000 emails and 3,000 inbound replies a month, with no card. Upgrade when your agents get busy.
Get your API key