Mailgun vs Amazon SES: monthly bills from 10,000 to 500,000 emails, and the work SES leaves to you
At 50,000 transactional emails a month, Amazon SES Essentials costs $8.00 and Mailgun Foundation costs $35. At 500,000 the figures are $80 and $400. From 50,000 emails up, SES's bill is between 18% and 23% of Mailgun's in the table below, and in exchange you build the event pipeline, bounce handling and reporting that Mailgun ships. A SaaS team with an engineer to spare saves real money on SES; a team without one pays Mailgun for the time.
By Julian Pryor · Updated 7 Oct 2026
Short answer
Pick Amazon SES if you already run on AWS, your volume passes 100,000 emails a month, and an engineer can own bounce, complaint and event handling. Pick Mailgun if you want webhooks, logs, inbound routing and email validation behind one dashboard and a support plan, and the $27 to $320 a month premium at 50,000 to 500,000 emails is smaller than the engineering time you would spend.
Monthly cost at five volumes
Prices were read from Mailgun's and AWS's pricing pages on 7 October 2026. SES is priced per 1,000 emails, so each cell is the volume divided by 1,000 and multiplied by the rate. Mailgun is a plan plus overage, read at the slider stop for each volume.
| Emails per month | SES Essentials ($0.16 per 1,000) | SES à la carte ($0.10 per 1,000) | Mailgun plan | Mailgun minus SES Essentials |
|---|---|---|---|---|
| 10,000 | $1.60 | $1.00 | Basic, $15 | $13.40 |
| 50,000 | $8.00 | $5.00 | Foundation, $35 | $27.00 |
| 100,000 | $16.00 | $10.00 | Foundation $75 or Scale $90 | $59.00 or $74.00 |
| 250,000 | $40.00 | $25.00 | Scale, $215 | $175.00 |
| 500,000 | $80.00 | $50.00 | Scale, $400 | $320.00 |
AWS prints the 250,000 case itself as 250,000 × $0.16 / 1,000 = $40.00, which matches the row. Over a year, the 500,000-email gap is $320 times twelve, or $3,840. SES's Pro plan is a different animal: $0.22 per 1,000 plus $105 per account per region per month, so 500,000 emails cost $105 plus $110, or $215, which is the price of Mailgun Scale at half the volume. Pro only pays off if you need what AWS reserves for it. A caution on attachments: SES charges $0.12 per GB of attachment data on top, so a product that emails PDF invoices should add that line.
Dedicated IPs: two costs, one decision
A dedicated IP matters once your volume is high and steady enough to keep its reputation warm. Mailgun includes one with Foundation 100k, Growth and Scale and charges $59 a month for each IP beyond that, added from its control panel or through support. SES lists a standard dedicated IP on its à-la-carte pricing at $24.95 a month per IP. For two IPs at 100,000 emails a month, Mailgun Scale is $90 plus $59, or $149, while SES à la carte is $10.00 of sending plus 2 × $24.95 = $49.90, or $59.90, a gap of $89.10 a month. Mailgun's Scale plan also lists dedicated IP pools and 5,000 email validations in its card, which an SES setup would replace with your own tooling.
What Mailgun ships that you build on SES
| Job | Mailgun | Amazon SES |
|---|---|---|
| Event delivery to your app | Webhooks for accepted, delivered, temporary_fail, permanent_fail, opened, clicked, unsubscribed and complained; HMAC-SHA256 of timestamp plus token; retries at 5 min, 10 min, 15 min, 1 h, 2 h and 4 h | Event publishing through a configuration set to SNS, EventBridge, CloudWatch or Firehose; you provide the HTTPS receiver and verify its messages |
| Bounces and complaints | Bounce classification is listed on every plan, and failures arrive as permanent_fail and complained events | AWS says you must have a system in place for managing bounces and complaints |
| Log search | 1 day on Free and Basic, 5 days on Foundation, 30 days on Scale | Whatever you store from published events |
| New-account limits | Free plan: 100 emails a day | Sandbox: 200 messages per 24 hours, 1 per second, verified recipients only, until production access is granted |
| Tagging | Not covered on the pages read for this comparison | Message tags (name and value pairs) plus automatic tags such as the configuration set and sending IP |
| Validation | Included on Scale (5,000), then $0.80 per 100; $1.20 per 100 on Basic and Foundation | Not part of the sending price |
Mailgun's retries end after eight hours and stop early on a 200 or a 406 reply, so a webhook endpoint that is down overnight can lose data after the window closes. SES's cost is the engineering list that follows from AWS's own advice: a published-events destination, an endpoint that processes bounces and complaints so you stop mailing them, and a store for the events you want to search later.
SaaS email jobs and where each one sits
For a billing-aware product the transactional jobs are fixed: a receipt after Stripe's invoice.paid, a card-update email after invoice.payment_failed, a trial-ending reminder, a cancellation confirmation. Stripe can send some of these itself, so decide which system owns each message before you wire a second sender. Either provider here only sends what your code tells it to; the template, the trigger and the retry logic all live in your backend. The difference is the feedback loop: on Mailgun a hard bounce arrives as a signed permanent_fail event you can match to a user, and on SES the same signal arrives through whichever destination you configured. Tag dunning, receipts and product mail separately, which SES supports with message tags, so a rising complaint rate can be traced to one kind of message.
Moving from Mailgun to SES
- Verify your sending domain in SES and request production access early, since the sandbox allows 200 messages per 24 hours.
- Build the event path first: configuration set, destination, receiver, suppression of bounced and complained addresses.
- Move one low-risk message type, such as a weekly digest, and watch its bounce and complaint rates for a week.
- Shift receipts and dunning last, and keep Mailgun's domain records and webhooks live until the final cutover is quiet.
Which to choose
- Mailgun Basic or Foundation at 10,000 to 50,000 emails, where $15 to $35 is small against an engineer's hour.
- Amazon SES Essentials from 100,000 emails up, or earlier for any team already operating on AWS.
- Mailgun Scale if you need 30-day logs, SAML SSO and dedicated IP pools in a managed product.
- SES with a managed layer only when someone owns deliverability; the sending price alone does not tell you what it costs to run.
Related reading: Postmark vs Mailgun, Resend vs Amazon SES, SendGrid vs Amazon SES, Mailgun vs SparkPost and the comparison index.
Mailgun vs Amazon SES: common questions
How much cheaper is Amazon SES than Mailgun?
On the listed prices, SES Essentials costs $0.16 per 1,000 emails, so 50,000 emails is $8.00 and 500,000 is $80.00. Mailgun Foundation is $35 at 50,000 emails and Scale is $400 at 500,000, which is $27 and $320 a month more. The difference buys Mailgun's dashboard, log retention, support tiers and webhook tooling, none of which SES bundles in the same form.
Does Mailgun or SES have the cheaper dedicated IP?
SES lists a standard dedicated IP at $24.95 a month per IP on its à-la-carte pricing. Mailgun includes one dedicated IP with Foundation 100k, Growth and Scale, and charges $59 a month per additional IP. A second IP is therefore $24.95 on SES and $59 on Mailgun.
What stops a new SES account from sending to my customers?
The sandbox. AWS places every new account in it: you can send only to verified addresses and domains, 200 messages per 24 hours, and 1 message per second, until you request production access in the console. AWS says its initial response comes within 24 hours.
How do I get delivery and bounce events back into my app?
Mailgun posts JSON webhooks for accepted, delivered, temporary_fail, permanent_fail, opened, clicked, unsubscribed and complained, signed with HMAC-SHA256, and retries over eight hours. SES publishes events through a configuration set to SNS, EventBridge, CloudWatch or Firehose, so you build the receiving endpoint and the bounce handling yourself.