19 Best Bulk Email APIs in 2026: Pricing & Limits
For developers choosing a hosted email sender, this comparison covers 19 APIs, their published pricing, batch limits, campaign features, and policy constraints. Choose by who owns the audience and sending workflow: a transport API, a campaign platform, or a lifecycle system.
My shortlist: SES when you own the sending workflow and want low transport cost; Brevo or Mailjet when editors own campaigns; Customer.io when customer events drive journeys. For application-controlled batches plus inbound replies, compare Resend with MailKite (which we build). Both support inbound webhooks, and received messages consume their respective sending allowances: Resend’s transactional quota and MailKite’s combined quota.
“Best” means best-fit for those scenarios. The numbers below are published specifications and prices checked October 14, 2026, not measured delivery results. For an implementation-focused comparison after you’ve narrowed the list, see compare bulk email APIs.
Jump to: comparison table · pricing assumptions · self-hosted alternatives
Providers: MailKite · SES · SendGrid · Mailgun · Resend · Brevo · Mailjet · Elastic Email · MailerSend · Postmark · SMTP2GO · SocketLabs · Bird/SparkPost · Mailtrap · SendPulse · SMTP.com · AhaSend · Plunk · Customer.io
Choose a shortlist for your sending workflow
Open the scenario that matches who owns your sends. Each choice gives you a starting category and the trade-off to check before comparing prices. You can open more than one if your product has several workflows.
My application already selects recipients and prepares every message
Start with transport: compare SES for transport economics and Mailgun for personalized fan-out. Your application still owns audience state, approvals, queues, and failure handling; the largest batch isn't automatically the best fit.
If replies are part of the workflow, inspect Resend's inbound and batch model alongside the comparison above. Then apply the workload pricing checks, including inbound use and burst capacity.
Editors need to manage subscribers and send newsletter editions
Start with a campaign platform: compare Brevo when the audience and editing workflow should live outside your app, or Mailjet when developers and editors share responsibility. Check campaign features and contact allowances, rather than treating a transactional batch endpoint as a newsletter editor.
If retaining audience state in your own database is the deciding requirement, read when to choose a self-hosted campaign application. Buying bare transport means your team must supply the editorial workflow.
Customer events should trigger segments, delays, and follow-ups
Start with lifecycle orchestration: inspect Customer.io when journeys would otherwise become application features. Count people and object profiles as well as sends; a large included email allowance doesn't settle the total bill.
If you only need to send a prepared notification batch, transport is the smaller purchase. Use the implementation comparison guide after choosing the category to inspect the remaining integration work.
Compare the bulk email API category before the price
A transport API accepts messages your application prepares. Batch sending submits multiple messages or personalized recipients in one request. Campaign fan-out selects a saved audience and creates the individual messages server-side. A lifecycle platform adds event-driven segmentation, delays, and follow-ups. These are different purchases, even when each exposes an HTTP API.
This is a curated comparison of 19 services, not a census of email APIs. Inclusion requires a current hosted sender with documented bulk, campaign, or programmatic fan-out suitability. Omitted products aren’t being declared unsuitable or API-less. SparkPost and Bird occupy one entry. The order isn’t a score; the deciding questions are workflow ownership, workload-adjusted cost, and documented limits.
An API isn’t permission to send cold email. MailKite’s Terms of Service prohibit unsolicited bulk or commercial mail and sending without consent. Resend’s acceptable-use policy explicitly prohibits cold outreach. Transactional-only streams are unsuitable for newsletters or cold outreach; use the provider’s documented marketing path for permission-based campaigns. Don’t turn a newsletter into “transactional” mail by choosing a different endpoint.
Bulk email API comparison: 19 providers at a glance
Prices are USD monthly unless stated otherwise, checked 2026-10-14. Paid starting prices aren’t equal-volume quotes. Unverified means the fetched source didn’t establish the field; it doesn’t mean unlimited. Batch and price cells link their primary evidence so the table can be read independently.
| Provider | Type and verified batch/fan-out shape | Pricing model and starting point | Best use | Main limitation |
|---|---|---|---|---|
| MailKite | Transport + broadcasts; 50 personalized recipients/batch | $20/month; 50,000 inbound + outbound combined | Sending plus inbound replies | Inbound consumes the same allowance |
| Amazon SES | Transport; templated bulk API, account/region quotas | À la carte $0.10/1,000; Essentials $0.16/1,000 at first tier | Cost-sensitive infrastructure | Campaign operations need assembly |
| SendGrid | Transport + separate campaigns; 1,000 personalization objects/request | Volume subscription; numeric start unverified | Existing SendGrid integrations | Campaign product billed separately |
| Mailgun | Transport; 1,000 recipients/batch with recipient variables | Basic $15/month; 10,000 emails | Personalized transport fan-out | Basic has one sending domain |
| Resend | Transport + broadcasts + inbound; 100 emails/batch | $20/month for 50,000 API emails; marketing from $40/5,000 contacts | Developer-owned content and replies | Inbound uses transactional quota; batch attachments unsupported |
| Brevo | Campaign + transactional; 1,000 versions, 2,000 total recipients/request | Starter base $9/month; volume/add-ons affect total | Shared marketing and app messaging | Batch endpoint is transactional |
| Mailjet | Campaign + transport; ordered Messages array, ceiling unverified | Starter $9/month; 8,000 emails, 2,000 contacts | Editor/developer collaboration | Logo removal starts on Essential |
| Elastic Email | Transport + separate marketing; bulk merge API, ceiling unverified | API Starter $19/month; 50,000 emails | Budgeted application sending | Webhooks/inbound move to Pro |
| MailerSend | Transport; 500 email objects/bulk request on listed paid plans | Hobby $7/month; 5,000 emails | Asynchronous notification batches | Rate limits and deferred validation |
| Postmark | Transport + Broadcast Streams; 500 messages/batch, 50 MB | Basic $15/month; 10,000 emails | Separate transactional/broadcast traffic | Default stream is transactional |
| SMTP2GO | Relay + API; To array up to 100, not personalized message objects | Starter $10/month; 10,000 emails (body; title conflicts) | Existing SMTP-centric applications | Audience workflow stays elsewhere |
| SocketLabs | Hosted transport + reporting; injection API ceiling unverified | Core $39.95/month; 40,000 emails after trial | Delivery operations and reporting | Advanced analytics aren’t all Core |
| Bird / SparkPost | Transport + campaigns; SparkPost transmissions or Bird broadcasts | Bird Startup $15/month; 50,000 emails | Bird adoption or SparkPost migration review | API-generation differences |
| Mailtrap | Transport + separate marketing; Bulk Stream, ceiling unverified | API Basic $15/month; 10,000 emails | Stream-separated production mail | Sandbox is a separate product |
| SendPulse | Campaign API + SMTP service; campaign creation limit 4/hour | SMTP free 12,000/month, 50/hour; paid local-currency quote | Existing SendPulse campaign users | SMTP and campaign quotas differ |
| SMTP.com | Hosted relay + API; request ceiling unverified | Essential $25/month; 50,000 emails | Managed relay at sustained volume | Dedicated IP starts above Essential |
| AhaSend | Transport + campaigns; 100 personalized recipients/request | Free 1,000/month; paid included-volume plans, price unverified | EU-stored message data | Marketing-domain configuration required |
| Plunk | Hosted campaigns + transport; audience fan-out, ceiling unverified | Free 1,000/month; paid $0.001/email, no base fee | Send-priced newsletters and workflows | Self-hosting still needs transport |
| Customer.io | Lifecycle; API-triggered broadcast, 10-second trigger spacing | Essentials $100/month; 5,000 profiles and 1 million emails | Behavioral journeys | Profile growth changes the bill |
1. MailKite: batch sending with an inbound reply workflow
MailKite combines a personalized batch API with inbound email webhooks. Each batch contains up to 50 recipients, produces one message per address, and can partially succeed. That makes the per-recipient result more useful than a single success flag. Broadcasts are another path when the audience lives in the service.
Pro costs $20/month for 50,000 combined messages, then $0.50/1,000. Count replies as well as sends. Resend also offers inbound webhooks and shared-quota receiving; compare the actual reply workflow rather than treating inbound as unique to MailKite. SES suits transport-only assembly, while a campaign platform better serves an editorial team. Unsolicited mail is prohibited.
2. Amazon SES: transport economics with more assembly
Choose SES when your team already owns the audience, queue, templates, and failure handling. SendBulkEmail supplies template replacements and individual entry results, not a complete newsletter workflow. The savings are most useful when this application work already exists; rebuilding it solely to lower the sending bill changes the calculation.
Two checks determine whether SES belongs on your shortlist:
- Pricing model: à-la-carte outbound costs $0.10/1,000; Essentials costs $0.16/1,000 in the first tier. New/default-eligible accounts may start on Essentials. Data and optional services are extra.
- Burst capacity: production quotas vary by account and region. A low per-message price doesn’t establish that a new account can send your launch-day audience on schedule.
3. SendGrid: a reasonable incumbent choice
SendGrid suits applications already using its templates, suppression groups, and event integrations. The Mail Send reference allows up to 1,000 personalization objects. Treat each as an envelope, not a promise of 1,000 private messages: multiple To recipients within an envelope have different semantics from separate personalizations.
Migration cost is the strongest reason to keep it: existing templates, suppression groups, and event consumers have value. Compare Email API pricing separately from Marketing Campaigns, and price the product you’ll actually use. The table leaves the current numeric starting rate unverified.
4. Mailgun: personalized fan-out without a campaign frontend
Mailgun’s decisive feature is personalized fan-out to 1,000 recipients in one request. Use recipient variables even when little content varies: the docs warn that omitting them can expose the To list. That privacy requirement belongs in the integration contract, not an optional templating enhancement.
Basic is $15/month for 10,000 emails, but its one-domain allowance and one-day log retention can be limiting for multi-product builders. Foundation expands domains and retention. Choose it when your application owns campaign composition and approvals; mailing lists don’t supply that workflow. Non-transactional mail needs express permission under the AUP.
5. Resend: application-controlled sending and a separate broadcast model
Resend is a strong shortlist candidate for application-rendered content and reply handling. Batch sending accepts 100 email objects, preserves result order, and documents idempotency keys. Batch attachments aren’t supported, so batched invoices with files need another path.
Inbound isn’t a MailKite-only feature. Resend’s plan comparison includes inbound emails via webhooks on every plan, and its billing FAQ counts each received email toward the transactional quota. Budget replies alongside API sends when comparing the $20/month, 50,000-email Pro allowance.
For newsletters, choose the meter deliberately. Marketing starts at $40/month for 5,000 contacts and doesn’t meter broadcast send frequency. The email API can also send consent-based newsletters, but every recipient consumes email quota and you supply the visible unsubscribe link and one-click headers. The useful distinction is audience ownership and campaign frequency, not the word “transactional” above the API price.
6. Brevo: campaigns alongside application messages
Pick Brevo when the audience and editorial workflow should live outside your application. Segmentation, campaign editing, and app messaging share a platform, but they don’t share every endpoint’s semantics. Its transactional batch path permits 1,000 versions, 2,000 total recipients, and 99 recipients per version. Newsletter subscription management belongs in the campaign product.
The $9/month Starter base begins with 5,000 emails; volume tiers and add-ons change the total. Quote the needed automation/reporting features as well as the audience size. This is a better purchase than bare transport when editors need independent control, and a less useful one when your application already supplies all of that. Provable consent remains required.
7. Mailjet: useful when developers and editors share ownership
Mailjet bridges an editor-owned newsletter and developer-owned sends. Starter costs $9/month for 8,000 emails and 2,000 contacts; Essential is $19/month for 15,000 and removes the logo. If an unbranded newsletter is mandatory, Essential is the relevant entry point.
The bulk API preserves message order and reports individual errors without stopping valid messages. Keep private recipients in separate message objects: multiple addresses in To see one another. That makes Mailjet useful for shared editorial ownership, provided the caller handles partial outcomes.
8. Elastic Email: compare the API product to the API product
Elastic Email’s $19/month API Starter allowance of 50,000 emails is worth comparing for application-owned sending. The v4 API includes bulk merge fields and suppressions. Price the event workflow too: Pro adds webhooks, inbound processing, and subaccounts. Email Marketing has separate contact-based pricing and requires a separate account when switching products. A low API entry price doesn’t purchase the entire campaign stack.
9. MailerSend: asynchronous batches with status inspection
MailerSend fits queued application notifications where the caller can inspect processing later. Its bulk endpoint accepts 500 email objects on the listed paid plans, returns a bulk ID, and performs individual validation asynchronously. An accepted request can still contain invalid or suppressed recipients.
Hobby costs $7/month for 5,000 emails, with its own bulk request-rate limit. Marketing is permitted by the anti-spam policy, which requires provider unsubscribe tracking. For newsletters, check the plan-specific header/unsubscribe features; for notification batches, the practical requirement is a worker that follows the bulk ID through validation rather than declaring success on acceptance.
10. Postmark: separate streams for separate message purposes
Postmark is appropriate when you want explicit separation between application mail and permission-based broadcasts. Its Email API accepts 500 messages per batch with a 50 MB payload ceiling. Batch responses can contain individual errors despite a successful HTTP status, and omitted stream selection defaults to transactional outbound.
Choose the stream before sending. Basic costs $15/month for 10,000 emails, and Broadcast Streams permit bulk marketing. The default transactional stream is unsuitable for newsletters or cold outreach. Postmark supplies stream-aware transport, not an audience editor through its batch endpoint. Its separate Bulk API has its own plan availability to check.
11. SMTP2GO: relay-first applications with an HTTP option
Keep SMTP2GO on the list when SMTP is already your integration boundary and you need an HTTP option. Its To array accepts 100 addresses, not 100 independently personalized message objects. Your audience application still matters. The pricing body lists $10/month for 10,000 emails and $1/1,000 extra, while the title says “from $15”; resolve that conflict at checkout.
12. SocketLabs: delivery operations as part of the purchase
Reporting requirements justify considering SocketLabs alongside transport-only options. Core is $39.95/month for 40,000 emails after trial, with HTTP Injection API access; Pro adds a dedicated IP and expanded reporting. Spotlight is a distinct analytics offering, not a Core entitlement. Evaluate which reports your operators actually need. Commercial bulk mail requires affirmative consent under its AUP.
13. Bird / SparkPost: verify which API you’re adopting
Bird is the current destination of the SparkPost website, but that doesn’t make its API interchangeable with SparkPost Transmissions. The SparkPost reference documents recipient substitutions, stored lists, and account sending limits. Bird’s current email product separately documents transactional mail and opted-in campaigns.
Bird Startup costs $15/month for 50,000 emails, with $0.90/1,000 overage. Those aren’t verified legacy SparkPost contract prices. For migration, resolve endpoint generation, suppression transfer, and template compatibility first; a new brand name doesn’t make those integration contracts compatible.
14. Mailtrap: production bulk sending, not just a sandbox
Mailtrap’s production sender is separate from its testing sandbox. For application-generated promotions, Bulk Stream supplies a distinct host, required stream separation, and unsubscribe headers/footer handling. That’s the useful purchase boundary.
API/SMTP Basic costs $15/month for 10,000 emails; Email Marketing and Sandbox are sold separately. Check the account’s overage behavior before a large campaign: the pricing page describes capped overages and also documents monthly-limit errors. A sandbox allowance never substitutes for production sending capacity.
15. SendPulse: programmatic campaigns in an existing marketing stack
Already using SendPulse’s lists and templates? Its campaign API lets your backend trigger that existing workflow, subject to a four-per-hour campaign-creation limit. The separate SMTP allowance is 12,000 emails/month free, capped at 50/hour. It isn’t a newsletter quote. Choose the campaign product for newsletters; choose another transport-first candidate when maintaining SendPulse audience state adds no value.
16. SMTP.com: managed relay for sustained sending
SMTP.com Essential buys 50,000 emails for $25/month on a shared IP, with a JSON REST API. Starter is $80/month for 100,000 with a dedicated IP; optional managed features add cost. Compare it when sustained relay sending and delivery support are the requirement. Its anti-spam policy requires documented consent and closed-loop confirmation, so it isn’t a cold-email relay.
17. AhaSend: EU data storage with explicit marketing configuration
For an EU-storage requirement, AhaSend documents EU-stored message data and 100 personalized recipients/request. Marketing configuration is mandatory: its terms allow API/SMTP newsletters from a Marketing-configured domain, or campaigns through Campaign Builder. Neither path permits cold email. The free allowance is 1,000/month; paid plans include volume and overage, with numeric paid prices unverified here. Assess the storage requirement and domain setup before price-shopping.
18. Plunk: send-priced hosted campaigns with a self-hosting option
Plunk fits developers who want contacts, segments, and broadcasts without a contact-priced hosted plan. Its campaign documentation describes asynchronous audience fan-out, scheduling, cancellation, and statistics. Marketing campaigns skip unsubscribed contacts; transactional campaign semantics differ and aren’t a newsletter workaround.
Hosted pricing is 1,000 free emails/month or a paid plan at $0.001/email, without a base fee or contact charge. Don’t assume a free-allowance deduction on the paid meter. Frequent newsletters can cost differently here than on a contact-priced platform. Self-hosting makes sense for control, but still requires transport, hosting, and operations.
19. Customer.io: lifecycle orchestration rather than bare transport
Buy Customer.io when audience logic and follow-up journeys would otherwise become application features. Its API-triggered broadcasts target saved segments or supplied audience data, but people must already exist in the workspace. Triggers need ten-second spacing, with five queued at most for one definition. This is orchestration over customer state, not an arbitrary-address transport endpoint.
Essentials starts at $100/month, including 5,000 profiles and one million emails. Profiles include people and objects. An account or other object can therefore affect the bill even though it receives no email. Compare expected profile growth and the workflow code you’re replacing; the included million sends alone don’t establish a low total cost. For a simple notification queue, transport is the more proportionate purchase.
Low-volume and high-volume pricing produce different shortlists
At low volume, daily caps and minimum subscriptions matter more than marginal send prices. An assumed 1,000-message monthly workload spread over a month differs from a 1,000-recipient newsletter sent at once. A free monthly allowance doesn’t establish that the burst is allowed. Include inbound traffic wherever the plan shares its quota.
At high volume, compare the same workload: monthly recipient sends, contact/profile count, frequency, burst requirement, retention, and IP needs. For a hypothetical million outbound emails, SES’s rates produce $100 à la carte or $160 Essentials in the first tier, before data and extras. Plunk’s paid rate produces $1,000. These are arithmetic illustrations, not equivalent-feature quotes or delivery benchmarks.
When a managed API isn’t the right purchase
Choose a self-hosted campaign application when audience ownership, approval workflows, or custom segmentation matter more than outsourcing the application. Listmonk versus Keila and the best open-source bulk email tools compare that layer. You may still pair it with hosted transport. Running the application and running the mail delivery network are separate commitments.
A conventional marketing platform is usually the better purchase when nobody wants to maintain sending code. A lifecycle platform earns its higher base fee when event-driven journeys replace real application work. For engineering the remaining workflow, the bulk email reference and programmatic newsletters cover the practical boundaries.
Finally, API acceptance isn’t delivery, and delivery isn’t inbox placement. A message ID records progress through the sender; receiving-server acceptance still doesn’t tell you whether the message landed in spam. Compare per-recipient errors, suppression handling, and delivery events before choosing a provider. This article uses documentation, pricing, and policy evidence only; it makes no installed-test, throughput, or inbox-performance claim.
Source check: all linked vendor sources were retrieved 2026-10-14. Prices and account entitlements can change; recheck the shortlisted providers before purchase. Refresh this comparison by 2026-11-13, especially the unresolved prices and API-generation boundaries.