Migrate › Resend

Move from Resend to Relayly

For teams that loved the quickstart but hit a wall on EU residency, marketing automations, or SMTP relay. Migration takes ~30 minutes for a typical Resend customer.

Why teams leave Resend

What carries across

Resend conceptRelayly equivalentAuto-migrates?
AudienceslistsYes — name preservation + member counts.
ContactscontactsYes — including custom fields.
DomainsdomainsManual re-verify (DKIM keys are issued per-account, can't cross providers).
Email templatesemail_templatesReact Email renders to HTML; we accept HTML directly. No code change needed.
API keysAPI keysManual recreate (security best practice).
WebhooksWebhooksUpdate 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

  1. Run the export script. It's read-only against Resend and re-runnable.
  2. Review the manifest. Anything flagged as "needs review" gets a copy-paste remediation snippet.
  3. Apply to Relayly. Idempotent SQL + REST imports. Re-run safely.
  4. Dual-send for a week. Compare inbox rates at Gmail / O365 / Yahoo through the dashboard.
  5. Flip the API key. Search-and-replace your codebase, deploy, monitor 24h.
  6. Pause Resend. Don't delete the account — keep it for 30 days as an unsubscribe-list reciprocity reference.
  7. After 30 quiet days, terminate Resend. You're done.

Pricing-side check

VolumeResendRelaylyAnnual 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 residencyNot available$100/moEU 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