# Mailgun vs Resend

Source: https://wraps.dev/versus/mailgun-vs-resend

Fifteen years of routing, validation and log search against four years of getting one developer to a sent email faster than anyone else. The gap between them is capability against ergonomics, and which of those is scarce for you.

This comparison usually starts with a Mailgun invoice that changed and a Resend demo that looked delightful, which is a bad way to choose infrastructure because it weighs the two most visible attributes and ignores the rest. Mailgun is a broad platform: it receives mail as well as sending it, validates addresses before you burn a bounce on them, and lets you search a year of logs from a console. Resend is narrow and excellent inside that narrowness. Whether the missing breadth matters is a question about your product, not about either vendor's taste.

## At a glance

|   | Mailgun | Resend |
| --- | --- | --- |
| What it is | High-volume email API with routing and validation | Developer-first email API built on SES |
| Published pricing | Basic $15 at 10K. Foundation $35 at 50K and $75 at 100K. Scale $90 at 100K rising to $400 at 500K. Dedicated IP included from the $75/mo plans; extra IPs $59/mo each. | Free 3,000/mo (100/day). Pro $20 at 50K and $35 at 100K. Scale starts at $90 for the same 100K and runs to $350 at 500K. Overage $0.65–0.90 per 1,000. Marketing contacts billed separately at $40/mo per 5,000. |
| Best for | High-volume sending where routing, validation, and log search need to come from one vendor. | The fastest path from an empty project to a sent email, especially with React Email. |
| Watch out for | Flex closed to new signups in December 2025 and the legacy rate doubled to $2 per 1,000. The free tier is a hard 100/day cap, and suspensions recur in reviews. | Logs are purged at 30 days on every non-Enterprise plan, the API is capped at 2 requests per second on all tiers, and suspension during traffic spikes is the complaint that recurs in its public reviews. |

Prices are each vendor's published list prices, verified August 2026. Check the vendor's own page before you sign anything.

## Where they actually differ

### Inbound mail, which only one of them does

Mailgun

Routes match on recipient, sender or header using an expression syntax, then forward to a URL, an address or storage, with the message already parsed into fields. If your product has replies, ticket ingestion, per-customer addresses or anything else where mail arrives rather than leaves, this is a whole subsystem you get for free, and it is the single largest capability gap on this page.

Resend

Resend does not do inbound. That is a deliberate scope decision rather than an oversight, and the usual workaround is a second service in front — Cloudflare Email Routing into a Worker, a Postmark inbound stream, an SES receipt rule — which means a second vendor, a second set of credentials and a seam where replies and sends do not share a view of the conversation.

### Address validation before the bounce happens

Mailgun

Validation is a product here: syntax, domain and mailbox-level checks callable at signup rather than at send. For anything with a self-serve registration form this measurably lowers your bounce rate, which is the metric that gets accounts suspended across the entire industry. Buying it from the same vendor that sends the mail also means the suppression and the validation share a view of an address.

Resend

Nothing equivalent. You are expected to keep your list clean by other means, which in practice means a third-party validation API or a syntax check you write. This is fine for a product with invited users and genuinely risky for one with an open signup form, because the first sign of trouble is usually a warning email about bounce rate rather than a dashboard number you were watching.

### Finding a message six months later

Mailgun

Log search is in the console with retention that widens as the plan does, and it shows the receiving server's actual SMTP response — which is the field that resolves an argument about whether a message was delivered or merely accepted. A support agent can use it without an engineer. The limit is that the retention is a plan feature and the history leaves with you only if you exported it.

Resend

Thirty days on every plan short of Enterprise, in a log view designed for debugging an integration rather than for answering questions about last quarter. The view itself is clean and fast. The window is the problem, and it is not a problem you notice during evaluation, because during evaluation everything you want to look at happened this week.

### The throughput ceiling

Mailgun

Mailgun's constraint is the plan's included volume rather than a request rate, so a burst costs money rather than time. Batch sending is ordinary and the API expects it. For a nightly digest to a large list this is simply not a design consideration, which is a quiet luxury that only becomes visible when you compare against something that caps you.

