opinion
The real cost of transactional email at scale (a pricing teardown)
June 30, 2026

Per-email pricing feels trivial until the invoice has six figures of sends on it. Let's do the actual arithmetic, and be honest about what Cloudflare charges too.
Transactional email pricing is designed to feel free. A fraction of a cent per email, a generous free tier, a dashboard that never shows you the marginal cost while you're integrating. It's a great onboarding experience and a quietly expensive steady state. This is a teardown: real numbers at 10k, 100k, and 1M emails per month, comparing the managed-SaaS model against running it yourself on Cloudflare, including, fairly, what Cloudflare bills you.
A note up front, because credibility matters: exact vendor prices change, and your mileage depends on plan tiers and add-ons. The point here isn't the third decimal place; it's the shape of the curve, which is structural and doesn't change when the published rates nudge.
The two cost models
Managed sender (Resend / Postmark / SendGrid / Mailgun, etc.): you pay roughly per email, with a free tier, then tiered or per-thousand pricing above it. Often there's a separate per-contact charge if you also do newsletters. The marginal cost of email #1,000,001 is real money.
Self-hosted on Cloudflare: you pay for the primitives email delivery consumes (Worker invocations, Queue operations, D1 reads/writes, R2 storage), each metered with a free allotment, then commodity pricing. The marginal cost of one more email is a few metered operations, i.e. a rounding error. You also pay a one-time Tinbox license, which amortizes to ~nothing per email as volume grows.
The first model's cost is roughly linear in volume. The second is dominated by a near-flat infrastructure floor. Those two lines cross somewhere, and where they cross is the whole question.
What Cloudflare actually charges (the honest part)
Let's not hand-wave the "at cost" claim. A transactional email on Tinbox touches, very roughly:
- ~2 Worker invocations (enqueue + delivery consumer)
- ~2 Queue operations (write + read)
- a handful of D1 row writes/reads (store the message, status, bounce hooks)
- ~one R2 PUT + some KB of storage if you retain the raw MIME
Cloudflare meters each of these. Workers, Queues, and D1 all carry sizable free daily/monthly allotments and then bill in the cents-per-million-operations and fractions-of-a-dollar-per-GB range. R2's headline feature is zero egress fees, so reading your own mail back out doesn't cost you. Add it all up and the blended infrastructure cost of sending one email lands well under $0.0001 (a tenth of a cent) at the volumes below, and that's before any free-tier offset. Storage of historical mail is the slowly-growing term, and R2 at commodity per-GB pricing makes it cheap to keep everything.
Is that exactly zero? No. Cloudflare is a business and these meters are real. But it's at cost in the sense that you're paying for the compute and storage the work consumes, not a per-message margin on top.
The worked numbers
Below, "Managed" uses a representative per-email blended rate in the $0.30–$1.00 per thousand range typical of managed senders above their free tiers (lower at huge committed volume, higher on small plans). "Cloudflare" sums the metered primitives above plus the amortized license. Treat these as order-of-magnitude, not invoices.
10,000 emails / month
| Managed sender | Self-hosted (Cloudflare) | |
|---|---|---|
| Email volume cost | Often $0 (within free tier) | ~$0 (within Cloudflare free allotments) |
| Infra / platform | included | ~$0 metered |
| Contact storage (if newsletter) | possibly per-contact | $0 (rows in your D1) |
| Effective monthly | ~$0–$20 | ~$0–$5 |
Verdict: it's a wash, and managed wins on effort. At 10k/month you are firmly inside everyone's free tier. The savings from self-hosting are dollars, and your time configuring DNS is worth more than that. Use the managed thing. We mean this: optimizing here is a mistake.
100,000 emails / month
| Managed sender | Self-hosted (Cloudflare) | |
|---|---|---|
| Email volume cost | ~$30–$100 (above free tier, per-thousand) | metered primitives, mostly within/near free allotments |
| Contact storage (newsletter side) | per-contact fees stacking | $0 |
| Effective monthly | ~$35–$120 | ~$5–$15 |
Verdict: the gap opens. You're paying the managed vendor a recurring tens-to-low-hundreds of dollars for sends whose true infrastructure cost is single-digit dollars. Not catastrophic, but it's the volume where finance starts asking what the line item is, and where "we own this" becomes a reasonable answer. This is the crossover band for most teams.
1,000,000 emails / month
| Managed sender | Self-hosted (Cloudflare) | |
|---|---|---|
| Email volume cost | ~$300–$1,000+ | ~$10–$40 metered |
| Contact storage (large list) | meaningful per-contact charges | $0, in your DB |
| Effective monthly | ~$350–$1,200+ | ~$15–$50 |
| Annualized | ~$4k–$14k+ | ~$200–$600 |
Verdict: self-hosting wins decisively. At a million sends a month the managed model is a four-to-five-figure annual line item; the Cloudflare model is the cost of a nice dinner per month plus storage. The delta isn't marginal; it's an order of magnitude or more, every year, recurring. And that's before you count the second vendor (Mailchimp et al.) you'd otherwise pay per-contact for the newsletter side.
The hidden multiplier: you're usually paying twice
The per-email teardown undersells it, because most teams don't have one email vendor. They have a transactional sender and a per-contact newsletter tool and an inbox. The newsletter vendor charges by list size, which means you pay more precisely as your audience grows, the opposite of what you want. A 100,000-contact list on a per-contact plan can dwarf the transactional bill on its own.
Self-hosting collapses all three onto one contact database. The newsletter "costs" the same storage the transactional record already does. There's no per-contact tax for growing your list, because the list is just rows you already have. This is the part that doesn't show up in a naive sender-vs-sender comparison, and it's where the real money is. The line items that don't make it onto the pricing page are catalogued in the hidden costs buried in your email SaaS bill, and if you'd rather trim the bill than move off it, these ways to cut your email SaaS bill in half are the lower-commitment first step.
So when should you actually switch?
Read the verdicts back: the curve has three regions.
- Under ~10k/month: managed wins. Stay rented. Your time is the expensive resource here.
- ~100k/month: crossover. If email is core to your product, you're Cloudflare-native, or you also run a newsletter, owning it starts paying off. If email is incidental, the managed convenience is still worth it.
- ~1M/month and up: owning wins clearly. The recurring savings fund real engineering, and the per-contact newsletter tax alone often justifies the move.
The trigger isn't a dogma about self-hosting. It's the moment the per-email and per-contact meters stop being noise and start being a budget. For a lot of teams that arrives sooner than they expect, and once it does, the fix is to stop renting the floor and start paying cost for it.
If your numbers put you past the crossover, the practical next steps:
- resend-alternative: the qualitative side of this decision, conceding where managed still wins
- the roundup of transactional email API alternatives: the managed senders to weigh before you commit to owning it
- introducing-tinbox: what running sender + newsletter + inbox on your own Cloudflare account actually looks like
You self-host it on your own Cloudflare account, so your data and mail stay yours.
Frequently asked questions
How much does transactional email actually cost to send?
The raw infrastructure cost (compute, storage, queueing) is a fraction of a cent per email on Cloudflare's metered primitives. Most of what you pay a managed sender is the margin and convenience on top of that, which is fair at low volume and expensive at high volume.
Is self-hosting always cheaper?
No. At low volume, managed free tiers win, because your time is worth more than the savings. The crossover where self-hosting on Cloudflare beats per-email pricing typically shows up in the high tens-of-thousands to hundreds-of-thousands of emails per month.
What does Cloudflare actually charge for this?
Workers, Queues, D1, and R2 are each metered with a free allotment and then cents-per-million-style pricing. Even adding them up, the per-email cost stays well under a tenth of a cent at the volumes in this teardown. We show the line items honestly below.


