Why teams leave Resend
- No EU region. Resend is US-only as of 2026-05. Compliance teams force the migration.
- No marketing tier. Audiences exist, but no automations, segments, signup forms, or visual flows. Many teams cobble together a second tool.
- No SMTP relay. REST + React Email only. Existing apps that speak SMTP can't migrate without code changes.
- Limited deliverability tooling. No public IP × provider reputation data, no provider-aware routing, no inbox-preview integration.
What carries across
| Resend concept | Relayly equivalent | Auto-migrates? |
|---|---|---|
| Audiences | lists | Yes — name preservation + member counts. |
| Contacts | contacts | Yes — including custom fields. |
| Domains | domains | Manual re-verify (DKIM keys are issued per-account, can't cross providers). |
| Email templates | email_templates | React Email renders to HTML; we accept HTML directly. No code change needed. |
| API keys | API keys | Manual recreate (security best practice). |
| Webhooks | Webhooks | Update destination URLs; payload shape similar but namespaced (resend uses `email.delivered`, we use `email.delivered` — actually the same). |
The codebase swap
API shapes are similar enough that find/replace handles most call sites. The key differences:
// Resend Node SDK import { Resend } from "resend"; const resend = new Resend(process.env.RESEND_API_KEY); await resend.emails.send({ from: "hello@yourdomain.com", to: "user@example.com", subject: "Welcome", react: <WelcomeEmail name="Alex" />, });
// Relayly Node SDK import Relayly from "@relayly/node"; import { render } from "@react-email/render"; const r = new Relayly({ apiKey: process.env.RELAYLY_API_KEY }); await r.email.send({ from: { email: "hello@yourdomain.com" }, to: [{ email: "user@example.com" }], subject: "Welcome", html: render(<WelcomeEmail name="Alex" />), });
React Email keeps working
If you've built React Email components, they continue to work — just render them to HTML before passing to Relayly. The @react-email/render helper is a 2-line addition.
Or, even simpler: keep your component file, render it server-side at request time, and pass the resulting HTML to Relayly. That's the pattern the Resend SDK does internally — we just expose it explicitly so you control when the rendering happens.
The cutover playbook
- Run the export script. It's read-only against Resend and re-runnable.
- Review the manifest. Anything flagged as "needs review" gets a copy-paste remediation snippet.
- Apply to Relayly. Idempotent SQL + REST imports. Re-run safely.
- Dual-send for a week. Compare inbox rates at Gmail / O365 / Yahoo through the dashboard.
- Flip the API key. Search-and-replace your codebase, deploy, monitor 24h.
- Pause Resend. Don't delete the account — keep it for 30 days as an unsubscribe-list reciprocity reference.
- After 30 quiet days, terminate Resend. You're done.
Pricing-side check
| Volume | Resend | Relayly | Annual delta |
|---|---|---|---|
| 3k sends/mo | $0 (Free) | $0 (Free) | − |
| 50k sends/mo | $20/mo (Pro) | $25/mo | − $60/year |
| 100k sends/mo | $35/mo | $25/mo | + $120/year |
| 500k sends/mo, with EU residency | Not available | $100/mo | EU residency unblocked |
Resend pricing as of 2026-05 from resend.com/pricing. Below 50k/mo Resend is slightly cheaper if you don't need EU residency. Above ~80k/mo or with EU residency requirements, Relayly is the better fit.
Start the migration
Sign up free, run the export script, dual-send for a week. We'll spot you 10,000 verification sends.
Start free