Resend

Two API requests per second on every tier, and no plan lifts it. Batch endpoints that take several recipients per call stretch this considerably, but any architecture that loops over a list making individual calls will meet the ceiling immediately and permanently. This is the most consequential single fact about Resend for anyone whose traffic is not purely request-response, and it is not on the pricing page.

### Templates and the developer experience gap

Mailgun

Handlebars-style templates stored in the vendor, plus a drag-and-drop builder, plus the option of sending finished HTML. It works and nobody enjoys it. The templates live outside version control unless you build a sync, so a change is not reviewable the way code is, and reproducing a production template locally is more effort than it should be.

Resend

React Email, first-party and genuinely good, with templates as components in your repository going through the same review as anything else. This is the clearest quality win Resend has and it is why most of these migrations get proposed. Worth knowing before you count it as a reason to switch: React Email renders to plain HTML and works perfectly well with Mailgun, so you can have this half without the migration.

### Price, and what changed in December 2025

Mailgun

The Flex pay-as-you-go plan closed to new signups in December 2025 and the legacy rate doubled, which is why a great many teams are running this comparison at all. New customers start on the plan ladder, with dedicated addresses included from the middle tiers. The lesson generalises past this vendor: a hosted plan's price is set by the vendor on the vendor's schedule, and the customer's only lever is migration.

Resend

Two plan ladders that price the same volume differently depending which you are on, plus marketing contacts billed separately from sends. That last item is the one that surprises people, because a growing list raises the bill in a month you sent nothing to it. Cheaper than Mailgun at small volume, and the gap narrows as contacts accumulate.

### Who runs it and what that implies

Mailgun

Sinch, following an acquisition, alongside a portfolio of other messaging brands. The product is mature and thoroughly documented; the risk is the usual one for an acquired platform, which is that investment tracks the parent's priorities rather than yours. The repricing is the sort of event that follows from that, and it is the reason to read the pricing page rather than a two-year-old comparison.

Resend

An independent company four years old, sending through Amazon SES underneath, growing quickly. The upside is obvious in the product. The risks are the ones any young vendor carries — a smaller operations team, less history behind the sending reputation, and a suspension policy that leans conservative during spikes because protecting the shared pool is the correct call for everyone except you.

### European deployment

Mailgun

A European region has existed for years, selected per domain, with its own API endpoint. It covers the ordinary GDPR requirement cleanly. The endpoint split is a small but real trap: verify a domain in one region and call the other for a week and nothing will work in a way the error messages do not explain.

Resend

Resend's data handling is documented and its subprocessors are published, which is enough for most buyers, but there is no equivalent of picking a region and having mail stay inside it. If your requirement is written as a residency clause rather than as a preference, this is the dimension that ends the comparison rather than informing it.

## Pros and cons, side by side

### Mailgun

Strengths

-   Inbound routing is a whole subsystem arriving for free: expression matching on recipient, sender or header, with the message already broken into fields your endpoint can read.
-   Validation is callable at the registration form, which lowers the bounce rate that gets accounts paused before any bounce has actually happened.
-   Log search surfaces the receiving server's own SMTP response and reaches back as far as the plan allows, which is what makes a support agent self-sufficient rather than a queue for engineering.
-   The binding constraint is the plan's included volume rather than a request rate, so a burst costs money and completes instead of draining over several hours.

Trade-offs

-   Flex closed to new signups in December 2025 and the legacy pay-as-you-go rate doubled, which is the event that put most people on this page and the reason a remembered figure is now wrong.
-   Templates sit in the vendor rather than in version control unless somebody builds a sync, so a change is not reviewable and reproducing production locally is harder than it should be.
-   Retention, dedicated addresses and support latency are all plan features, so a downgrade silently removes capability the team had come to rely on.
-   Investment follows an acquiring group's portfolio, which is a slower kind of risk than a bad quarter and considerably harder to plan around.

### Resend

Strengths

