All posts
19 Best Bulk Email APIs in 2026: Pricing & Limits
Gabe 22 min read

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.

Choose an email API by who owns the sending workflow Start with a permitted audience. If your application owns recipients and content, shortlist transport APIs such as SES and Mailgun. If editors own newsletters, shortlist campaign platforms such as Brevo and Mailjet. If customer events drive journeys, consider Customer.io. Compare the selected category's price and limits rather than treating all three as interchangeable. Start with the audience Permitted mail + consent for promotions Your app owns recipients? YES → transport + fan-out API SES · Mailgun · SendGrid Editors own the newsletter? YES → contacts + campaign API Brevo · Mailjet · Plunk Events drive a customer journey? YES → lifecycle orchestration Customer.io · campaign automations Then compare price, limits, and exclusions.
Read downward until a scenario matches. This is a selection map, not a performance ranking. On narrow phones, scroll sideways within the figure to keep labels readable.

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.

ProviderType and verified batch/fan-out shapePricing model and starting pointBest useMain limitation
MailKiteTransport + broadcasts; 50 personalized recipients/batch$20/month; 50,000 inbound + outbound combinedSending plus inbound repliesInbound consumes the same allowance
Amazon SESTransport; templated bulk API, account/region quotasÀ la carte $0.10/1,000; Essentials $0.16/1,000 at first tierCost-sensitive infrastructureCampaign operations need assembly
SendGridTransport + separate campaigns; 1,000 personalization objects/requestVolume subscription; numeric start unverifiedExisting SendGrid integrationsCampaign product billed separately
MailgunTransport; 1,000 recipients/batch with recipient variablesBasic $15/month; 10,000 emailsPersonalized transport fan-outBasic has one sending domain
ResendTransport + broadcasts + inbound; 100 emails/batch$20/month for 50,000 API emails; marketing from $40/5,000 contactsDeveloper-owned content and repliesInbound uses transactional quota; batch attachments unsupported
BrevoCampaign + transactional; 1,000 versions, 2,000 total recipients/requestStarter base $9/month; volume/add-ons affect totalShared marketing and app messagingBatch endpoint is transactional
MailjetCampaign + transport; ordered Messages array, ceiling unverifiedStarter $9/month; 8,000 emails, 2,000 contactsEditor/developer collaborationLogo removal starts on Essential
Elastic EmailTransport + separate marketing; bulk merge API, ceiling unverifiedAPI Starter $19/month; 50,000 emailsBudgeted application sendingWebhooks/inbound move to Pro
MailerSendTransport; 500 email objects/bulk request on listed paid plansHobby $7/month; 5,000 emailsAsynchronous notification batchesRate limits and deferred validation
PostmarkTransport + Broadcast Streams; 500 messages/batch, 50 MBBasic $15/month; 10,000 emailsSeparate transactional/broadcast trafficDefault stream is transactional
SMTP2GORelay + API; To array up to 100, not personalized message objectsStarter $10/month; 10,000 emails (body; title conflicts)Existing SMTP-centric applicationsAudience workflow stays elsewhere
SocketLabsHosted transport + reporting; injection API ceiling unverifiedCore $39.95/month; 40,000 emails after trialDelivery operations and reportingAdvanced analytics aren’t all Core
Bird / SparkPostTransport + campaigns; SparkPost transmissions or Bird broadcastsBird Startup $15/month; 50,000 emailsBird adoption or SparkPost migration reviewAPI-generation differences
MailtrapTransport + separate marketing; Bulk Stream, ceiling unverifiedAPI Basic $15/month; 10,000 emailsStream-separated production mailSandbox is a separate product
SendPulseCampaign API + SMTP service; campaign creation limit 4/hourSMTP free 12,000/month, 50/hour; paid local-currency quoteExisting SendPulse campaign usersSMTP and campaign quotas differ
SMTP.comHosted relay + API; request ceiling unverifiedEssential $25/month; 50,000 emailsManaged relay at sustained volumeDedicated IP starts above Essential
AhaSendTransport + campaigns; 100 personalized recipients/requestFree 1,000/month; paid included-volume plans, price unverifiedEU-stored message dataMarketing-domain configuration required
PlunkHosted campaigns + transport; audience fan-out, ceiling unverifiedFree 1,000/month; paid $0.001/email, no base feeSend-priced newsletters and workflowsSelf-hosting still needs transport
Customer.ioLifecycle; API-triggered broadcast, 10-second trigger spacingEssentials $100/month; 5,000 profiles and 1 million emailsBehavioral journeysProfile 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:

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.

Compare the bill only after the workload passes each gate If the traffic is unsolicited, stop: endpoint access does not establish permission. For permitted mail, if the burst exceeds a daily or account limit, reject that plan or obtain a verified limit increase. If the audience is stored by the vendor, include contacts or profiles in pricing; otherwise price recipient sends. Add workflow labor, retention, inbound mail, and optional IP costs before comparing totals. Is this traffic permitted? NO → stop, don't change endpoints YES → check sending capacity Does the burst fit the quota? NO → reject plan or verify increase YES → identify the billing unit Does the vendor store the audience? YES → count contacts / profiles too NO → price recipient sends + your app Now compare the total Plan + overage + required add-ons Include workflow labor and inbound use A batch size is not a delivery-rate promise.
Cost decision map: eligibility and burst capacity can eliminate a cheap plan before its monthly price matters. On narrow phones, scroll sideways within the figure.

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.

Discuss this post: Hacker News Share on X Share on LinkedIn

Related posts