1. Your sending
2. Comparison
| Provider | Per month | Per year | 12-month spend with growth |
|---|
Where the cheapest provider changes
| Emails per month | Cheapest |
|---|
Several providers are $0 at small sizes, so the first rows are ties. A free plan is not always production-ready: check daily caps, log retention, support and add-ons (dedicated IP, inbound) at each vendor. Amazon SES is cheapest per email at scale but you build more yourself.
Rate cards (editable)
| Provider | Free up to (emails/mo) | First paid plan (USD/mo) | Emails in first plan | Overage per 1,000 emails |
|---|
Plans beyond the first stay at the defaults here; use the CLI --prices file to edit every plan. Press Compare after changing a value.
Prefer a CLI, or want a budget gate in CI?
node cli.mjs compare --emails 120000 --growth 6 node cli.mjs compare --emails 300000 --provider postmark --budget 200 # exit 1 over budget node cli.mjs crossover node cli.mjs compare --emails 120000 --prices prices.json --json
Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call. More: how to choose a transactional email provider.
Common questions
Does this read my email provider account?
No. It uses only the monthly send volume you type and rate cards you can edit. It cannot see your plan, add-ons, contract or invoice. Treat every figure as a way to compare options, never as what you will be charged.
Where do the prices come from?
They are approximate public list prices as best known in 2025, shown with an as-of line, and every number is editable. Vendors change packaging often and define a billable email differently, so check each vendor's pricing page before deciding.
What is not included?
Dedicated IP addresses, inbound email, log retention, extra seats or domains, support plans and committed-use discounts. These are often the real bill, so use this to compare the per-email line, not to forecast the whole invoice. Deliverability is not priced here and matters more than a few dollars.
Is my data uploaded anywhere?
No. The page calculates in your browser and sends nothing. The CLI reads local files and makes no network call.