-   React Email is the clearest quality win on this page: components in the repository, reviewed alongside everything else, rendering to HTML that any provider will accept.
-   The integration is genuinely done the same afternoon, with domain verification completing inside the time DNS takes to propagate.
-   A permanent free allowance, which is what turns a staging environment or a prototype into something that does not appear on an invoice at all.
-   Cheaper at small volume, and the product surface is small enough that nothing in the first hour requires a decision you are unqualified to make.

Trade-offs

-   There is no inbound, so replies mean a second service in front and a seam where a sent message and the answer to it are tracked in different systems.
-   No validation product either, which on an open signup form leaves a third-party API, a check you write, or a bounce rate you are gambling with.
-   Two API requests per second on every tier, which is an architectural constraint rather than a commercial one and therefore not something money removes.
-   No named region to satisfy a residency clause, and thirty days of retention on everything short of Enterprise.

## Pick in thirty seconds

### Choose Mailgun if

-   Your product receives mail as well as sending it, and running a second vendor for inbound would split the conversation across two systems.
-   An open signup form makes address validation a bounce-rate control rather than a nicety.
-   Support needs to search logs far enough back to answer a question about last quarter, with the receiving server's response visible.
-   A written data residency requirement needs a named region rather than a documented policy.

### Choose Resend if

-   Mail is triggered by user actions from your own codebase, comfortably under two API calls a second, and nothing in the system is batch-shaped.
-   Templates as reviewable components in the repository is worth more to the team than any capability on the other side of this page.
-   Volume is small enough that the cheaper plan and the permanent free allowance genuinely change the monthly number.
-   You want the integration finished this afternoon and are willing to add a second service later if inbound ever becomes a requirement.

## What actually moves when you switch

In roughly the order you would do it. The expensive parts of an email migration are never the send call.

1.  Count what you actually use inbound for before anything else, because there is none on the other side. Reply handling, ticket ingestion, per-customer addresses and catch-all forwarding each need a named replacement — Cloudflare Email Routing, an SES receipt rule, or keeping a minimal account open purely for Routes — and every answer costs a second set of credentials.
2.  Decide what happens at the signup form once validation stops. The realistic choices are a third-party validation API, a syntax and MX check of your own, or a higher bounce rate against an identity with no history to absorb it. The third is the one that gets accounts paused in the first month.
3.  Measure peak calls per second against a fixed two-per-second ceiling. Mailgun does not constrain request rate the way the destination does, so send loops written without that in mind meet the limit on the first run. Batch endpoints accepting several recipients per call are the mitigation; rewriting the loop is the work.
4.  Export the searchable history you still need while the plan's retention window is still yours. It shortens on downgrade and ends at cancellation, and the destination purges at thirty days on every plan short of Enterprise — so if anything downstream reads older records, the pipeline into your own store belongs inside this project.
5.  Pull the suppression list and the bounce record and load them before the first send. Each side keeps its own and neither hands anything to the other, so the first campaign after the cutover is exactly where an incomplete export turns into a complaint rate you cannot explain away.
6.  Move the templates out of the vendor. Handlebars-style templates are evaluated on Mailgun's side and the drag-and-drop builder emits HTML that does not want to become a component, so re-authoring is real work — and it is the part of this migration that leaves the codebase better than it found it.
7.  Replace the signature verification as well as the payload handler. Mailgun signs with a timestamp and token pair; the destination signs differently and uses a different event vocabulary, so the verification code and the field mapping are both new and both belong in the security review rather than in a follow-up ticket.
8.  Warm a new identity and keep the old one alive while you do. Mailgun's dedicated address and everything the mailbox providers learned about it stay behind, so run the destination on a subdomain with low-stakes traffic and accept several weeks of two invoices rather than compressing the ramp.

## Questions to ask before you sign

Put these to a sales rep, or find the answer in the documentation before anyone quotes you a number.

