Sending an email is a POST request. Getting it into an inbox is a reputation problem, and reputation depends on your SPF, DKIM and DMARC records, plus how aggressively your provider retires addresses that bounce or complain before Gmail decides your domain is the issue.
So the API is not what you are choosing between. Price and bounce handling are. And the price range is wider than anyone expects: at 50,000 emails a month the same workload runs $5.00 on Amazon SES and $66.00 on Postmark, both computed from the vendors' own published rates. The full comparison lives on DevToolLab with every tier, add-on and screenshot; this is the compressed version.
The spread, in one table
Prices below were read from each vendor's pricing page on September 5, 2026.
| Provider | Free tier | Entry plan | Overage per 1,000 | Owned by |
|---|---|---|---|---|
| Resend | 3,000/mo, 100/day | $20/mo, 50,000 included | $0.90 | Independent |
| Postmark | 100/mo, no overage | $15/mo, 10,000 included | $1.80 down to $1.20 | ActiveCampaign |
| SendGrid | 60-day trial, 100/day | Essentials from $19.95/mo | Unpublished | Twilio |
| Amazon SES | AWS credit only | $0.10 per 1,000, no minimum | $0.10 | AWS |
| Mailgun | 100/day | $15/mo, 10,000 included | $1.80 down to $1.10 | Sinch |
| Mailtrap | 4,000/mo, 150/day | $15/mo, 10,000 included | $1.00 | Railsware |
| Loops | 1,000 contacts, 4,000 sends | Per subscribed contact | Sends not metered | Astrodon |
| Plunk | 1,000/mo hosted | $0.001 per email | n/a | AGPL-3.0 |
| Postal | Self-host | Your hardware | n/a | MIT |
Notice these are not the same unit. Resend, Mailgun and Mailtrap sell a monthly bucket and bill overflow. SES sells thousands with no bucket at all. Loops meters stored contacts and stops caring how much you send. Postmark quotes off a volume slider, so its "price" depends where you drag the handle.
Resend
Resend is where new Node and Next.js projects land right now, and the adoption numbers explain why: it announced 3,000,000 users on June 3, 2026, three times what it had six months earlier, with 6.8 million weekly npm downloads on its SDK. It also maintains React Email, now at 6.0, so your templates are just components.
Free covers 3,000 a month with a 100/day ceiling and 3 domains. Pro is $20 for 50,000 with no daily cap. Scale is $90 for 100,000. Overage sits at $0.90 per 1,000 on both paid tiers, and the add-on sheet is public rather than sales-gated: $30 a month buys a dedicated IP, though only from Scale upward, and SSO is $150.
Two caveats. That dedicated IP gate means a Pro customer shares reputation. And Resend publishes its own incident reports, with entries from November 18, 2025 and February 15, 2026, which is a healthy habit and also a reminder that a provider tripling in size has rough days.
Postmark
Postmark, now an ActiveCampaign property, sells deliverability rather than volume and does not apologize for the premium. At the 10,000 mark on its slider, Basic runs $15, Pro $16.50 with inbound processing and retention stretchable to 365 days, and Platform $18 with unlimited sending domains. Overage lands at $1.80, $1.30 and $1.20 per 1,000, which is the steepest entry rate in this group alongside Mailgun.
What earns the price is operational visibility: transactional and broadcast traffic run as separate message streams, and per-inbox-provider delivery statistics are published on the status page. The free tier is 100 emails a month, never expires, and refuses overage entirely.
One thing to be careful with when you compare: because Postmark quotes per slider position rather than a flat plan plus overage, any calculation that models it as "10,000-email tier plus published overage" overstates what you would really pay at higher volume.
SendGrid, which now lives on twilio.com
SendGrid still carries more mail than anything else listed here, with Twilio claiming north of 200 billion emails a month. The change this year is administrative: every sendgrid.com pricing URL redirected to a Twilio product page when checked on September 5, 2026, and sendgrid.com now displays a notice that the two sites are merging.
The current card reads: a 60-day trial at 100 emails a day, Essentials "starting at $19.95/mo", Pro "starting at $89.95/mo" with dedicated IPs bundled, and Premier on request. Note what is missing. There is no permanent free tier anymore, and no exact price, because it "depends on email send volume, features." If you built on the old free plan, budget for a migration.
Mailgun and Mailtrap
Mailgun is the API-first original, now inside Sinch. Free gives 100 a day with a single day of log retention. Basic is $15 for 10,000, Foundation $35 for 50,000, Scale $90 for 100,000 with 30-day logs, and overage falls from $1.80 to $1.10 across those tiers. The trap is retention: one day of logs on Free and Basic is precisely the window in which you need to explain a bounce.
Mailtrap arrived from the other direction, as the staging inbox developers used to catch test mail, and its production pricing is sharp in the middle of the range. Free is 4,000 a month at 150 a day, then Basic scales $15 to $30 for 10,000 to 100,000 emails with $1.00 overage. Business starts at $85 for the same 100,000 and bundles dedicated IPs. Read those two carefully, because Basic at $30 and Business at $85 both deliver 100,000 emails; what separates them is retention, seats and the IP.
Amazon SES, the number everyone prices against
SES charges $0.10 per 1,000 outbound emails a la carte, with no minimum and no contract, plus $0.12 per GB of attachments. Dedicated IPs are $24.95 a month.
The wrinkle is new. From July 21, 2026, fresh accounts, along with any account-region pair with no metered activity since June 1, 2025, land on tiered plans instead: Essentials at $0.16 per 1,000 for the first 10 million monthly emails, Pro at $0.22 per 1,000 plus $105 per account per region with an IP bundled, Enterprise at $0.23 plus $500. The $0.10 a la carte rate has not gone away, but it is no longer the automatic default.
What you are not buying at that price is a product. SES hands over an SMTP endpoint and a reputation dashboard. Templates, suppression logic and support are yours to build, and deliverability analytics cost another $0.07 per 1,000 unless a plan includes them. The SES pricing page carries eighteen footnotes across three tables, and the longer write-up unpacks the add-on sheet properly, including the Virtual Deliverability Manager surcharge and both dedicated IP models.
Loops, priced by contact
Loops is structurally different and worth knowing exists. It bills for stored subscribers, not sends. Free holds 1,000 contacts and 4,000 monthly sends; paid tiers stop metering sends altogether, up to 1,000 emails a second, and fold transactional mail in at no extra cost. If you already want Loops driving onboarding sequences, your password resets ride along free. If you have a handful of contacts firing enormous transactional volume, the model works against you.
Running it yourself
Plunk is the open-source answer shaped like Resend: AGPL-3.0, 5,400 GitHub stars, transactional plus campaigns and automations, Docker-deployable. Hosted is free to 1,000 emails a month then a flat $0.001 each, so 50,000 sends is roughly $50. Self-hosting still leaves you needing delivery infrastructure or a relay behind it.
Postal is the serious version: MIT-licensed, 16,800 stars, and an actual MTA. You operate the servers, warm the IP addresses and answer to Gmail's postmaster tools directly. Below a few hundred thousand emails a month that is more labor than the SES invoice it displaces.
Compute your own unit rate
Comparing buckets against per-thousand metering in your head does not work. This prints what each provider actually costs at a given volume, and the effective rate per 1,000 once included volume is exhausted:
// unit-rate.mjs - effective cost per 1,000 emails at a given monthly volume.
// Prices read from vendor pricing pages on September 5, 2026.
const volume = Number(process.argv[2] ?? 250_000)
// [monthly USD, emails included, overage USD per 1,000]
const plans = {
Resend: [[0, 3_000, null], [20, 50_000, 0.90], [90, 100_000, 0.90]],
Postmark: [[0, 100, null], [15, 10_000, 1.80], [16.5, 10_000, 1.30], [18, 10_000, 1.20]],
Mailgun: [[0, 3_000, null], [15, 10_000, 1.80], [35, 50_000, 1.30], [90, 100_000, 1.10]],
Mailtrap: [[0, 4_000, null], [15, 10_000, 1.00], [30, 100_000, 1.00], [85, 100_000, 0.88], [200, 250_000, 0.88]],
}
const metered = {
"Amazon SES": { per1k: 0.10, free: 0 },
Plunk: { per1k: 1.00, free: 1_000 },
}
const cheapest = (tiers, n) => tiers.reduce((best, [price, incl, over]) => {
if (n > incl && over == null) return best
const cost = n <= incl ? price : price + Math.ceil((n - incl) / 1_000) * over
return best == null || cost < best ? cost : best
}, null)
const rows = []
for (const [name, tiers] of Object.entries(plans)) rows.push([name, cheapest(tiers, volume)])
for (const [name, m] of Object.entries(metered)) rows.push([name, Math.max(0, volume - m.free) / 1_000 * m.per1k])
rows.sort((a, b) => a[1] - b[1])
const usd = n => n.toLocaleString("en-US", { style: "currency", currency: "USD" })
console.log(`\n${volume.toLocaleString("en-US")} emails/month\n`)
for (const [name, cost] of rows) {
const unit = (cost / volume) * 1_000
console.log(` ${name.padEnd(12)} ${usd(cost).padStart(9)} ${usd(unit)} per 1,000`)
}
const [cheap, dear] = [rows[0][1], rows[rows.length - 1][1]]
console.log(`\n spread: ${(dear / cheap).toFixed(1)}x\n`)
At 50,000 emails a month:
50,000 emails/month
Amazon SES $5.00 $0.10 per 1,000
Resend $20.00 $0.40 per 1,000
Mailtrap $30.00 $0.60 per 1,000
Mailgun $35.00 $0.70 per 1,000
Plunk $49.00 $0.98 per 1,000
Postmark $66.00 $1.32 per 1,000
spread: 13.2x
And at 250,000, where the buckets start to matter more than the sticker price:
250,000 emails/month
Amazon SES $25.00 $0.10 per 1,000
Mailtrap $180.00 $0.72 per 1,000
Resend $200.00 $0.80 per 1,000
Plunk $249.00 $1.00 per 1,000
Mailgun $255.00 $1.02 per 1,000
Postmark $306.00 $1.22 per 1,000
spread: 12.2x
Read that gap honestly. The $155 to $280 a month separating SES from the managed providers at 250,000 emails buys suppression handling, templates, a dashboard and somebody else's IP reputation. Whether that is a bargain depends entirely on whether you have an engineer who wants to own bounce processing.
Before your first production send, two things matter more than which vendor you picked: check your SPF record actually includes the provider, and confirm your DMARC policy has a valid reporting address, which every mailbox provider now expects from bulk senders.
Picking one
New product, Node or Next.js, under 100,000 a month: Resend, for the SDK and a price sheet that fits on one screen. Transactional mail where a late password reset becomes a support ticket: Postmark, checked against its slider at your real volume. Already inside AWS with someone willing to own suppression lists and IP warming: SES, at a fraction of everything else. Millions of sends and dedicated IP pools: SendGrid, through twilio.com now. Onboarding sequences and transactional from one tool: Loops. Determined to self-host: Plunk for the product shape, Postal if you genuinely want to be the mail server.
The APIs converged. The prices did not. Choose on the unit you actually consume, then go spend the afternoon on DNS, because no provider can deliver mail your own records declare forged.
References
- Best Email API Providers in 2026: Resend vs Postmark vs SendGrid vs Amazon SES vs Mailgun - the full version on DevToolLab, with every tier and add-on
- Email Authentication for Developers: SPF, DKIM, DMARC, BIMI and MTA-STS
- Resend pricing
- Postmark pricing
- Twilio SendGrid Email API pricing
- Amazon SES pricing
- Mailgun pricing
- Mailtrap pricing
- Loops pricing
- Plunk
- Postal



Top comments (0)