Resend alternatives, compared honestly
Most "Resend alternatives" pages are a list of logos with a paragraph each. This one starts from the reasons people actually leave, because if none of them apply to you the honest answer is to stay where you are.
5 min read
What Resend gets right
Credit where it is due. Resend made the modern developer email API the default shape: one endpoint, a clean SDK, React Email for templates, and domain verification that does not take a day. Everyone in this category, including us, is working in the space it defined.
If your app sends a moderate volume of transactional mail from one domain and nothing about it annoys you, switching costs more than it returns.
The five reasons people look elsewhere
Price at volume. Every provider in this category is cheap at low volume and diverges sharply above it. Nobody's pricing page is stable enough to quote in a blog post, so model your own volume on each provider's current page before you decide.
You need inbound. Receiving and replying, threading, parsing an inbound message into your app. Some providers treat this as a first-class feature and some do not have it at all.
Deliverability support when something is wrong. At a certain point you stop wanting a status page and start wanting a human who will look at your sending pattern. This is the single biggest difference between the low-cost and high-touch ends of the market, and it does not show up in a feature table.
Compliance requirements. Data residency, a signed processing agreement, HIPAA, or a specific retention policy. These are yes-or-no questions and they eliminate options quickly.
AI assistant integration. If you are building with Cursor or Claude Code, the question is not which API is nicest to read, it is which one your assistant can integrate without you correcting it. That means machine-readable docs at a stable URL and an installable skill, not a beautiful docs site.
How the options actually differ
| Provider | Shape | Strongest when | Weakest when |
|---|---|---|---|
| Resend | Developer-first API, React Email | You want the cleanest DX and modest volume | You need deep inbound or high-touch support |
| Postmark | Transactional purist, strict separation | Deliverability matters more than price | You also want to send marketing mail |
| SendGrid | Enterprise platform, marketing included | You need one vendor for everything | You want a small, legible API |
| Mailgun | API plus strong inbound routing | You parse a lot of inbound mail | You want a simple pricing model |
| Amazon SES | Raw sending infrastructure | Volume is large and you have ops capacity | You want templates, logs, and a dashboard included |
| Brevo | Marketing suite with a transactional API | Marketing and product share a team | Transactional is your only use case |
| emails.sh | Developer API with an agent-first integration path | You build with an AI assistant, or you need inbound too | You want a full marketing campaign builder |
The row most people skip is Postmark. It refuses to carry bulk marketing mail on its transactional infrastructure, and that refusal is exactly why its transactional delivery is good. The same principle applies wherever you land: transactional email versus marketing email explains why mixing the two costs you inbox placement.
What a migration actually costs
Less than people expect, if the sending code was ever centralised.
- The send call. One function, if you wrote it once. A day if every route handler has its own fetch.
- DNS. New DKIM records for the new provider, and an SPF record that includes both while you run in parallel. Do not remove the old one until you have cut over completely.
- Warm-up. If you are moving meaningful volume, ramp it. A domain that suddenly sends ten times its usual volume from a new source looks like a compromised account. The warmup calculator gives you a schedule.
- Webhooks. Bounce and complaint handling has to be reconnected, and the payload shape differs. Do not skip this: bounces, complaints, and suppression lists is what keeps your reputation intact.
- Suppression list. Export it and import it. Sending to an address that hard bounced on the old provider will bounce again on the new one, and every one of those counts against you.
Budget a day for the code and a week of parallel running. Run both providers at once, split by message type, and watch the delivery events before you turn the old one off.
A neutral test you can run yourself
Ignore the marketing and measure. Send the same message through each candidate to seed addresses at the major mailbox providers you care about, with identical content and identical authentication, and compare inbox placement. Ten messages tells you nothing; a few hundred over a week tells you something.
curl -X POST https://emails.sh/v1/emails \
-H "Authorization: Bearer $EMAILSSH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@acme.com>",
"to": ["seed@example.com"],
"subject": "Placement test 2026-07-10",
"html": "<p>Identical body across every provider under test.</p>",
"text": "Identical body across every provider under test.",
"tags": { "test": "placement" }
}'Tag the sends so you can group the results later. Content differences will swamp provider differences if you let them vary.
Where we fit
emails.sh is the same API shape as Resend with two deliberate differences: inbound is a real feature rather than a roadmap item, and every integration path is built for a coding assistant to walk. Every page is available as markdown at the same URL with .md appended, and there is an installable skill for Cursor and Claude Code.
If you are building solo, the indie hackers page has the shortest path in. If this is a company decision, the SaaS founders page covers the compliance and migration questions first. Pricing is on the pricing page rather than in this post, because a price in prose goes stale.
Questions
- Is Resend bad?
- No. It is a good product and it defined this category. The reasons to leave are specific: volume pricing, inbound requirements, compliance constraints, or wanting an integration path your AI assistant can follow without correction.
- How long does migrating a transactional email provider take?
- A day of code if your sending is centralised behind one function, plus about a week of running both providers in parallel while you watch delivery events. DNS propagation and suppression list export are the parts people forget.
- Do I need to warm up a new provider?
- If you send meaningful volume, yes. Ramp over one to two weeks rather than switching everything at once. Low-volume senders can usually cut over directly, because the mailbox providers were never seeing much from you anyway.
- Can I run two email providers at the same time?
- Yes, and it is the safest way to migrate. Split by message type, keep both in your SPF record during the overlap, and set up bounce webhooks on both before you send anything real through the new one.
Give your agent an address it can answer from.
Create an inbox