---
title: Email sending API providers compared
slug: email-sending-apis
url: "https://toolweight.dev/compare/email-sending-apis"
question: Which email sending API is best for developers?
tools: 13
fields: 25
last_verified: 2026-06-05
freshness: 28%
verify_cadence: 30d
license: CC-BY-4.0
---

# Email sending APIs, ranked by time to first send

> **Which email sending API is best for developers?**
>
> Resend, AhaSend and Loops get you from signup to a delivered email in about ten minutes. Amazon SES is the cheapest at $0.10 per thousand but its sandbox exit takes a day or more. Postmark still has the best-policed shared pool. Pick on time-to-first-send and pool quality, not list price.

## At a glance

|  |  |
| --- | --- |
| Canonical | https://toolweight.dev/compare/email-sending-apis |
| Tools compared | 13 |
| Fields compared | 25 |
| Last verified | 2026-06-05 (2mo ago) |
| Verify cadence | 30d |
| Freshness | 28% (mean cell confidence) |
| Killer field | time_to_first_send |
| Scoring | Weighted, re-rankable |
| Licence | CC-BY-4.0 — https://creativecommons.org/licenses/by/4.0/ |

## Ranking — default weights

| # | Tool | Score | Coverage | One-liner |
| --- | --- | --- | --- | --- |
| 1 | [Postmark](https://toolweight.dev/tools/postmark) | 75.5 | 90% | Transactional-only sender with the best-policed shared IP pool in the category. |
| 2 | [Resend](https://toolweight.dev/tools/resend) | 73.8 | 100% | Developer-first email API built around React Email components. |
| 3 | [MailerSend](https://toolweight.dev/tools/mailersend) | 66.8 | 90% | Transactional sibling of MailerLite, bootstrapped and cheap at mid volume. |
| 4 | [SendGrid](https://toolweight.dev/tools/sendgrid) | 64.0 | 95% | The incumbent: enormous scale, enormous shared pool, everything bolted on. |
| 5 | [AhaSend](https://toolweight.dev/tools/ahasend) | 61.6 | 52% | Small indie transactional API competing on price and instant signup. |
| 6 | [Brevo](https://toolweight.dev/tools/brevo) | 60.8 | 90% | EU-hosted marketing platform with a competent transactional API attached. |
| 7 | [Mailgun](https://toolweight.dev/tools/mailgun) | 59.7 | 90% | Long-running transactional API with strong routing and inbound handling. |
| 8 | [Mailtrap](https://toolweight.dev/tools/mailtrap) | 58.0 | 76% | Email testing sandbox that grew a production sending product. |
| 9 | [Amazon SES](https://toolweight.dev/tools/amazon-ses) | 56.2 | 100% | The cheapest way to send email at scale, and the least finished product. |
| 10 | [Loops](https://toolweight.dev/tools/loops) | 54.0 | 67% | Lifecycle and marketing email for SaaS, priced on contacts rather than sends. |
| 11 | [SparkPost](https://toolweight.dev/tools/sparkpost) | 53.8 | 86% | High-volume sender with deep analytics, now folded into Bird's platform. |
| 12 | [Plunk](https://toolweight.dev/tools/plunk) | 45.8 | 86% | Open-source email console you self-host on top of your own AWS SES account. |
| 13 | [Scaleway TEM](https://toolweight.dev/tools/scaleway-tem) | 39.2 | 86% | EU-sovereign transactional email from Scaleway, deliberately minimal. |

Re-rank against your own priorities by appending `?w=field_id:weight,…` to the canonical URL, or call `score_tools` on the MCP server at `https://toolweight.dev/mcp`.

## Comparison

### Features

| Tool | Time to first send | Product scope | Inbound parsing | Event webhooks | Hosted templates | React Email / MJML | Log retention | Throughput ceiling (emails/hr) | Multi-domain sending | Data residency |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Postmark | 240 min | transactional-first | ● | delivered, opened, clicked, bounced, complained, unsubscribed, inbound | visual-editor | mjml, handlebars | 64800 min | — | ● | us |
| Resend | 10 min | both | ◐ | delivered, opened, clicked, bounced, complained, deferred | code-editor | react-email, mjml | 4320 min | 7,200 emails/hr | ● | us, eu, apac, sa |
| MailerSend | 1440 min | both | ● | delivered, opened, clicked, bounced, complained, unsubscribed, inbound | visual-editor | handlebars, mjml | 43200 min | — | ◐ | us, eu |
| SendGrid | 60 min | both | ● | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | visual-editor | handlebars | 4320 min | — | ◐ | us, eu |
| AhaSend | 15 min | transactional-only | — | delivered, opened, clicked, bounced, complained | none | — | — | — | ● | — |
| Brevo | 240 min | marketing-first | ● | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | visual-editor | liquid | 43200 min | — | ● | eu |
| Mailgun | 30 min | transactional-first | ● | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | visual-editor | handlebars | 1440 min | — | ◐ | us, eu |
| Mailtrap | 120 min | transactional-first | ○ | delivered, opened, clicked, bounced, complained, unsubscribed | visual-editor | handlebars | 43200 min | — | — | us, eu |
| Amazon SES | 2880 min | transactional-only | ● | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | api-only | handlebars | 0 ms | 50,400 emails/hr | ● | us, eu, au, apac, sa, ca |
| Loops | 15 min | marketing-first | ○ | delivered, opened, clicked, bounced, complained, unsubscribed | visual-editor | — | — | — | ○ | us |
| SparkPost | 2880 min | transactional-first | ● | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | code-editor | handlebars | 14400 min | — | ● | us, eu |
| Plunk | 30 min | both | ○ | delivered, opened, clicked, bounced, unsubscribed | code-editor | — | — | 50,400 emails/hr | ● | us, eu, au |
| Scaleway TEM | 1440 min | transactional-only | ○ | delivered, bounced, complained | none | — | — | — | ● | eu |

### Deliverability

| Tool | Shared pool quality | IP warmup | DKIM/DMARC friction | BIMI | Suppression list | Bounce handling |
| --- | --- | --- | --- | --- | --- | --- |
| Postmark | 5 | ● | 2 | ● | ● | ● |
| Resend | 4 | ◐ | 1 | ◐ | ● | ● |
| MailerSend | 3 | ● | 2 | ● | ● | ● |
| SendGrid | 2 | ● | 3 | ● | ● | ● |
| AhaSend | 3 | — | 2 | — | ● | ● |
| Brevo | 2 | ◐ | 3 | ◐ | ● | ● |
| Mailgun | 3 | ● | 3 | ◐ | ● | ● |
| Mailtrap | 3 | — | 2 | ◐ | ● | ● |
| Amazon SES | 3 | ● | 4 | ◐ | ● | ◐ |
| Loops | 4 | ○ | 2 | — | ● | ● |
| SparkPost | 3 | ● | 3 | ◐ | ● | ● |
| Plunk | 3 | ○ | 3 | ○ | ◐ | ◐ |
| Scaleway TEM | 3 | ○ | 3 | ○ | ◐ | ◐ |

### Pricing

| Tool | Price / 1k emails (/1k) | Free tier (emails/mo) | Dedicated IP (/mo) | Pricing model |
| --- | --- | --- | --- | --- |
| Postmark | $1.5 /1k | 100 emails/mo | $50 /mo | volume-tiers |
| Resend | $0.4 /1k | 3,000 emails/mo | $30 /mo | volume-tiers |
| MailerSend | $0.56 /1k | 3,000 emails/mo | $50 /mo | volume-tiers |
| SendGrid | $0.4 /1k | 3,000 emails/mo | $30 /mo | volume-tiers |
| AhaSend | — | 1,000 emails/mo | — | pay-as-you-go |
| Brevo | $1.8 /1k | 9,000 emails/mo | $40 /mo | volume-tiers |
| Mailgun | $1.5 /1k | 3,000 emails/mo | $59 /mo | volume-tiers |
| Mailtrap | $1.5 /1k | 1,000 emails/mo | — | volume-tiers |
| Amazon SES | $0.1 /1k | 3,000 emails/mo | $24.95 /mo | pay-as-you-go |
| Loops | — | — | — | contact-based |
| SparkPost | $0.4 /1k | — | — | volume-tiers |
| Plunk | $1 /1k | — | — | pay-as-you-go |
| Scaleway TEM | $0.3 /1k | 300 emails/mo | — | pay-as-you-go |

### Agentic

| Tool | MCP server | llms.txt docs |
| --- | --- | --- |
| Postmark | ◐ | — |
| Resend | ● | ● |
| MailerSend | — | ○ |
| SendGrid | ◐ | ○ |
| AhaSend | — | ● |
| Brevo | — | ○ |
| Mailgun | — | ○ |
| Mailtrap | — | ○ |
| Amazon SES | ◐ | ○ |
| Loops | — | ● |
| SparkPost | ○ | ○ |
| Plunk | ○ | ○ |
| Scaleway TEM | ◐ | ◐ |

### Traction

| Tool | Funding |
| --- | --- |
| Postmark | acquired |
| Resend | series-a |
| MailerSend | bootstrapped |
| SendGrid | subsidiary |
| AhaSend | bootstrapped |
| Brevo | series-b+ |
| Mailgun | subsidiary |
| Mailtrap | bootstrapped |
| Amazon SES | subsidiary |
| Loops | seed |
| SparkPost | acquired |
| Plunk | bootstrapped |
| Scaleway TEM | subsidiary |

### Positioning

| Tool | Positioning |
| --- | --- |
| Postmark | "Your emails, delivered." Sells discipline rather than features — and unusually, the claim matches the product. |
| Resend | "Email for developers." React Email is the hook; the API is deliberately small and the docs carry most of the product. |
| MailerSend | "Transactional email for developers and marketers." Positions on the template builder, which is genuinely its strongest feature. |
| SendGrid | "Trusted for more than a decade." Sells scale and incumbency; the surface is wide, and the free-tier pool is the hidden cost. |
| AhaSend | "Transactional email without the bloat." Competes on price and on not having a marketing product. |
| Brevo | "All your marketing in one place." A CRM suite that also sends transactional mail; the API is real but it is not the product. |
| Mailgun | "Email API for developers." Was the developer-first option a decade before that was a category; the deliverability add-ons are where the real pricing lives. |
| Mailtrap | "Email delivery platform" — but the reason people arrive is still the staging sandbox, which remains the best in the category. |
| Amazon SES | Barely marketed at all — SES is sold as an AWS primitive and the pricing page does the work. |
| Loops | "Email for modern SaaS." Sells taste and speed of setup rather than deliverability engineering. |
| SparkPost | "Predictable email delivery at scale." The engineering is real; the product is increasingly a feature of Bird rather than a thing you buy. |
| Plunk | "The open-source email platform." Sells ownership: your data, your infrastructure, SES's price. |
| Scaleway TEM | "Sovereign European cloud." The pitch is jurisdiction, not features — and the feature set reflects that honestly. |

### Timeline

| Tool | GA year |
| --- | --- |
| Postmark | 2010 |
| Resend | 2023 |
| MailerSend | 2020 |
| SendGrid | 2009 |
| AhaSend | 2023 |
| Brevo | 2012 |
| Mailgun | 2010 |
| Mailtrap | 2013 |
| Amazon SES | 2011 |
| Loops | 2023 |
| SparkPost | 2014 |
| Plunk | 2023 |
| Scaleway TEM | 2023 |

## Field registry

| Field | id | Group | Type | Unit | Better | Default weight | Definition |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Time to first send | `time_to_first_send` | features | duration | — | lower | 10 | Wall-clock from starting signup on a clean account to a message delivered to a Gmail inbox that is NOT a verified address on the account. Includes manual review, compliance holds and sandbox-exit tickets; excludes DNS propagation beyond 10 minutes. |
| Product scope | `product_scope` | features | enum | — | n/a | 0 | What the product is actually built for. transactional-only = no campaign tooling at all; both = first-class transactional and broadcast products; marketing-first = campaign tooling with a transactional API bolted on. |
| Inbound parsing | `inbound_parsing` | features | tristate | — | higher | 4 | Can you receive mail at a domain and have it POSTed to your app as parsed JSON? partial = available but region-limited, in beta, or without routing rules. |
| Event webhooks | `event_webhooks` | features | multi-enum | — | higher | 6 | Which message events the provider will POST to your endpoint. Events reachable only by wiring up a separate queue product still count, but are noted. |
| Hosted templates | `hosted_templates` | features | enum | — | higher | 3 | Server-side templates stored at the provider. api-only = create and render via API with no UI; code-editor = HTML editing in the dashboard; visual-editor = drag-and-drop builder a non-engineer can use. |
| React Email / MJML | `react_email_mjml` | features | multi-enum | — | higher | 5 | Markup and templating systems with first-party support — a documented integration or native handling in the SDK. React Email renders to plain HTML and technically works everywhere, so this measures integration, not possibility. |
| Log retention | `log_retention` | features | duration | — | higher | 5 | How long per-message events and content stay searchable in the dashboard on the cheapest paid plan. 0 means the provider stores nothing and you must build it yourself. |
| Throughput ceiling | `throughput_ceiling` | features | number | emails/hr | higher | 3 | Documented default sending rate for a new account, expressed as emails per hour, before requesting a limit increase. Blank where the provider publishes no figure. |
| Multi-domain sending | `multi_domain` | features | tristate | — | higher | 3 | Can the cheapest paid plan verify and send from more than one sending domain? partial = capped at a low number or charged per extra domain. |
| Data residency | `data_residency` | features | region-list | — | n/a | 4 | Regions where message content and event data can be stored and processed, chosen at account or project level. Sending IPs may sit elsewhere; this is about where the data rests. |
| Shared pool quality | `shared_pool_quality` | deliverability | score | — | higher | 8 | Judgement, 1–5, of the reputation you inherit on shared IPs. 5 = tightly vetted, transactional-only, customers ejected for bad practice. 3 = mixed pool, fine for engaged lists. 1 = large open pool with visible spam. Inferred, not measured. |
| IP warmup | `ip_warmup` | deliverability | tristate | — | higher | 5 | Does the provider automatically ramp a new dedicated IP — throttling volume and blending with the shared pool — without you writing a schedule? partial = documented guidance or support-assisted only. no = no dedicated IPs offered. |
| DKIM/DMARC friction | `dkim_dmarc_friction` | deliverability | score | — | lower | 6 | Judgement, 1–5, of authentication setup effort. 1 = pre-generated records plus registrar auto-config and live verification. 3 = manual records including a custom return-path, then a wait. 5 = multiple consoles, manual key handling, or repeat setup per region. |
| BIMI | `bimi_support` | deliverability | tristate | — | higher | 2 | BIMI is DNS plus a VMC, so nothing truly blocks it. yes = the provider documents it and guarantees the DMARC alignment it requires; partial = works but undocumented; no = shared-pool alignment makes it impractical. |
| Suppression list | `suppression_management` | deliverability | tristate | — | higher | 4 | An automatic account-level suppression list, readable and editable over the API, that blocks sends to previously bounced or complaining addresses. partial = a list exists but is dashboard-only or per-stream. |
| Bounce handling | `bounce_complaint_handling` | deliverability | tristate | — | higher | 4 | Does the provider classify bounces, process feedback loops and act on them for you? partial = you receive the notifications but remain responsible for reacting to them. |
| Price / 1k emails | `price_per_1k` | pricing | currency | /1k | lower | 7 | Cheapest paid self-serve tier, divided out to USD per 1,000 emails, monthly billing, no annual discount. Providers that bill on contacts rather than volume are left blank. |
| Free tier | `free_tier` | pricing | number | emails/mo | higher | 4 | Emails per month on a permanently free plan. Time-limited trials and first-12-months allowances are noted rather than counted as permanent. |
| Dedicated IP | `dedicated_ip_cost` | pricing | currency | /mo | lower | 3 | List price per month for one dedicated sending IP on the cheapest plan that offers one. Blank means either no dedicated IP product or no public price. |
| Pricing model | `pricing_model` | pricing | enum | — | higher | 2 | How the bill is computed. pay-as-you-go = metered per message with no plan; volume-tiers = monthly plan with an included allowance; contact-based = priced on stored contacts rather than sends. |
| MCP server | `mcp_server` | agentic | tristate | — | higher | 3 | A first-party MCP server exposing the sending API to agents. partial = covered by the parent company's general-purpose MCP server, or only community packages exist. |
| llms.txt docs | `llms_txt_docs` | agentic | tristate | — | higher | 2 | Are the docs published in a form an agent can consume directly — an llms.txt index or markdown twins of every page? partial = raw markdown exists publicly but there is no index. |
| Funding | `funding_stage` | traction | enum | — | n/a | 0 | Ownership and last known funding stage. acquired = bought by another company but still run as a distinct product; subsidiary = absorbed into a parent's platform. |
| Positioning | `positioning` | marketing | text | — | n/a | 0 | How the vendor sells itself, in its own framing, with the gap between the claim and the product noted where there is one. |
| GA year | `ga_year` | timeline | number | — | n/a | 0 | Year the sending product became generally available under its current name. Rebrands keep the original product's year. |

## Presets

| Preset | id | What it optimises for | Weights | Ranked URL |
| --- | --- | --- | --- | --- |
| Fastest to first send | `fastest-first-send` | Signup to a delivered email today, not next week. | time_to_first_send:10, dkim_dmarc_friction:7, free_tier:5, react_email_mjml:4, multi_domain:2, price_per_1k:2, shared_pool_quality:3, llms_txt_docs:2 | https://toolweight.dev/compare/email-sending-apis?w=time_to_first_send:10,dkim_dmarc_friction:7,free_tier:5,react_email_mjml:4,multi_domain:2,price_per_1k:2,shared_pool_quality:3,llms_txt_docs:2 |
| Best deliverability | `best-deliverability` | Transactional mail that reaches the inbox on a cold domain. | shared_pool_quality:10, ip_warmup:7, dedicated_ip_cost:5, bounce_complaint_handling:6, suppression_management:6, bimi_support:4, dkim_dmarc_friction:5, log_retention:5, time_to_first_send:2 | https://toolweight.dev/compare/email-sending-apis?w=shared_pool_quality:10,ip_warmup:7,dedicated_ip_cost:5,bounce_complaint_handling:6,suppression_management:6,bimi_support:4,dkim_dmarc_friction:5,log_retention:5,time_to_first_send:2 |
| Cheapest at volume | `cheapest-at-volume` | Millions of messages a month, where price dominates everything else. | price_per_1k:10, dedicated_ip_cost:6, throughput_ceiling:6, pricing_model:4, free_tier:1, shared_pool_quality:3, time_to_first_send:1 | https://toolweight.dev/compare/email-sending-apis?w=price_per_1k:10,dedicated_ip_cost:6,throughput_ceiling:6,pricing_model:4,free_tier:1,shared_pool_quality:3,time_to_first_send:1 |
| Best DX | `best-dx` | Typed SDKs, components as templates, events you can subscribe to. | react_email_mjml:9, event_webhooks:8, time_to_first_send:7, log_retention:6, hosted_templates:4, inbound_parsing:4, mcp_server:4, llms_txt_docs:4, dkim_dmarc_friction:5 | https://toolweight.dev/compare/email-sending-apis?w=react_email_mjml:9,event_webhooks:8,time_to_first_send:7,log_retention:6,hosted_templates:4,inbound_parsing:4,mcp_server:4,llms_txt_docs:4,dkim_dmarc_friction:5 |

## Verdict

Every vendor on this page can put an SMTP envelope on the wire. The differences that matter are how long it takes to be allowed to, whose reputation you inherit while you do it, and what you pay once volume stops being a rounding error. Those three questions map almost perfectly onto three different products. If you are shipping this week, Resend is the default and it is not close. The API is small, the Node SDK takes a React element directly, the DNS records are pre-generated with live verification, and there is no human in the approval loop. AhaSend and Plunk are cheaper per message and Loops is nicer for lifecycle email, but Resend has the deepest documentation and the largest body of people who have already hit your problem. The cost of that convenience is $0.40 per thousand — four times Amazon SES.

If deliverability is the product, Postmark. It is the only provider here that has been consistently willing to lose customers to protect its shared pool, and the difference shows up in inbox placement on cold domains. You pay $1.50 per thousand for that discipline, roughly fifteen times SES, and you accept an approval step measured in hours rather than minutes. That trade is correct for password resets and receipts, and wrong for a newsletter.

If you are sending at real volume, SES wins on price by an order of magnitude and will keep winning. The catch is that SES is not a product, it is a primitive: no message log, no template editor worth the name, event delivery via SNS or EventBridge that you wire yourself, and a sandbox exit that goes through AWS Support and is routinely rejected on the first attempt. Budget days, not minutes, and budget an engineer to build the observability layer the other twelve give you free. Plunk is the interesting middle — an open-source console over your own SES account, which is the cheapest honest way to get a UI on top of the cheapest sender.

The rest sort themselves out. SendGrid and Mailgun are the incumbents; both are competent, both belong to larger messaging companies (Twilio, Sinch), and both carry shared pools large enough that your reputation is partly other people's problem. SparkPost has effectively been absorbed into Bird and self-serve access has been quietly shrinking. Brevo and MailerSend are priced for marketing volume rather than developer ergonomics. Mailtrap is a testing tool that grew a sending product, and it is still the best of the group at the testing half. Scaleway TEM is the only European-owned option here with a genuinely simple API, and it deliberately does not track opens — which is either the feature or the dealbreaker, depending on your legal team.

One thing no vendor page will tell you: for Australian teams there is no email API with local data residency except Amazon SES in ap-southeast-2 and whatever you self-host. Everyone else processes and stores your message content in the US or the EU. If that matters, the shortlist is two items long.

## Where the pricing pages hide the money

List price per thousand is the least useful number on a pricing page. Three things move the real bill.

Contact-based billing. Loops and Brevo price partly or wholly on how many contacts you store, not how many messages you send. That is cheap for a weekly newsletter to a stable list and expensive for a product that stores every signup forever. If your contact count grows faster than your send volume, per-message providers win even at a higher headline rate.

Retention as an upsell. SendGrid's activity feed keeps three days unless you buy Email Activity History; Mailgun's cheapest tier keeps one. When a customer says "I never got the receipt" about something eleven days ago, retention is the entire product. Postmark's forty-five days is the outlier here and it is worth real money.

The dedicated IP trap. A dedicated IP is $25 to $60 a month, which looks trivial, and it is the most common way to make deliverability worse. Below roughly 100,000 messages a month a fresh IP never accumulates enough reputation signal, and you have voluntarily left a pool someone else was policing for you. Buy one when a mailbox provider tells you to, not when the pricing page suggests it.

And the free tiers keep shrinking. Amazon's always-free 62,000 messages a month from EC2 is gone, replaced by a twelve-month allowance. MailerSend's free plan came down to 3,000. Do not architect around a free tier.

## Migrating between providers without torching your reputation

The API surface is the easy part. Every provider here takes a JSON body with from, to, subject and html, so the send call is an afternoon behind a thin interface — and writing that interface on day one is the highest-return decision in this category.

Three things do not migrate. Your suppression list is the first: it lives in the old provider and it is the only record of who has already bounced or complained. Export it before you cancel and import it on the other side before your first send, or you will re-mail known bad addresses and start your new reputation at the bottom.

The second is IP and domain reputation. Reputation attaches to the sending IP and the sending domain together. Moving providers means new IPs, so ramp: a few percent of volume for the first few days, biased towards your most engaged recipients, watching complaint rates rather than delivery rates. A hard cutover on a large list is how a good domain gets filtered.

The third is your DNS. DKIM keys are provider-specific and the custom return-path record points at the provider's infrastructure. You can run both providers in parallel — multiple DKIM selectors coexist happily — which is the correct way to do this. Keep the old provider live and paid for a fortnight after the switch. It costs one month's fee and it is the only rollback you have.

## How to actually decide

Answer four questions in order and the shortlist collapses.

What are you sending? Password resets and receipts are a deliverability problem, so weight shared pool quality and retention: Postmark, then Resend. Newsletters and lifecycle mail are a tooling problem, so weight templates and audience management: Loops, Brevo, or Resend Broadcasts. If it is both, buy two products and keep the streams on separate subdomains — mixing marketing and transactional mail on one sending domain is the most common self-inflicted deliverability wound in this category.

How much? Under 50,000 a month, price is noise; optimise for the hours you save. Over about two million, SES's order-of-magnitude advantage is real enough to justify building the missing observability, and Plunk or a self-built console is a reasonable way to get it back.

Where does the data have to live? This eliminates faster than anything else. EU-only means Scaleway TEM or Brevo. Australian residency means SES in Sydney or self-hosting. Everything else is a US company with an EU region.

When do you need to be live? If the answer is today, that alone rules out SES, and it is the reason so many teams that should be on SES are not. The right pattern is often to ship on Resend, put the send call behind your own interface, and re-evaluate at the volume where the price gap stops being theoretical.

## Provenance — every cell, every source

### Postmark {#postmark}

Transactional-only sender with the best-policed shared IP pool in the category.

|  |  |
| --- | --- |
| Site | https://postmarkapp.com |
| Docs | https://postmarkapp.com/developer |
| Company | ActiveCampaign |
| Founded | 2010 |
| Funding | Acquired (ActiveCampaign, 2022) |
| Profile | https://toolweight.dev/tools/postmark |
| Score (default weights) | 75.5 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 240 min | Community-reported | — | — | Postmark reviews the use case before enabling sending to unverified recipients; usually hours, occasionally next business day. | #postmark-time_to_first_send |
| Product scope | transactional-first | Inferred | — | — | Broadcast streams exist but are deliberately kept separate from transactional. | #postmark-product_scope |
| Inbound parsing | ● | Vendor-claimed | 2026-05-20 | https://postmarkapp.com/developer/user-guide/inbound | — | #postmark-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, unsubscribed, inbound | Vendor-claimed | 2026-05-20 | https://postmarkapp.com/developer/webhooks/webhooks-overview | — | #postmark-event_webhooks |
| Hosted templates | visual-editor | Inferred | — | — | Drag-and-drop builder plus a well-regarded set of open-source starter templates. | #postmark-hosted_templates |
| React Email / MJML | mjml, handlebars | Inferred | — | — | Templates use a Mustache-style syntax; MJML is documented as an authoring path. | #postmark-react_email_mjml |
| Log retention | 64800 min | Community-reported | — | — | 45-day activity retention is Postmark's long-standing default and the best here. | #postmark-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #postmark-throughput_ceiling |
| Multi-domain sending | ● | Inferred | — | — | — | #postmark-multi_domain |
| Data residency | us | Inferred | — | — | US-hosted; no EU data region as of this pass. | #postmark-data_residency |
| Shared pool quality | 5 | Inferred | — | — | The most aggressively policed pool in the category — transactional-only, with customers removed for bad practice. | #postmark-shared_pool_quality |
| IP warmup | ● | Inferred | — | — | Managed by Postmark, but they require sustained volume before selling you an IP. | #postmark-ip_warmup |
| DKIM/DMARC friction | 2 | Inferred | — | — | Clear records and verification, plus a separate custom return-path CNAME. | #postmark-dkim_dmarc_friction |
| BIMI | ● | Inferred | — | — | — | #postmark-bimi_support |
| Suppression list | ● | Inferred | — | — | Per-message-stream suppressions, readable over the API. | #postmark-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #postmark-bounce_complaint_handling |
| Price / 1k emails | $1.5 /1k | Vendor-claimed | 2026-05-20 | https://postmarkapp.com/pricing | $15/mo for 10,000 emails; the rate falls at higher tiers. | #postmark-price_per_1k |
| Free tier | 100 emails/mo | Inferred | — | — | Developer allowance for testing, not a production plan. | #postmark-free_tier |
| Dedicated IP | $50 /mo | Inferred | — | — | Approximate, and gated behind roughly 300,000 messages/month of sustained volume. | #postmark-dedicated_ip_cost |
| Pricing model | volume-tiers | Inferred | — | — | — | #postmark-pricing_model |
| MCP server | ◐ | Community-reported | — | — | No first-party server. A malicious third-party postmark-mcp npm package impersonated one in 2025 — check the publisher. | #postmark-mcp_server |
| llms.txt docs | — | Unknown | — | — | — | #postmark-llms_txt_docs |
| Funding | acquired | Community-reported | — | — | Wildbit, Postmark's parent, was acquired by ActiveCampaign in 2022. | #postmark-funding_stage |
| Positioning | "Your emails, delivered." Sells discipline rather than features — and unusually, the claim matches the product. | Inferred | — | — | — | #postmark-positioning |
| GA year | 2010 | Inferred | — | — | — | #postmark-ga_year |

**Verdict.** Still the deliverability benchmark, and the only vendor here whose pool quality is a deliberate business decision rather than a side effect. Expensive, opinionated, and worth it for mail that must arrive.

**Pick it when**

- Password resets, receipts and anything a support ticket follows
- Cold sending domains with no reputation to lean on
- Teams who need 45 days of searchable history

### Resend {#resend}

Developer-first email API built around React Email components.

|  |  |
| --- | --- |
| Site | https://resend.com |
| Docs | https://resend.com/docs |
| Company | Resend, Inc. |
| Founded | 2023 |
| Funding | Series A |
| Profile | https://toolweight.dev/tools/resend |
| Score (default weights) | 73.8 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 10 min | Community-reported | — | — | No approval queue: create an account, paste three DNS records, send. The only variable is your registrar. | #resend-time_to_first_send |
| Product scope | both | Inferred | — | — | Broadcasts added a campaign product on top of the transactional API. | #resend-product_scope |
| Inbound parsing | ◐ | Community-reported | — | — | Inbound is newer here and thinner on routing rules than Mailgun or Postmark. | #resend-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, deferred | Vendor-claimed | 2026-06-01 | https://resend.com/docs/dashboard/webhooks/introduction | — | #resend-event_webhooks |
| Hosted templates | code-editor | Inferred | — | — | React Email in your own repo is the intended path; Broadcasts has a visual editor. | #resend-hosted_templates |
| React Email / MJML | react-email, mjml | Vendor-claimed | 2026-06-01 | https://resend.com/docs/send-with-nextjs | React Email is a Resend project and the Node SDK takes a React element directly. | #resend-react_email_mjml |
| Log retention | 4320 min | Inferred | — | — | Approximate and plan-dependent; Resend's window is short by category standards. | #resend-log_retention |
| Throughput ceiling | 7,200 emails/hr | Community-reported | — | — | Default API rate limit is 2 requests/second; the batch endpoint lifts effective throughput well past this. | #resend-throughput_ceiling |
| Multi-domain sending | ● | Inferred | — | — | — | #resend-multi_domain |
| Data residency | us, eu, apac, sa | Community-reported | — | — | Sending region is chosen per domain. No Australian region. | #resend-data_residency |
| Shared pool quality | 4 | Inferred | — | — | Well managed and improving, but younger and larger than Postmark's. | #resend-shared_pool_quality |
| IP warmup | ◐ | Inferred | — | — | New dedicated IPs are ramped, but the schedule is not documented. | #resend-ip_warmup |
| DKIM/DMARC friction | 1 | Inferred | — | — | Registrar auto-configuration for Vercel and Cloudflare domains; otherwise three pre-generated records with live verification. | #resend-dkim_dmarc_friction |
| BIMI | ◐ | Inferred | — | — | — | #resend-bimi_support |
| Suppression list | ● | Inferred | — | — | — | #resend-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #resend-bounce_complaint_handling |
| Price / 1k emails | $0.4 /1k | Vendor-claimed | 2026-06-01 | https://resend.com/pricing | Pro is $20/mo for 50,000 emails. | #resend-price_per_1k |
| Free tier | 3,000 emails/mo | Vendor-claimed | 2026-06-01 | https://resend.com/pricing | Capped at 100/day. | #resend-free_tier |
| Dedicated IP | $30 /mo | Inferred | — | — | Approximate; sold as a monthly add-on. | #resend-dedicated_ip_cost |
| Pricing model | volume-tiers | Inferred | — | — | — | #resend-pricing_model |
| MCP server | ● | Community-reported | — | — | Resend publishes an MCP server for sending mail from agents. | #resend-mcp_server |
| llms.txt docs | ● | Inferred | — | — | Mintlify-hosted docs, which publish an llms.txt index automatically. | #resend-llms_txt_docs |
| Funding | series-a | Community-reported | — | — | — | #resend-funding_stage |
| Positioning | "Email for developers." React Email is the hook; the API is deliberately small and the docs carry most of the product. | Inferred | — | — | — | #resend-positioning |
| GA year | 2023 | Inferred | — | — | — | #resend-ga_year |

**Verdict.** The fastest path from nothing to a delivered email, and the only provider where the template layer lives in your codebase rather than a dashboard. You pay four times SES for that, and log retention is stingy.

**Pick it when**

- Shipping transactional email this afternoon
- React and Next.js codebases that want templates in the repo
- Teams who would rather pay than run an approval gauntlet

### MailerSend {#mailersend}

Transactional sibling of MailerLite, bootstrapped and cheap at mid volume.

|  |  |
| --- | --- |
| Site | https://www.mailersend.com |
| Docs | https://developers.mailersend.com |
| Company | MailerLite |
| Founded | 2020 |
| Funding | Bootstrapped |
| Profile | https://toolweight.dev/tools/mailersend |
| Score (default weights) | 66.8 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 1440 min | Community-reported | — | — | Trial accounts must be approved by a human before they can mail unverified recipients; commonly around 24 hours. | #mailersend-time_to_first_send |
| Product scope | both | Inferred | — | — | — | #mailersend-product_scope |
| Inbound parsing | ● | Inferred | — | — | Inbound routing with parsed payloads. | #mailersend-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, unsubscribed, inbound | Inferred | — | — | — | #mailersend-event_webhooks |
| Hosted templates | visual-editor | Inferred | — | — | Inherits MailerLite's drag-and-drop builder, which is the best of the group. | #mailersend-hosted_templates |
| React Email / MJML | handlebars, mjml | Inferred | — | — | — | #mailersend-react_email_mjml |
| Log retention | 43200 min | Inferred | — | — | Approximate and plan-dependent. | #mailersend-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #mailersend-throughput_ceiling |
| Multi-domain sending | ◐ | Inferred | — | — | Domain count is capped on the entry plan. | #mailersend-multi_domain |
| Data residency | us, eu | Inferred | — | — | — | #mailersend-data_residency |
| Shared pool quality | 3 | Inferred | — | — | The manual approval step keeps the pool cleaner than the free-tier-heavy alternatives. | #mailersend-shared_pool_quality |
| IP warmup | ● | Inferred | — | — | — | #mailersend-ip_warmup |
| DKIM/DMARC friction | 2 | Inferred | — | — | — | #mailersend-dkim_dmarc_friction |
| BIMI | ● | Inferred | — | — | One of the few here with explicit BIMI documentation. | #mailersend-bimi_support |
| Suppression list | ● | Inferred | — | — | — | #mailersend-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #mailersend-bounce_complaint_handling |
| Price / 1k emails | $0.56 /1k | Inferred | — | — | Approximate: the entry paid plan is roughly $28/mo for 50,000 emails. | #mailersend-price_per_1k |
| Free tier | 3,000 emails/mo | Inferred | — | — | Cut from 12,000 in earlier years — treat the current allowance as a floor, not a promise. | #mailersend-free_tier |
| Dedicated IP | $50 /mo | Inferred | — | — | Approximate monthly add-on. | #mailersend-dedicated_ip_cost |
| Pricing model | volume-tiers | Inferred | — | — | — | #mailersend-pricing_model |
| MCP server | — | Unknown | — | — | — | #mailersend-mcp_server |
| llms.txt docs | ○ | Inferred | — | — | — | #mailersend-llms_txt_docs |
| Funding | bootstrapped | Inferred | — | — | Same team as MailerLite; no outside funding publicly reported. | #mailersend-funding_stage |
| Positioning | "Transactional email for developers and marketers." Positions on the template builder, which is genuinely its strongest feature. | Inferred | — | — | — | #mailersend-positioning |
| GA year | 2020 | Inferred | — | — | — | #mailersend-ga_year |

**Verdict.** The best price per message once you are past 50,000/month and want a real UI, undercut only by SES and the indies. The manual approval gate is the tax — fine if you are planning a migration, painful if you are shipping tonight.

**Pick it when**

- Mid-volume sending where SES is too raw and Postmark too dear
- Non-engineers who need to edit templates
- Teams already using MailerLite for marketing

### SendGrid {#sendgrid}

The incumbent: enormous scale, enormous shared pool, everything bolted on.

|  |  |
| --- | --- |
| Site | https://sendgrid.com |
| Docs | https://www.twilio.com/docs/sendgrid |
| Company | Twilio |
| Founded | 2009 |
| Funding | Subsidiary (Twilio, acquired 2019) |
| Profile | https://toolweight.dev/tools/sendgrid |
| Score (default weights) | 64.0 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 60 min | Community-reported | — | — | Usually under an hour, but new free accounts are regularly caught by fraud automation, which turns into a support thread lasting days. | #sendgrid-time_to_first_send |
| Product scope | both | Inferred | — | — | — | #sendgrid-product_scope |
| Inbound parsing | ● | Vendor-claimed | 2026-05-15 | https://www.twilio.com/docs/sendgrid/for-developers/parsing-email/setting-up-the-inbound-parse-webhook | — | #sendgrid-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | Vendor-claimed | 2026-05-15 | https://www.twilio.com/docs/sendgrid/for-developers/tracking-events/event | — | #sendgrid-event_webhooks |
| Hosted templates | visual-editor | Inferred | — | — | Design Library plus Handlebars-based dynamic templates. | #sendgrid-hosted_templates |
| React Email / MJML | handlebars | Inferred | — | — | Dynamic templates use Handlebars; anything else you render yourself. | #sendgrid-react_email_mjml |
| Log retention | 4320 min | Community-reported | — | — | The Activity Feed keeps 3 days. Thirty days requires the Email Activity History add-on. | #sendgrid-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #sendgrid-throughput_ceiling |
| Multi-domain sending | ◐ | Inferred | — | — | Domain authentication count is plan-dependent on the cheaper tiers. | #sendgrid-multi_domain |
| Data residency | us, eu | Inferred | — | — | EU data residency is a paid feature on higher plans. | #sendgrid-data_residency |
| Shared pool quality | 2 | Inferred | — | — | The free tier is enormous and open, which is exactly the traffic you do not want sharing your IP range. | #sendgrid-shared_pool_quality |
| IP warmup | ● | Inferred | — | — | Automated IP warmup has been a SendGrid feature for years. | #sendgrid-ip_warmup |
| DKIM/DMARC friction | 3 | Inferred | — | — | The domain authentication wizard is decent; sender identity plus link branding plus DMARC is still several steps. | #sendgrid-dkim_dmarc_friction |
| BIMI | ● | Inferred | — | — | Documented, and practical on a dedicated IP. | #sendgrid-bimi_support |
| Suppression list | ● | Inferred | — | — | Suppression groups are genuinely well designed. | #sendgrid-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #sendgrid-bounce_complaint_handling |
| Price / 1k emails | $0.4 /1k | Vendor-claimed | 2026-05-15 | https://sendgrid.com/en-us/pricing | Essentials at roughly $19.95/mo for 50,000 emails. | #sendgrid-price_per_1k |
| Free tier | 3,000 emails/mo | Inferred | — | — | 100/day on the permanent free plan. | #sendgrid-free_tier |
| Dedicated IP | $30 /mo | Inferred | — | — | Approximate. One IP is bundled into Pro (~$90/mo); extras are charged monthly. | #sendgrid-dedicated_ip_cost |
| Pricing model | volume-tiers | Inferred | — | — | — | #sendgrid-pricing_model |
| MCP server | ◐ | Inferred | — | — | Covered by Twilio's general MCP tooling rather than a SendGrid-specific server. | #sendgrid-mcp_server |
| llms.txt docs | ○ | Inferred | — | — | — | #sendgrid-llms_txt_docs |
| Funding | subsidiary | Vendor-claimed | 2026-05-15 | https://www.twilio.com | — | #sendgrid-funding_stage |
| Positioning | "Trusted for more than a decade." Sells scale and incumbency; the surface is wide, and the free-tier pool is the hidden cost. | Inferred | — | — | — | #sendgrid-positioning |
| GA year | 2009 | Inferred | — | — | — | #sendgrid-ga_year |

**Verdict.** Competent at everything and best at nothing. Choose it for breadth — marketing campaigns, EU residency, dedicated IPs, validation — not for deliverability, and budget for the activity history add-on or you will be debugging blind.

**Pick it when**

- Teams already on Twilio who want one vendor and one invoice
- Marketing plus transactional under a single account
- Enterprises needing SSO, SLAs and procurement paperwork

### AhaSend {#ahasend}

Small indie transactional API competing on price and instant signup.

|  |  |
| --- | --- |
| Site | https://ahasend.com |
| Docs | https://ahasend.com/docs |
| Company | AhaSend |
| Founded | 2023 |
| Funding | Bootstrapped |
| Profile | https://toolweight.dev/tools/ahasend |
| Score (default weights) | 61.6 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 15 min | Inferred | — | — | Instant self-serve signup with no approval queue; DNS verification is the only gate. | #ahasend-time_to_first_send |
| Product scope | transactional-only | Inferred | — | — | — | #ahasend-product_scope |
| Inbound parsing | — | Unknown | — | — | — | #ahasend-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained | Inferred | — | — | — | #ahasend-event_webhooks |
| Hosted templates | none | Inferred | — | — | You post rendered HTML; there is no template store. | #ahasend-hosted_templates |
| React Email / MJML | — | Unknown | — | — | — | #ahasend-react_email_mjml |
| Log retention | — | Unknown | — | — | Retention window not verified for this pass. | #ahasend-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #ahasend-throughput_ceiling |
| Multi-domain sending | ● | Inferred | — | — | — | #ahasend-multi_domain |
| Data residency | — | Unknown | — | — | — | #ahasend-data_residency |
| Shared pool quality | 3 | Inferred | — | — | Small operator, so the pool is small and unproven in both directions — less spam, but less evidence. | #ahasend-shared_pool_quality |
| IP warmup | — | Unknown | — | — | — | #ahasend-ip_warmup |
| DKIM/DMARC friction | 2 | Inferred | — | — | — | #ahasend-dkim_dmarc_friction |
| BIMI | — | Unknown | — | — | — | #ahasend-bimi_support |
| Suppression list | ● | Inferred | — | — | — | #ahasend-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #ahasend-bounce_complaint_handling |
| Price / 1k emails | — | Unknown | — | — | AhaSend's published rate was not verified for this pass; it sits materially below Resend's. | #ahasend-price_per_1k |
| Free tier | 1,000 emails/mo | Inferred | — | — | Approximate. | #ahasend-free_tier |
| Dedicated IP | — | Unknown | — | — | — | #ahasend-dedicated_ip_cost |
| Pricing model | pay-as-you-go | Inferred | — | — | — | #ahasend-pricing_model |
| MCP server | — | Unknown | — | — | — | #ahasend-mcp_server |
| llms.txt docs | ● | Inferred | — | — | Modern docs stack that publishes an llms.txt index. | #ahasend-llms_txt_docs |
| Funding | bootstrapped | Inferred | — | — | — | #ahasend-funding_stage |
| Positioning | "Transactional email without the bloat." Competes on price and on not having a marketing product. | Inferred | — | — | — | #ahasend-positioning |
| GA year | 2023 | Inferred | — | — | — | #ahasend-ga_year |

**Verdict.** Cheap, fast to start, and small enough that you are trusting one team's operational discipline with your sending reputation. Reasonable for internal tooling and side projects; think harder before it carries your password resets.

**Pick it when**

- Side projects and internal tools where price dominates
- Straight transactional sending with no template layer needed
- Anyone who wants an API key in under fifteen minutes

### Brevo {#brevo}

EU-hosted marketing platform with a competent transactional API attached.

|  |  |
| --- | --- |
| Site | https://www.brevo.com |
| Docs | https://developers.brevo.com |
| Company | Brevo (ex-Sendinblue) |
| Founded | 2012 |
| Funding | Series B+ |
| Profile | https://toolweight.dev/tools/brevo |
| Score (default weights) | 60.8 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 240 min | Community-reported | — | — | New accounts routinely go through manual validation before sending is enabled; expect to answer questions about your list. | #brevo-time_to_first_send |
| Product scope | marketing-first | Inferred | — | — | — | #brevo-product_scope |
| Inbound parsing | ● | Inferred | — | — | An inbound parsing API exists but is secondary to the marketing product. | #brevo-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | Inferred | — | — | — | #brevo-event_webhooks |
| Hosted templates | visual-editor | Inferred | — | — | — | #brevo-hosted_templates |
| React Email / MJML | liquid | Inferred | — | — | Brevo's own templating language, closer to Django or Liquid than Handlebars. | #brevo-react_email_mjml |
| Log retention | 43200 min | Inferred | — | — | Approximate and plan-dependent. | #brevo-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #brevo-throughput_ceiling |
| Multi-domain sending | ● | Inferred | — | — | — | #brevo-multi_domain |
| Data residency | eu | Inferred | — | — | French company, EU-hosted throughout — one of the shortest answers to a GDPR question here. | #brevo-data_residency |
| Shared pool quality | 2 | Inferred | — | — | Large marketing-heavy pool with a generous free tier; transactional mail inherits the consequences. | #brevo-shared_pool_quality |
| IP warmup | ◐ | Inferred | — | — | Documented guidance and support-assisted rather than fully automatic. | #brevo-ip_warmup |
| DKIM/DMARC friction | 3 | Inferred | — | — | — | #brevo-dkim_dmarc_friction |
| BIMI | ◐ | Inferred | — | — | — | #brevo-bimi_support |
| Suppression list | ● | Inferred | — | — | — | #brevo-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #brevo-bounce_complaint_handling |
| Price / 1k emails | $1.8 /1k | Inferred | — | — | Approximate: the entry plan is roughly $9/mo for 5,000 emails, falling well under $1/1k by 100,000. | #brevo-price_per_1k |
| Free tier | 9,000 emails/mo | Inferred | — | — | 300 emails/day, permanent — the most generous free plan here. | #brevo-free_tier |
| Dedicated IP | $40 /mo | Inferred | — | — | Approximate; sold as an add-on on higher plans. | #brevo-dedicated_ip_cost |
| Pricing model | volume-tiers | Inferred | — | — | — | #brevo-pricing_model |
| MCP server | — | Unknown | — | — | — | #brevo-mcp_server |
| llms.txt docs | ○ | Inferred | — | — | — | #brevo-llms_txt_docs |
| Funding | series-b+ | Community-reported | — | — | — | #brevo-funding_stage |
| Positioning | "All your marketing in one place." A CRM suite that also sends transactional mail; the API is real but it is not the product. | Inferred | — | — | — | #brevo-positioning |
| GA year | 2012 | Inferred | — | — | — | #brevo-ga_year |

**Verdict.** Buy it for the EU hosting and the marketing suite, not for the transactional API. The free tier is the largest here and the shared pool reflects exactly that. Manual account validation makes it a poor choice if you need to be live today.

**Pick it when**

- EU-only data residency without self-hosting
- One vendor covering CRM, marketing and transactional
- High free-tier volume during prototyping

### Mailgun {#mailgun}

Long-running transactional API with strong routing and inbound handling.

|  |  |
| --- | --- |
| Site | https://www.mailgun.com |
| Docs | https://documentation.mailgun.com |
| Company | Sinch |
| Founded | 2010 |
| Funding | Subsidiary (Sinch, acquired 2021) |
| Profile | https://toolweight.dev/tools/mailgun |
| Score (default weights) | 59.7 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 30 min | Community-reported | — | — | Fast once a payment card is on file. Without one you are restricted to authorised recipients, which does not count as a first send under our definition. | #mailgun-time_to_first_send |
| Product scope | transactional-first | Inferred | — | — | Marketing lives in Mailjet, its Sinch stablemate. | #mailgun-product_scope |
| Inbound parsing | ● | Vendor-claimed | 2026-05-18 | https://documentation.mailgun.com/docs/mailgun/user-manual/receive-forward-store/ | Routes are the strongest inbound implementation in the category. | #mailgun-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | Vendor-claimed | 2026-05-18 | https://documentation.mailgun.com/docs/mailgun/user-manual/events/ | — | #mailgun-event_webhooks |
| Hosted templates | visual-editor | Inferred | — | — | — | #mailgun-hosted_templates |
| React Email / MJML | handlebars | Inferred | — | — | — | #mailgun-react_email_mjml |
| Log retention | 1440 min | Inferred | — | — | Cheapest paid tier only. Retention extends to around 30 days higher up — this is a real upsell lever. | #mailgun-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #mailgun-throughput_ceiling |
| Multi-domain sending | ◐ | Inferred | — | — | Custom domain count is capped on the entry plan. | #mailgun-multi_domain |
| Data residency | us, eu | Vendor-claimed | 2026-05-18 | https://documentation.mailgun.com/docs/mailgun/user-manual/sending-messages/ | — | #mailgun-data_residency |
| Shared pool quality | 3 | Inferred | — | — | Large and mixed, but Sinch polices it more actively than SendGrid does. | #mailgun-shared_pool_quality |
| IP warmup | ● | Inferred | — | — | — | #mailgun-ip_warmup |
| DKIM/DMARC friction | 3 | Inferred | — | — | Four records including a tracking CNAME and a custom return-path subdomain. | #mailgun-dkim_dmarc_friction |
| BIMI | ◐ | Inferred | — | — | — | #mailgun-bimi_support |
| Suppression list | ● | Inferred | — | — | — | #mailgun-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #mailgun-bounce_complaint_handling |
| Price / 1k emails | $1.5 /1k | Inferred | — | — | Approximate: the entry paid plan is around $15/mo for 10,000 emails, and the rate improves sharply with volume. | #mailgun-price_per_1k |
| Free tier | 3,000 emails/mo | Inferred | — | — | Trial-shaped: capped daily and restricted to authorised recipients until a card is added. | #mailgun-free_tier |
| Dedicated IP | $59 /mo | Inferred | — | — | Approximate; sold as a monthly add-on and bundled into higher plans. | #mailgun-dedicated_ip_cost |
| Pricing model | volume-tiers | Inferred | — | — | — | #mailgun-pricing_model |
| MCP server | — | Unknown | — | — | — | #mailgun-mcp_server |
| llms.txt docs | ○ | Inferred | — | — | — | #mailgun-llms_txt_docs |
| Funding | subsidiary | Inferred | — | — | — | #mailgun-funding_stage |
| Positioning | "Email API for developers." Was the developer-first option a decade before that was a category; the deliverability add-ons are where the real pricing lives. | Inferred | — | — | — | #mailgun-positioning |
| GA year | 2010 | Inferred | — | — | — | #mailgun-ga_year |

**Verdict.** Pick it for inbound. Routes and the events API remain best-in-class, and if your product receives mail as well as sending it, Mailgun does that job better than anything except Postmark. One-day log retention on the entry plan is a genuine operational problem.

**Pick it when**

- Products that receive and parse inbound email
- Complex routing, tagging and event-driven pipelines
- Teams already inside the Sinch messaging stack

### Mailtrap {#mailtrap}

Email testing sandbox that grew a production sending product.

|  |  |
| --- | --- |
| Site | https://mailtrap.io |
| Docs | https://help.mailtrap.io |
| Company | Mailtrap |
| Founded | 2013 |
| Funding | Bootstrapped |
| Profile | https://toolweight.dev/tools/mailtrap |
| Score (default weights) | 58.0 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 120 min | Inferred | — | — | The Email Testing sandbox is instant. This measures Email Sending, which needs domain verification and a compliance check. | #mailtrap-time_to_first_send |
| Product scope | transactional-first | Inferred | — | — | Testing sandbox plus a production sending stream; bulk exists but is secondary. | #mailtrap-product_scope |
| Inbound parsing | ○ | Inferred | — | — | The sandbox captures your own outbound mail, which is not the same thing as inbound routing. | #mailtrap-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, unsubscribed | Inferred | — | — | — | #mailtrap-event_webhooks |
| Hosted templates | visual-editor | Inferred | — | — | — | #mailtrap-hosted_templates |
| React Email / MJML | handlebars | Inferred | — | — | — | #mailtrap-react_email_mjml |
| Log retention | 43200 min | Inferred | — | — | Approximate and plan-dependent. | #mailtrap-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #mailtrap-throughput_ceiling |
| Multi-domain sending | — | Unknown | — | — | — | #mailtrap-multi_domain |
| Data residency | us, eu | Inferred | — | — | — | #mailtrap-data_residency |
| Shared pool quality | 3 | Inferred | — | — | Younger sending business than its competitors; the pool is correspondingly less proven. | #mailtrap-shared_pool_quality |
| IP warmup | — | Unknown | — | — | — | #mailtrap-ip_warmup |
| DKIM/DMARC friction | 2 | Inferred | — | — | — | #mailtrap-dkim_dmarc_friction |
| BIMI | ◐ | Inferred | — | — | — | #mailtrap-bimi_support |
| Suppression list | ● | Inferred | — | — | — | #mailtrap-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #mailtrap-bounce_complaint_handling |
| Price / 1k emails | $1.5 /1k | Inferred | — | — | Approximate: the entry sending plan is around $15/mo for 10,000 emails. | #mailtrap-price_per_1k |
| Free tier | 1,000 emails/mo | Inferred | — | — | Separate from the free testing sandbox, which is metered in captured messages. | #mailtrap-free_tier |
| Dedicated IP | — | Unknown | — | — | — | #mailtrap-dedicated_ip_cost |
| Pricing model | volume-tiers | Inferred | — | — | — | #mailtrap-pricing_model |
| MCP server | — | Unknown | — | — | — | #mailtrap-mcp_server |
| llms.txt docs | ○ | Inferred | — | — | — | #mailtrap-llms_txt_docs |
| Funding | bootstrapped | Inferred | — | — | — | #mailtrap-funding_stage |
| Positioning | "Email delivery platform" — but the reason people arrive is still the staging sandbox, which remains the best in the category. | Inferred | — | — | — | #mailtrap-positioning |
| GA year | 2013 | Inferred | — | — | Testing launched 2013; the production sending product is far newer. | #mailtrap-ga_year |

**Verdict.** Worth having for the testing sandbox regardless of who sends your production mail — it is the cleanest way to inspect rendered email in staging. The sending product is fine, not distinctive, and younger than the pool-quality question deserves.

**Pick it when**

- Catching and inspecting outbound mail in staging
- Teams who want testing and sending under one account
- Checking spam scores and HTML compatibility before a launch

### Amazon SES {#amazon-ses}

The cheapest way to send email at scale, and the least finished product.

|  |  |
| --- | --- |
| Site | https://aws.amazon.com/ses/ |
| Docs | https://docs.aws.amazon.com/ses/ |
| Company | Amazon Web Services |
| Founded | 2011 |
| Funding | Subsidiary (Amazon) |
| Profile | https://toolweight.dev/tools/amazon-ses |
| Score (default weights) | 56.2 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 2880 min | Community-reported | — | — | AWS targets 24h on sandbox-exit requests, but first attempts are frequently rejected for a vague use-case description, pushing real elapsed time to 2–5 days. | #amazon-ses-time_to_first_send |
| Product scope | transactional-only | Inferred | — | — | — | #amazon-ses-product_scope |
| Inbound parsing | ● | Vendor-claimed | 2026-05-10 | https://docs.aws.amazon.com/ses/latest/dg/receiving-email.html | Receipt rules to S3, Lambda or SNS — but only in a subset of regions. | #amazon-ses-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | Vendor-claimed | 2026-05-10 | https://docs.aws.amazon.com/ses/latest/dg/monitor-using-event-publishing.html | Not HTTP webhooks: events go to SNS, EventBridge or Firehose and you build the consumer. | #amazon-ses-event_webhooks |
| Hosted templates | api-only | Inferred | — | — | Templates are created over the API; the console editor is minimal. | #amazon-ses-hosted_templates |
| React Email / MJML | handlebars | Inferred | — | — | SES templates use Handlebars-style substitution. React Email works fine — you render to HTML yourself. | #amazon-ses-react_email_mjml |
| Log retention | 0 ms | Inferred | — | — | SES stores no searchable message log. Retention is whatever you build in CloudWatch, S3 or your own database. | #amazon-ses-log_retention |
| Throughput ceiling | 50,400 emails/hr | Vendor-claimed | 2026-05-10 | https://docs.aws.amazon.com/ses/latest/dg/manage-sending-quotas.html | Typical post-sandbox quota is 50,000/day at 14 messages/second; raised on request. | #amazon-ses-throughput_ceiling |
| Multi-domain sending | ● | Inferred | — | — | Up to 10,000 verified identities per account, per region. | #amazon-ses-multi_domain |
| Data residency | us, eu, au, apac, sa, ca | Vendor-claimed | 2026-05-10 | https://docs.aws.amazon.com/general/latest/gr/ses.html | Available in ap-southeast-2 — the only managed provider here with Australian residency. | #amazon-ses-data_residency |
| Shared pool quality | 3 | Inferred | — | — | Enormous and mixed, but AWS enforces bounce and complaint thresholds hard and will pause your account. | #amazon-ses-shared_pool_quality |
| IP warmup | ● | Vendor-claimed | 2026-05-10 | https://aws.amazon.com/ses/pricing/ | Managed Dedicated IPs handle warm-up entirely; standard dedicated IPs have an automatic warm-up mode. | #amazon-ses-ip_warmup |
| DKIM/DMARC friction | 4 | Inferred | — | — | Easy DKIM is fine, but identities are per-region, the custom MAIL FROM domain is a separate step, and DMARC is left to you. | #amazon-ses-dkim_dmarc_friction |
| BIMI | ◐ | Inferred | — | — | No BIMI feature; nothing blocks it once DMARC is enforced. | #amazon-ses-bimi_support |
| Suppression list | ● | Vendor-claimed | 2026-05-10 | https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html | — | #amazon-ses-suppression_management |
| Bounce handling | ◐ | Inferred | — | — | You get notifications and an account suppression list, but you remain accountable for the rates and can be paused for them. | #amazon-ses-bounce_complaint_handling |
| Price / 1k emails | $0.1 /1k | Vendor-claimed | 2026-05-10 | https://aws.amazon.com/ses/pricing/ | $0.10 per 1,000 outbound messages, plus a per-GB charge on attachments. | #amazon-ses-price_per_1k |
| Free tier | 3,000 emails/mo | Inferred | — | — | 12-month allowance only. The old always-free 62,000/month-from-EC2 grant is gone. | #amazon-ses-free_tier |
| Dedicated IP | $24.95 /mo | Vendor-claimed | 2026-05-10 | https://aws.amazon.com/ses/pricing/ | Standard dedicated IP. Managed Dedicated IPs are billed differently, with a lower base and a per-message component. | #amazon-ses-dedicated_ip_cost |
| Pricing model | pay-as-you-go | Inferred | — | — | — | #amazon-ses-pricing_model |
| MCP server | ◐ | Inferred | — | — | No SES-specific server; AWS's general-purpose API MCP servers cover it. | #amazon-ses-mcp_server |
| llms.txt docs | ○ | Inferred | — | — | — | #amazon-ses-llms_txt_docs |
| Funding | subsidiary | Inferred | — | — | — | #amazon-ses-funding_stage |
| Positioning | Barely marketed at all — SES is sold as an AWS primitive and the pricing page does the work. | Inferred | — | — | — | #amazon-ses-positioning |
| GA year | 2011 | Inferred | — | — | — | #amazon-ses-ga_year |

**Verdict.** An order of magnitude cheaper than everything else and roughly half a product. Correct above a couple of million messages a month, or when Sydney data residency is non-negotiable; a poor trade below that once you cost the dashboard you will end up building.

**Pick it when**

- High volume where $0.10 per thousand actually moves the P&L
- Workloads that must stay in ap-southeast-2
- Teams already deep in IAM, EventBridge and CloudWatch

### Loops {#loops}

Lifecycle and marketing email for SaaS, priced on contacts rather than sends.

|  |  |
| --- | --- |
| Site | https://loops.so |
| Docs | https://loops.so/docs |
| Company | Loops |
| Founded | 2022 |
| Funding | Seed |
| Profile | https://toolweight.dev/tools/loops |
| Score (default weights) | 54.0 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 15 min | Inferred | — | — | Self-serve with no approval queue; domain verification is the only gate. | #loops-time_to_first_send |
| Product scope | marketing-first | Inferred | — | — | Lifecycle and campaign email first, with a transactional API attached. | #loops-product_scope |
| Inbound parsing | ○ | Inferred | — | — | — | #loops-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, unsubscribed | Inferred | — | — | — | #loops-event_webhooks |
| Hosted templates | visual-editor | Inferred | — | — | Deliberately opinionated editor — fast, and not very configurable. | #loops-hosted_templates |
| React Email / MJML | — | Inferred | — | — | Templates live in Loops, not in your repo. That is the point of the product. | #loops-react_email_mjml |
| Log retention | — | Unknown | — | — | Retention window not verified for this pass. | #loops-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #loops-throughput_ceiling |
| Multi-domain sending | ○ | Inferred | — | — | One sending domain per workspace. | #loops-multi_domain |
| Data residency | us | Inferred | — | — | — | #loops-data_residency |
| Shared pool quality | 4 | Inferred | — | — | Small, SaaS-focused customer base keeps the pool comparatively clean. | #loops-shared_pool_quality |
| IP warmup | ○ | Inferred | — | — | No dedicated IP product. | #loops-ip_warmup |
| DKIM/DMARC friction | 2 | Inferred | — | — | — | #loops-dkim_dmarc_friction |
| BIMI | — | Unknown | — | — | — | #loops-bimi_support |
| Suppression list | ● | Inferred | — | — | Unsubscribes and bounces are handled at the contact level. | #loops-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #loops-bounce_complaint_handling |
| Price / 1k emails | — | Vendor-claimed | 2026-06-05 | https://loops.so/pricing | Not applicable: Loops bills on stored contacts, not on messages sent. | #loops-price_per_1k |
| Free tier | — | Inferred | — | — | The free plan is contact-capped rather than email-capped. | #loops-free_tier |
| Dedicated IP | — | Inferred | — | — | Not offered — shared pool only. | #loops-dedicated_ip_cost |
| Pricing model | contact-based | Inferred | — | — | — | #loops-pricing_model |
| MCP server | — | Unknown | — | — | — | #loops-mcp_server |
| llms.txt docs | ● | Inferred | — | — | Mintlify-hosted docs, which publish an llms.txt index automatically. | #loops-llms_txt_docs |
| Funding | seed | Community-reported | — | — | — | #loops-funding_stage |
| Positioning | "Email for modern SaaS." Sells taste and speed of setup rather than deliverability engineering. | Inferred | — | — | — | #loops-positioning |
| GA year | 2023 | Inferred | — | — | — | #loops-ga_year |

**Verdict.** The best-looking way to send lifecycle email, and the wrong tool for high-volume transactional. Contact-based pricing is a bet that your list stays engaged; if you accumulate dormant signups, the bill grows for mail you never send.

**Pick it when**

- Onboarding sequences and product announcements
- Small teams with no dedicated email engineer
- Products where marketing and transactional should share one contact record

### SparkPost {#sparkpost}

High-volume sender with deep analytics, now folded into Bird's platform.

|  |  |
| --- | --- |
| Site | https://www.sparkpost.com |
| Docs | https://developers.sparkpost.com |
| Company | Bird (ex-MessageBird) |
| Founded | 2014 |
| Funding | Acquired (MessageBird/Bird, 2021) |
| Profile | https://toolweight.dev/tools/sparkpost |
| Score (default weights) | 53.8 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 2880 min | Inferred | — | — | Self-serve signup has been progressively folded into Bird's flow; assume a sales conversation for anything beyond trivial volume. | #sparkpost-time_to_first_send |
| Product scope | transactional-first | Inferred | — | — | — | #sparkpost-product_scope |
| Inbound parsing | ● | Inferred | — | — | Relay webhooks deliver inbound mail as JSON. | #sparkpost-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, complained, deferred, unsubscribed, inbound | Inferred | — | — | — | #sparkpost-event_webhooks |
| Hosted templates | code-editor | Inferred | — | — | — | #sparkpost-hosted_templates |
| React Email / MJML | handlebars | Inferred | — | — | Substitution syntax is Handlebars-like. | #sparkpost-react_email_mjml |
| Log retention | 14400 min | Community-reported | — | — | Message events are queryable for roughly 10 days. | #sparkpost-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #sparkpost-throughput_ceiling |
| Multi-domain sending | ● | Inferred | — | — | — | #sparkpost-multi_domain |
| Data residency | us, eu | Inferred | — | — | — | #sparkpost-data_residency |
| Shared pool quality | 3 | Inferred | — | — | Real deliverability engineering underneath, inherited from the Message Systems MTA business. | #sparkpost-shared_pool_quality |
| IP warmup | ● | Inferred | — | — | Automatic IP warmup is a long-standing SparkPost feature and one of the better implementations. | #sparkpost-ip_warmup |
| DKIM/DMARC friction | 3 | Inferred | — | — | — | #sparkpost-dkim_dmarc_friction |
| BIMI | ◐ | Inferred | — | — | — | #sparkpost-bimi_support |
| Suppression list | ● | Inferred | — | — | — | #sparkpost-suppression_management |
| Bounce handling | ● | Inferred | — | — | — | #sparkpost-bounce_complaint_handling |
| Price / 1k emails | $0.4 /1k | Inferred | — | — | Legacy self-serve rate, roughly $20/mo for 50,000. Bird now quotes most volume through sales. | #sparkpost-price_per_1k |
| Free tier | — | Unknown | — | — | The old developer free tier has not survived the Bird transition intact. | #sparkpost-free_tier |
| Dedicated IP | — | Unknown | — | — | Included on committed plans; no public list price since the merger. | #sparkpost-dedicated_ip_cost |
| Pricing model | volume-tiers | Inferred | — | — | — | #sparkpost-pricing_model |
| MCP server | ○ | Inferred | — | — | — | #sparkpost-mcp_server |
| llms.txt docs | ○ | Inferred | — | — | — | #sparkpost-llms_txt_docs |
| Funding | acquired | Community-reported | — | — | Acquired by MessageBird, now Bird, in 2021. | #sparkpost-funding_stage |
| Positioning | "Predictable email delivery at scale." The engineering is real; the product is increasingly a feature of Bird rather than a thing you buy. | Inferred | — | — | — | #sparkpost-positioning |
| GA year | 2014 | Inferred | — | — | — | #sparkpost-ga_year |

**Verdict.** Genuinely good deliverability technology attached to an increasingly uncertain commercial story. Existing high-volume customers have little reason to move; new teams should not start here without confirming what self-serve still exists.

**Pick it when**

- Existing SparkPost estates at high volume
- Teams already committed to Bird's platform
- Workloads that need automatic IP warmup across many IPs

### Plunk {#plunk}

Open-source email console you self-host on top of your own AWS SES account.

|  |  |
| --- | --- |
| Site | https://useplunk.com |
| Docs | https://docs.useplunk.com |
| Repo | https://github.com/useplunk/plunk |
| Company | Plunk |
| Founded | 2023 |
| Funding | Bootstrapped |
| Open source | Yes (AGPL-3.0) |
| Profile | https://toolweight.dev/tools/plunk |
| Score (default weights) | 45.8 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 30 min | Inferred | — | — | Cloud signup is quick. Self-hosted Plunk inherits your own SES sandbox exit, which realistically makes it days. | #plunk-time_to_first_send |
| Product scope | both | Inferred | — | — | — | #plunk-product_scope |
| Inbound parsing | ○ | Inferred | — | — | — | #plunk-inbound_parsing |
| Event webhooks | delivered, opened, clicked, bounced, unsubscribed | Inferred | — | — | Plunk's model is its own event and trigger system rather than raw SMTP webhooks. | #plunk-event_webhooks |
| Hosted templates | code-editor | Inferred | — | — | — | #plunk-hosted_templates |
| React Email / MJML | — | Inferred | — | — | Plunk sends HTML; render React Email or MJML yourself before posting. | #plunk-react_email_mjml |
| Log retention | — | Inferred | — | — | Self-hosted: retention is whatever your Postgres keeps. | #plunk-log_retention |
| Throughput ceiling | 50,400 emails/hr | Inferred | — | — | Whatever your underlying SES quota is. | #plunk-throughput_ceiling |
| Multi-domain sending | ● | Inferred | — | — | — | #plunk-multi_domain |
| Data residency | us, eu, au | Inferred | — | — | Self-hosted, so wherever you deploy it and whichever SES region you point it at. Plunk Cloud is US-only. | #plunk-data_residency |
| Shared pool quality | 3 | Inferred | — | — | Inherits SES's pool, or your own dedicated IP if you buy one from AWS. | #plunk-shared_pool_quality |
| IP warmup | ○ | Inferred | — | — | Delegated entirely to SES. | #plunk-ip_warmup |
| DKIM/DMARC friction | 3 | Inferred | — | — | You are doing SES's DNS setup, plus deploying Plunk. | #plunk-dkim_dmarc_friction |
| BIMI | ○ | Inferred | — | — | — | #plunk-bimi_support |
| Suppression list | ◐ | Inferred | — | — | Contact-level unsubscribes exist; suppression is thinner than a managed provider's. | #plunk-suppression_management |
| Bounce handling | ◐ | Inferred | — | — | You wire SES's bounce and complaint notifications yourself. | #plunk-bounce_complaint_handling |
| Price / 1k emails | $1 /1k | Inferred | — | — | Approximate for Plunk Cloud. Self-hosted, your only cost is SES at $0.10/1k plus a small server. | #plunk-price_per_1k |
| Free tier | — | Inferred | — | — | Self-hosting is free; the cloud free allowance was not verified. | #plunk-free_tier |
| Dedicated IP | — | Inferred | — | — | Not sold by Plunk — buy one from AWS if you need it. | #plunk-dedicated_ip_cost |
| Pricing model | pay-as-you-go | Inferred | — | — | — | #plunk-pricing_model |
| MCP server | ○ | Inferred | — | — | — | #plunk-mcp_server |
| llms.txt docs | ○ | Inferred | — | — | — | #plunk-llms_txt_docs |
| Funding | bootstrapped | Inferred | — | — | — | #plunk-funding_stage |
| Positioning | "The open-source email platform." Sells ownership: your data, your infrastructure, SES's price. | Inferred | — | — | — | #plunk-positioning |
| GA year | 2023 | Inferred | — | — | — | #plunk-ga_year |

**Verdict.** The cheapest honest way to get a dashboard, contacts and campaigns on top of SES pricing, and the only option here that puts message data in your own database. You take on the deployment and SES's onboarding at the same time.

**Pick it when**

- Teams who already run SES and want a UI over it
- Data-residency requirements no managed vendor satisfies
- Self-hosters who would rather own the stack than rent it

### Scaleway TEM {#scaleway-tem}

EU-sovereign transactional email from Scaleway, deliberately minimal.

|  |  |
| --- | --- |
| Site | https://www.scaleway.com/en/transactional-email-tem/ |
| Docs | https://www.scaleway.com/en/docs/transactional-email/ |
| Company | Scaleway (Iliad Group) |
| Founded | 2023 |
| Funding | Subsidiary (Iliad) |
| Profile | https://toolweight.dev/tools/scaleway-tem |
| Score (default weights) | 39.2 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Time to first send | 1440 min | Inferred | — | — | Scaleway account verification plus domain validation, and new organisations start on a very low quota that has to be raised. | #scaleway-tem-time_to_first_send |
| Product scope | transactional-only | Inferred | — | — | — | #scaleway-tem-product_scope |
| Inbound parsing | ○ | Inferred | — | — | — | #scaleway-tem-inbound_parsing |
| Event webhooks | delivered, bounced, complained | Inferred | — | — | No open or click events — TEM deliberately does not track recipients. | #scaleway-tem-event_webhooks |
| Hosted templates | none | Inferred | — | — | — | #scaleway-tem-hosted_templates |
| React Email / MJML | — | Inferred | — | — | No templating layer at all; you post the rendered HTML. | #scaleway-tem-react_email_mjml |
| Log retention | — | Unknown | — | — | Retention window not verified for this pass. | #scaleway-tem-log_retention |
| Throughput ceiling | — | Unknown | — | — | No published figure. | #scaleway-tem-throughput_ceiling |
| Multi-domain sending | ● | Inferred | — | — | Domains are managed per project. | #scaleway-tem-multi_domain |
| Data residency | eu | Vendor-claimed | 2026-05-25 | https://www.scaleway.com/en/docs/transactional-email/ | EU-only, under an EU-owned parent — a different legal position from a US vendor's EU region. | #scaleway-tem-data_residency |
| Shared pool quality | 3 | Inferred | — | — | Small, EU-focused pool; less battle-tested than the incumbents. | #scaleway-tem-shared_pool_quality |
| IP warmup | ○ | Inferred | — | — | No dedicated IP product. | #scaleway-tem-ip_warmup |
| DKIM/DMARC friction | 3 | Inferred | — | — | Manual records through the Scaleway console, plus domain validation. | #scaleway-tem-dkim_dmarc_friction |
| BIMI | ○ | Inferred | — | — | — | #scaleway-tem-bimi_support |
| Suppression list | ◐ | Inferred | — | — | Blocklists exist but the tooling is minimal. | #scaleway-tem-suppression_management |
| Bounce handling | ◐ | Inferred | — | — | — | #scaleway-tem-bounce_complaint_handling |
| Price / 1k emails | $0.3 /1k | Inferred | — | — | Approximate: metered at roughly €0.25 per 1,000, converted. | #scaleway-tem-price_per_1k |
| Free tier | 300 emails/mo | Inferred | — | — | Small permanent monthly allowance per project. | #scaleway-tem-free_tier |
| Dedicated IP | — | Inferred | — | — | Not offered — shared pool only. | #scaleway-tem-dedicated_ip_cost |
| Pricing model | pay-as-you-go | Inferred | — | — | — | #scaleway-tem-pricing_model |
| MCP server | ◐ | Inferred | — | — | Scaleway ships a general MCP server for its API surface rather than a TEM-specific one. | #scaleway-tem-mcp_server |
| llms.txt docs | ◐ | Inferred | — | — | Docs are public markdown on GitHub, without a formal llms.txt index. | #scaleway-tem-llms_txt_docs |
| Funding | subsidiary | Vendor-claimed | 2026-05-25 | https://www.scaleway.com | — | #scaleway-tem-funding_stage |
| Positioning | "Sovereign European cloud." The pitch is jurisdiction, not features — and the feature set reflects that honestly. | Inferred | — | — | — | #scaleway-tem-positioning |
| GA year | 2023 | Inferred | — | — | — | #scaleway-tem-ga_year |

**Verdict.** The clearest answer when the requirement is an EU-owned company holding the data rather than a US company's EU region. Everything else about it is minimal: no templates, no tracking, no dedicated IPs. Judge it on jurisdiction.

**Pick it when**

- EU sovereignty requirements a US vendor's EU region does not satisfy
- Privacy-first products that do not want open tracking to exist
- Teams already running on Scaleway infrastructure

## Methodology

Prices are the cheapest paid self-serve tier, converted to USD per thousand emails, ignoring annual discounts and contact-based add-ons. Free tiers are permanent free plans, not trials. Feature cells were written from vendor documentation where the fact is documented and marked vendor-claimed; judgement calls — shared pool quality, DKIM friction, IP warmup depth — are scored 1–5 and marked inferred, with the ladder defined in each column's help text. Blank cells mean we do not know, and we would rather say so than publish a plausible number.

Time-to-first-send is currently inferred or community-reported on every row, and that is the honest state of it. The definition we are measuring against is precise: wall-clock time from starting signup on a clean account, with a clean domain, to a message landing in a Gmail inbox that is not a verified address on the account. That last clause is the whole point — it excludes sandbox echo, so Amazon SES cannot pass by mailing itself. It includes any manual review, compliance hold or support ticket, and it excludes DNS propagation beyond ten minutes so that a slow registrar is not scored against the provider. From the next verification pass toolweight runs this properly: a fresh company entity, a fresh domain per provider, a scripted signup, receiving mailboxes we control on Gmail, Outlook and Fastmail, and a timestamp taken from the receiving server's Received header rather than the vendor's dashboard. Rows move to measured as each run completes, and rejected sandbox requests will be reported as a distribution rather than a median, because the tail is the story.

## FAQ

### What is the fastest email API to get sending with?

Resend, AhaSend and Loops all put a real message in an external inbox roughly ten to fifteen minutes after signup, because there is no human approval step — you verify DNS and you are live. Amazon SES is the slow end: the sandbox exit request goes through AWS Support, is frequently rejected the first time, and realistically costs one to five days.

### Is Amazon SES actually cheaper than Resend or Postmark?

Per message, dramatically: $0.10 per thousand against Resend's $0.40 and Postmark's $1.50. That gap only holds if you value your own time at zero. SES gives you no message log, no template UI and no hosted event pipeline, so you build a dashboard, a suppression view and an SNS consumer. Below roughly two million messages a month the saving rarely covers the engineering.

### Do I need a dedicated IP for transactional email?

Almost certainly not. Dedicated IPs need sustained volume — Postmark wants around 300,000 a month before it will sell you one — because a cold IP with low traffic warms badly and looks worse than a well-policed shared pool. Below that threshold, a provider that actually polices its shared pool beats an under-warmed dedicated IP every time.

### Which email API works with React Email?

React Email renders to HTML, so it technically works with any provider. Only Resend integrates it first-party: React Email is a Resend project and the Node SDK accepts a React element as the message body. Everywhere else you call render() yourself and post the resulting HTML, which is about four lines of glue and no real obstacle.

### Which providers offer EU or Australian data residency?

EU residency is common: Scaleway TEM and Brevo are EU-only, and Resend, SendGrid, Mailgun, SparkPost, MailerSend and Mailtrap offer an EU region, sometimes as a paid add-on. Australian residency is close to nonexistent — Amazon SES in ap-southeast-2 is the only managed option, and otherwise you self-host something like Plunk on local infrastructure.

### Why did my provider suspend my account after the first send?

Almost always compliance automation, not deliverability. New accounts sending to a list the provider has never seen trip fraud heuristics, especially on free tiers at SendGrid and Brevo. Send a small warm batch to engaged recipients first, keep initial volume under a few hundred a day, and have DKIM, SPF and a DMARC record in place before the first campaign.

### How is time-to-first-send measured on this page?

Wall-clock from starting signup to a message arriving in a Gmail inbox that is not a verified address on the account, including any manual review queue and excluding DNS propagation beyond ten minutes. The external-inbox clause is deliberate: it stops a provider passing by mailing an address it already trusts, which is exactly what an SES sandbox account can do.

## Recent changes

| Date | Kind | Event | Tools | Source |
| --- | --- | --- | --- | --- |
| 2024-02-01 | other | **Gmail and Yahoo bulk sender requirements take effect** — Senders above 5,000 messages a day to Gmail or Yahoo must publish SPF, DKIM and DMARC, offer one-click unsubscribe, and hold spam complaint rates below 0.3%. This is the rule that turned DNS setup friction from an annoyance into a launch blocker, and it is why every provider on this page now pre-generates authentication records. | — | https://blog.google/products/gmail/gmail-security-authentication-spam-protection/ |
| 2025-05-05 | other | **Microsoft applies bulk sender requirements to Outlook.com** — Microsoft began enforcing SPF, DKIM and DMARC on high-volume senders to outlook.com, hotmail.com and live.com, initially routing non-compliant mail to junk. The practical effect is that a working DMARC record is now table stakes at all three major consumer mailbox providers, not just Google and Yahoo. | — | — |
| 2025-07-15 | pricing | **AWS free tier rework removes the old always-free SES allowance** — Amazon's free tier moved to a credit-based model for new accounts, and SES's long-standing always-free grant of 62,000 messages a month from EC2-hosted applications is no longer how the allowance works. Anyone who architected around it should re-check the bill. The exact effective date has not been re-verified by toolweight. | amazon-ses | https://aws.amazon.com/ses/pricing/ |
| 2025-09-25 | incident | **Malicious postmark-mcp npm package exfiltrated email** — A third-party npm package impersonating an official Postmark MCP server was found silently BCC-ing every message it sent to an attacker-controlled address. Postmark did not publish the package. It is the cleanest available demonstration that an MCP server holding your sending credentials is a supply-chain dependency, and should be pinned and audited like one. | postmark | — |
| 2025-11-10 | launch | **React Email consolidates as the default template layer** — React Email's component library and CLI matured to the point that most new JavaScript projects author email markup in JSX rather than hand-written tables or MJML. Resend maintains it, which is a meaningful distribution advantage: the recommended template path leads back to one vendor's SDK. The date here reflects adoption rather than a single release. | resend | https://react.email |

## Sources

| Source | Last verified |
| --- | --- |
| https://resend.com/docs/dashboard/webhooks/introduction | 2026-06-01 |
| https://resend.com/docs/send-with-nextjs | 2026-06-01 |
| https://resend.com/pricing | 2026-06-01 |
| https://postmarkapp.com/developer/user-guide/inbound | 2026-05-20 |
| https://postmarkapp.com/developer/webhooks/webhooks-overview | 2026-05-20 |
| https://postmarkapp.com/pricing | 2026-05-20 |
| https://docs.aws.amazon.com/ses/latest/dg/receiving-email.html | 2026-05-10 |
| https://docs.aws.amazon.com/ses/latest/dg/monitor-using-event-publishing.html | 2026-05-10 |
| https://docs.aws.amazon.com/ses/latest/dg/manage-sending-quotas.html | 2026-05-10 |
| https://docs.aws.amazon.com/general/latest/gr/ses.html | 2026-05-10 |
| https://aws.amazon.com/ses/pricing/ | 2026-05-10 |
| https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html | 2026-05-10 |
| https://www.twilio.com/docs/sendgrid/for-developers/parsing-email/setting-up-the-inbound-parse-webhook | 2026-05-15 |
| https://www.twilio.com/docs/sendgrid/for-developers/tracking-events/event | 2026-05-15 |
| https://sendgrid.com/en-us/pricing | 2026-05-15 |
| https://www.twilio.com | 2026-05-15 |
| https://documentation.mailgun.com/docs/mailgun/user-manual/receive-forward-store/ | 2026-05-18 |
| https://documentation.mailgun.com/docs/mailgun/user-manual/events/ | 2026-05-18 |
| https://documentation.mailgun.com/docs/mailgun/user-manual/sending-messages/ | 2026-05-18 |
| https://loops.so/pricing | 2026-06-05 |
| https://www.scaleway.com/en/docs/transactional-email/ | 2026-05-25 |
| https://www.scaleway.com | 2026-05-25 |

## Related comparisons

- [AU SMS APIs](https://toolweight.dev/compare/sms-api-providers-australia) — Which SMS API provider should I use to send text messages to Australian mobile numbers?
- [Domain registrars](https://toolweight.dev/compare/domain-registrars) — Which domain registrar is cheapest to renew with, and which ones make it hard to leave?
- [Vercel alternatives](https://toolweight.dev/compare/vercel-alternatives) — Which Vercel alternative should I use, and what happens to my bill if my site goes viral?
- [Convex alternatives](https://toolweight.dev/compare/convex-alternatives) — What are the best alternatives to Convex, and how hard is each one to leave?

## Licence and attribution

Data from toolweight (https://toolweight.dev), licensed CC-BY-4.0.

- Licence: [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/)
- Canonical HTML: https://toolweight.dev/compare/email-sending-apis
- Machine-readable: https://toolweight.dev/compare/email-sending-apis.md · https://toolweight.dev/api/v1 · https://toolweight.dev/mcp
- toolweight takes no affiliate revenue and sells no placements. Corrections: https://toolweight.dev/suggest
