Migration guide
Migrate from Resend to your own Amazon SES
This is the closest migration SendOps supports. If you author in React Email, your templates port nearly as-is — SendOps compiles the same TSX to SES-native Handlebars. What changes is the economics: per-email and per-contact meters become flat plans plus SES delivery at $0.10 per 1,000 emails, on infrastructure you own.
Before you start
What moves easily, and what's rebuilt
Resend and SendOps share more DNA than any other pair on this site: both are API-first, both author email in React Email, both treat developers as the primary user. That's why templates — usually the most painful part of an email migration — are the easy part here. The honest list of what's rebuilt rather than imported: audiences become SendQL segments, and broadcasts and automations become SendFlow workflows. Both are text formats, so the rebuild is quick and a coding agent can draft it.
The two real changes are infrastructural. Your domains get re-verified in SES — DKIM records change, new CNAMEs — and you move from Resend's shared IP pools to your own SES reputation, which needs a warm-up ramp. In return, delivery runs in your AWS account at SES rates. See the full Resend comparison and how SendOps turns SES into a marketing platform.
Concept mapping
Where every Resend concept lands
The two models are close relatives — most rows map one to one.
| Resend | SendOps | Notes |
|---|---|---|
| Contacts & audiences | Contacts with typed attributes | Export as CSV or push via the API. Audience membership becomes an attribute or a SendQL segment. |
| React Email templates | React Email authoring | The near-free part: SendOps authors in React Email too, compiled to SES-native Handlebars. Your TSX ports nearly as-is. |
| Broadcasts | Broadcasts | Same concept — one-off sends to a segment, with consent filtering, test sends, and per-broadcast results. |
| Automations & code-driven sequences | SendFlow workflows | Rebuilt as drip workflows in a text DSL with a visual canvas — triggers, waits, branches, frequency caps. |
| Domains | SES verified identities | Re-verified in SES with new DKIM CNAME records — the one piece of unavoidable DNS work. |
| Events & webhooks | Activity API + deliverability analytics | Push product events into SendOps for segments and workflow triggers; delivery, bounce, and complaint analytics are built in. |
The migration path
Seven honest steps — no magic importer
There's no one-click Resend importer, from us or anyone. What there is: templates that port nearly as-is, a CSV or API contact import, and text-based segment and workflow formats that make the rebuilds fast. Run both platforms in parallel during the switch — nothing here requires a hard cutover.
- 1
Get SES production access in your AWS account
SendOps sends through your own Amazon SES, so you need an AWS account with SES out of the sandbox. SendOps automates the production access request, but AWS approval can take a day or two — start it first. Our SES setup guide covers the whole process. Amazon SES setup guide .
- 2
Provision SendOps via CloudFormation
Run the CloudFormation template — about two minutes. SendOps is provisioned inside your AWS account, picks up any existing SES configuration non-destructively, and never holds your AWS keys: access works through STS and a scoped IAM role you control.
- 3
Re-verify your domains in SES
Your DKIM records currently point at Resend; SES issues its own CNAMEs. Add the new records alongside the old ones, wait for SES verification to complete, and keep Resend sending in the meantime — there's no gap if you overlap the two.
- 4
Move your contacts
Export contacts and audiences from Resend as CSV and import them, or push them through the SendOps API. Contact properties become typed attributes; audience membership becomes an attribute you can segment on in SendQL. How contacts and segments work .
- 5
Port your React Email templates
If you authored in React Email, this step is nearly free: SendOps uses React Email for authoring and compiles your TSX to SES-native Handlebars. Swap Resend prop wiring for SendOps contact attributes and send a test. Templates written as raw HTML port as Handlebars instead.
- 6
Rebuild broadcasts and automations in SendFlow
Scheduled broadcasts are recreated as SendOps broadcasts. Anything sequential — onboarding sequences, cron-driven sends, code that chains emails off webhooks — is rebuilt as SendFlow workflows: a text DSL with a visual canvas, honest rebuild rather than import, made fast because a coding agent can draft the definitions from your existing code. SendFlow workflows .
- 7
Warm up your SES reputation, then cut over
On Resend you sent from shared IPs backed by Resend's pooled reputation; on SES you build your own. Ramp volume gradually, starting with engaged recipients, while watching bounce and complaint rates in SendOps. Once the ramp is done, point your application's sends at the SendOps API and close the Resend account.
The win
What you get on the other side
For most Resend setups this migration is a few evenings of work — the templates carry, and the rebuilds are small. What changes permanently:
-
Flat pricing instead of two meters: Resend bills per email sent and per contact stored. SendOps is Free at $0 with unlimited volume and no contact limits, Team at $29/mo, Business at $149/mo.
-
Delivery at SES cost: $0.10 per 1,000 emails, billed directly by AWS — about $10 per 100,000 emails.
-
A real marketing layer: SendQL segments, SendFlow drip workflows, topics and consent with branded unsubscribe pages, and deliverability analytics — on top of the API-first sending you already have.
-
Your infrastructure: SendOps runs in your AWS account via CloudFormation, STS-only, and your sending reputation is an asset you own rather than a pool you share.
-
Same authoring workflow: React Email in, SES-native Handlebars out — you don't give up the developer experience that brought you to Resend.
Common questions
Do my React Email templates work in SendOps?
Nearly as-is — this is the easiest part of the migration. SendOps uses React Email for authoring and compiles your TSX templates to SES-native Handlebars, so templates you wrote for Resend move over with little more than swapping prop wiring for SendOps contact attributes. This is the closest migration we support.
Do I have to re-verify my domains?
Yes. Your domains were verified with Resend, and SES needs its own verification — new DKIM CNAME records from the SES console replace the ones Resend gave you. Add the SES records, wait for verification, and keep Resend live until it completes so nothing bounces during DNS propagation.
Is there an automated importer from Resend?
No, and we won't pretend otherwise. Contacts move via CSV export or an API push, and React Email templates port nearly as-is — but broadcasts, audiences-as-segments, and any automation are rebuilt in SendQL and SendFlow. The text-based formats make the rebuild fast, and a coding agent can draft the SendFlow definitions for you to review.
How does pricing compare to Resend?
Resend meters both emails sent and contacts stored, and the meters compound as you grow. SendOps is flat — Free at $0 with unlimited volume and no contact limits, Team at $29/mo, Business at $149/mo — plus SES delivery at $0.10 per 1,000 emails, billed directly by AWS. At 100,000 emails a month, delivery costs about $10.
Keep the React Email workflow. Own the infrastructure.
Provision SendOps in your AWS account, port a template, and send a test this afternoon — the free plan has unlimited volume and no contact limits, so you can migrate at your own pace with Resend still running.
Free plan available. Two-minute CloudFormation setup. Delivery runs in your SES account.