1.  Does anything in our product depend on mail arriving rather than leaving, and have we listed every one of those flows rather than the obvious ones?
2.  What is our bounce rate on self-serve signups today, and what does it become if nothing validates the address at the form?
3.  Has anybody measured peak API calls per second, or are we reasoning about throughput from a monthly total?
4.  Is our data residency requirement a written clause naming a region, or a preference somebody expressed in a meeting once?
5.  How far back does a support agent search today, and how often does that search go past thirty days?
6.  Who owns our templates — an engineer in a pull request or a marketer in a builder — and which of these two suits that person's week?
7.  If we are on grandfathered pay-as-you-go terms, what are they precisely, and is the comparison being drawn against those or against the current list?

## Common questions

### Can I use React Email with Mailgun?

Yes, and it is worth knowing before you treat React Email as a reason to migrate. The library is open source and renders components to an HTML string; nothing about it is coupled to Resend's API. You render, then hand the result to Mailgun's send call. What you lose is the integrated preview and the first-party polish, and what you keep is the part that mattered, which is that templates are reviewable code rather than rows in a vendor's database.

### Does Resend have anything like Mailgun Routes?

No. Resend sends; it does not receive. Teams that need inbound alongside it typically put Cloudflare Email Routing or an SES receipt rule in front and handle parsing themselves, or run a second provider that does inbound properly. Either way it is another system, another set of credentials and a seam where an outgoing message and the reply to it are tracked in different places, which is exactly the integration cost the single-vendor option avoids.

### Why did my Mailgun bill change?

The Flex plan closed to new signups in December 2025 and the legacy pay-as-you-go rate doubled, moving most pay-as-you-go accounts either onto the ladder or onto the new rate. If you are on grandfathered terms, confirm what they actually are before comparing anything, because a model built on the old figure will be wrong by a factor that matters. This is the most common reason people arrive at this comparison in 2026.

### Is Resend's rate limit really fixed on every plan?

Two requests per second, on every tier including the most expensive, and upgrading does not lift it. Batch endpoints that accept multiple recipients per call give you substantially more headroom than one call per message, so the practical impact depends heavily on how your code is shaped. The point to internalise is that it is architectural rather than commercial: if your traffic is batch-shaped, the queue you build is permanent.

### Which is better for deliverability?

The honest answer is that this is decided by your own sending behaviour rather than by the choice. Both run shared pools, both will deliver well for a sender with clean lists and correct authentication, and both have public complaints about suspension. Mailgun has a longer operating history and its own network; Resend rides on Amazon SES. Neither of those facts predicts your placement as strongly as your bounce rate and your engagement do.

### Can I export my Mailgun logs before I leave?

Within whatever retention your current plan gives you, yes, and outside it there is nothing to export. That window is the thing to check first, because it shortens if you downgrade and it disappears entirely when the account closes. Treat the export as a dated task with a named owner rather than a cleanup item, and while you are at it consider whether any of that history should have been landing in your own store all along — because the same question arrives again at the next vendor, with a shorter window.

### Does Resend offer a European region?

Not in the sense a residency clause means. Resend publishes its subprocessors and documents its data handling, which satisfies a great many buyers, but there is no equivalent of selecting a region and having your mail stay inside it — which Mailgun has offered for years, chosen per domain with its own API hostname. If your requirement is written down as a jurisdiction rather than expressed as a preference, this dimension ends the comparison rather than contributing to it, and it is worth establishing before anybody builds a prototype.

### How do I replace address validation after leaving Mailgun?

Three options, in descending order of how well they work. Buy a dedicated validation API and call it at the signup form, which is the closest substitute and one more contract. Write a syntax and MX check yourself, which catches obvious typos and misses disposable addresses and full mailboxes. Or accept a higher bounce rate, which is only sane if your users are invited rather than self-serve. The reason this matters more than it sounds is that bounce rate is the metric providers use to decide whether you keep sending at all.

### Which is better for an agency sending on behalf of clients?

Mailgun, on structure rather than on quality. Sending for other businesses needs per-tenant credentials, per-tenant suppression and per-tenant reporting, so that one client's list practices cannot reach another client's placement and so that a report means one customer. Mailgun's subaccount model addresses that directly. Resend's model is an account with domains and API keys, which serves one product well and leaves an agency administering a collection of separate accounts with no shared view across them.
