At a glance
Fourteen rows. Every testmail.app cell is what its pricing page and documentation said on 2 September 2026; every GrabMail cell is read from the constants the service enforces. “Partly” means a paid tier, a cap, or a caveat the row cannot hold — the sections below say which.
| Feature | GrabMail | testmail.app |
|---|---|---|
| Free tier | Yes: Everything: public domains, your own domain, the API and the MCP server. No account, no card. | Partly: 100 emails a month, 1 day retention, one random namespace, unlimited addresses. A 14-day trial of the paid plans first. |
| No account, no API key | Yes: Nothing to create. A GET with the address in the query string reads the mailbox. | No: A passwordless account, an assigned namespace and an API key: Authorization: Bearer on GraphQL, apikey on the JSON API. |
| REST API | Yes: Three endpoints over HTTPS, OpenAPI 3.1, one read per second per address. | Yes: A JSON API and a GraphQL API with wildcard search, spam scores and live queries; rate limits published. |
| Choose your own address | Yes: Any name on 8 public domains, grabmail.io and mixozia.com among them, free. | Partly: The tag is yours; the namespace is assigned (random on Free and Essential, custom on Pro and above). |
| Your own domain | Yes: Free and unlimited: one MX record at smtp.grabmail.io, no registration step. | Partly: Only on the Unlimited plan, $269 a month billed annually. |
| Message retention | 5 days, fixed. Not a tier, not a setting. | 1 day on Free, 1–3 days on Essential, 1–30 days on Pro, custom on Enterprise; set per namespace. |
| Attachments | Yes: Up to 5 MB per message, downloadable from the inbox and the API. | Yes: Yes; keep messages under 5 MB, above 20 MB they are rejected. |
| No ads, no tracking | Yes: No ads, no analytics, no third-party script. | Yes: No advertising; a paid SaaS. |
| Private inbox | No: Public: anyone who knows the address can read it. Each mailbox has an alias to hand out instead. | Yes: Private: reading a namespace needs an API key authorised for it; keys can be scoped per namespace. |
| MCP server for AI agents | Yes: Free MCP server at https://grabmail.io/mcp: create an inbox, wait up to 25 seconds for a message, read it. | No: None published: no MCP server, no llms.txt. |
| Sending mail | No: None, by design. Receive only. | No: None. It receives, parses, spam-tests and indexes. |
| Webhooks or push | No: None. Poll once a second, or let the MCP wait hold the call open. | Partly: No webhooks. Live queries long-poll for up to a minute, then answer with a redirect to themselves. |
| Official SDKs | No: None. An OpenAPI document and three endpoints instead. | Partly: One official GraphQL client for JavaScript with retries; examples in eight languages; Cypress, Playwright and TestCafe guides. |
| Apps and extensions | Partly: A Chrome extension, loaded by hand; not on the store yet. | No: No app or extension; a GraphQL playground and a visual viewer on Pro and above. |
Checked 2 September 2026. testmail.app’s pricing page lists “Full API access” from Essential upward; its free plan is described as 100 emails a month with one day of retention. Custom domains appear only on the Unlimited plan. Where a figure is not published, the cell says so.
What testmail.app does well
testmail.app is what a small team builds when it wants email testing done properly and nothing else. Four things it does that GrabMail does not:
- Live queries. A GraphQL query with
livequery: truewaits on the server until a matching message exists, for up to a minute, then redirects to itself so the client keeps waiting. That is a polling loop you do not have to write. GrabMail’s REST API is polled; only its MCP server waits. - Search across a run. Wildcards on subject and body, filters by tag prefix and time, and a SpamAssassin score and report on every message. A test can ask “every message to
run42-*since the suite started” in one query. GrabMail lists one mailbox at a time. - Private, scoped namespaces. Mail in a namespace is readable only with a key authorised for it, and a team can hand each project its own key. Every GrabMail mailbox is public.
- Published rate limits and soft quotas. The documentation gives exact figures — more than 10 requests a second per IP, 5 a second per paid key sustained for an hour — and paid plans allow temporary surges above the monthly allowance. Few services in this category put numbers in writing.
Where GrabMail is different
GrabMail is built for the case testmail.app’s free plan is too small for and its account model rules out: a job that needs a real inbox with nothing to sign, store or count.
- No key, no account, no namespace. testmail.app assigns you a namespace and issues a key; every call carries it. GrabMail assigns nothing:
run-42@grabmail.iois an inbox the moment mail arrives, and reading it is a GET with the address in the query string. - No monthly count. testmail.app Free stops at 100 emails a month; a suite that signs up ten users a run uses that in ten runs. GrabMail has no monthly allowance — one read a second per address, all month, on the free tier.
- Your own domain, free. At testmail.app a custom domain is on the Unlimited plan, $269 a month billed annually. Here it is one MX record at smtp.grabmail.io, and every address on the domain is a catch-all inbox — the answer to sign-up forms that refuse a testing domain.
- An MCP server for agents. testmail.app has none. GrabMail’s at https://grabmail.io/mcp gives an agent an inbox and a blocking
wait_for_messageof up to 25 seconds, with no key.
Price, side by side
testmail.app’s prices are per month billed annually, with a higher monthly-billing figure, and are non-refundable except at its discretion. GrabMail’s only paid plan buys access to a pool of domains kept off the disposable-mail blocklists; everything in the table above stays free.
| Tier | GrabMail | testmail.app |
|---|---|---|
| Free | Public domains, your own domain, API, MCP. No account, no cap. | 100 emails a month, 1 day retention, one random namespace, unlimited addresses and users. |
| Cheapest paid | Premium, $24 a month: API access to the off-blocklist domain pool, paid in crypto. | Essential, $9 a month billed annually or $12 monthly: 10,000 emails a month, 1–3 days retention, full API. |
| Team tier | Pro $78 and Scale $148 a month: more messages and keys on the same pool. | Pro, $29 a month billed annually or $39 monthly: 50,000 emails, 1–30 days retention, custom namespaces, visual viewer. Enterprise $89 ($129 monthly): 1,000,000 emails, SSO, 99.99% SLA. |
| Above that | None. There is no contract tier and no SLA. | Unlimited, $269 a month billed annually or $299 monthly: 10,000,000 emails, custom domains, SCIM, custom contracts. |
Prices as published on 2 September 2026. testmail.app allows temporary surges above a paid allowance and asks for an upgrade if they persist. GrabMail’s pricing page has the full grid.
For developers: reading a mailbox
The whole difference in one command. This reads a GrabMail mailbox with no header, no key and no account:
$ curl -sG https://grabmail.io/api/v1/mailbox --data-urlencode "address=anything@grabmail.io" | jq '{count, alias}'The testmail.app equivalent is a GraphQL query for inbox(namespace, tag) with a bearer key, or the JSON API with apikey, and with livequery it waits for you. It is the nicer API to write a test against — and it needs the account behind it. On GrabMail the wait is a loop with a deadline; the Playwright and Cypress guides have it, and the OTP guide covers pulling the code out.
The addressing habit carries over almost unchanged: testmail.app’s namespace.tag@inbox.testmail.app becomes tag@grabmail.io here, or tag@your-domain.com once the MX record is set. A suite that builds tags from a run id keeps doing so.
For AI agents
testmail.app publishes no MCP server and no llms.txt; an agent can call its API with the team’s key like any script. GrabMail’s server at https://grabmail.io/mcp gives an agent an inbox with no key: create_inbox, a blocking wait_for_message of up to 25 seconds, read_message.
For an agent that must sign itself up to something, the keyless server is the difference between finishing and stopping at a form. Email for AI agents covers the loop and the guard rails.
Switching from testmail.app
Both are inbound-only, so the switch is the address and the query:
- Change the address builder.
{namespace}.{tag}@inbox.testmail.appbecomes{tag}@grabmail.io, or a domain of your own with its MX atsmtp.grabmail.io. - Replace the live query with a wait loop. A GET on
/api/v1/mailboxevery second untilcountis above zero or the deadline passes. The guides have it in TypeScript and Python. - Remove the key. Delete the API key from CI and the GraphQL client from the lockfile. Nothing replaces them.
- Check what you relied on. Search across tags, spam scores and 30-day retention have no equivalent here: one mailbox per call, 5 days, no scoring. Attachments still work, up to 5 MB.
Which one, for what
The honest split:
Pick GrabMail when
- the call must be keyless, or the monthly count on the free plan is the problem;
- you want a catch-all inbox on your own domain without the top-tier price;
- an AI agent needs an inbox with no account behind it.
Pick testmail.app when
- you want live queries and search across a whole test run;
- the mail must be private to a namespace, with a key per project;
- you need retention up to 30 days, or an SLA on the Enterprise plan.
When to stay with testmail.app
Three situations where switching would cost you something real:
- Your tests carry real data. A namespace is private to its keys; every GrabMail mailbox is public, on the public domains and on yours. A test that mails a customer’s details needs the first.
- Your suite searches. If tests ask for “all messages to
run42-*with subjectWelcome*”, that is one query there and a loop over addresses here. Keep the query. - You are on Essential and it is enough. $9 a month for 10,000 emails and a real API is not a cost worth engineering around. Switch when the key in CI, the monthly count or the domain price is the thing that hurts.
Questions
Is GrabMail a free alternative to testmail.app?
For receiving and reading test mail, yes, with no account, no key and no monthly count. It does not replace testmail.app’s live queries, search, spam scoring, private namespaces or long retention, which do not exist here.
What does testmail.app’s free plan include?
100 emails a month, one day of retention, one randomly assigned namespace and unlimited addresses and users, after a 14-day trial of the paid plans. Its pricing page lists full API access from Essential at $9 a month billed annually.
Can I use my own domain with testmail.app?
Custom domains are listed only on the Unlimited plan at $269 a month billed annually. On GrabMail any domain you own becomes a catch-all inbox with one MX record, free. The catch-all guide shows the setup.
Which one has published rate limits?
Both. testmail.app documents a global limit above 10 requests a second per IP and per-key limits (5 a second sustained on paid keys; 1,000 an hour, 10,000 a day and 100,000 a month on free keys). GrabMail documents one read a second per address and 1200 requests a minute per source, with no monthly figure. GrabMail’s limits page has the rest.
Which one works with AI agents?
GrabMail runs a free keyless MCP server with a blocking wait_for_message; testmail.app publishes none, though its API can be called by an agent holding the team’s key. The client guide has the GrabMail configuration.


