# Migrate from Resend to Amazon SES

Source: https://wraps.dev/migrate/resend

Resend sends through SES. That single fact makes this the easiest migration on the site — the SPF record often needs no change at all, and React Email templates move without an edit.

It also means the honest opening is a warning: under roughly a hundred thousand emails a month, Resend is usually the cheaper answer once a platform fee is in the comparison. Check that before you read any further.

[Check the crossover](https://wraps.dev/tools/ses-calculator)[Resend vs Wraps, side by side](https://wraps.dev/compare/resend-vs-wraps)

## Should you move at all

Find your row. Two of the seven say stay, and we mean them.

| Where you are | The answer |
| --- | --- |
| Under about 100,000 a month and happy | Stay. Resend is priced for this band and the migration will not repay itself. |
| Well past 100,000 a month | Worth pricing. The per-thousand gap compounds and the platform fee stops moving. |
| You need history older than a month | Worth moving. Logs are purged at 30 days on every non-Enterprise plan. |
| You hit the 2 requests per second cap | Worth moving. That cap applies on every tier; SES throughput rises with your own reputation. |
| A suspension during a traffic spike would be fatal | Worth moving. In your own account, throttling is an AWS quota conversation rather than a vendor decision. |
| You are paying separately for marketing contacts | Worth pricing. Contact-based billing is a second line item that raw SES does not have. |
| Nobody wants to own an AWS account | Stay. That ownership is the whole trade you would be making. |

Resend is a good product and it is aimed squarely at teams sending modest volume from a small codebase. If that is you, this page is not for you yet.

## The migration, in order

Five steps, one of them irreversible. Everything else can be undone by putting the old key back.

1.  1
    
    ### Export the logs, because they expire
    
    Logs are purged at thirty days on every plan below Enterprise, so whatever history you want to keep has to come out before you go quiet. The dashboard exports directly under a thousand rows and emails a download link above that, valid for a week. Audiences export as CSV separately. This is the only irreversible step on the page.
    
2.  2
    
    ### Verify your own SES identity and request production access
    
    You are already sending through SES; you are just doing it through Resend's account. Verifying in your own account gives you a fresh set of DKIM CNAMEs, and a sandbox to get out of. File the production access request the day you verify. Our [sandbox guide](https://wraps.dev/blog/ses-sandbox-guide) and [production access guide](https://wraps.dev/docs/guides/production-access) cover what AWS wants to read.
    
3.  3
    
    ### Leave SPF alone and add the DKIM records
    
    This is the part that surprises people. Resend sends through SES, so your SPF record already contains `include:amazonses.com` and usually needs no edit at all. DKIM keys are per account, so you publish the three new CNAMEs next to the Resend ones and remove the old set after cutover. DMARC is untouched. Fewer DNS moving parts than any other migration in this cluster.
    
4.  4
    
    ### Swap the client, keep the templates
    
    React Email is open source and provider-agnostic, and Wraps renders the same components, so your templates are not part of this migration. What changes is the client: an import, a key, and a send call whose shape is close enough that most codebases finish this in an afternoon. Webhook consumers need re-pointing, since SES emits its own event shape through EventBridge rather than Resend's payload.
    
5.  5
    
    ### Run in parallel, then retire the key
    
    Send a share of production through your own account for a week and compare delivery. The number to watch is your bounce rate, because it is now yours: on Resend a noisy sender is Resend's problem, and on your own account AWS measures it against you and can pause the account. When the week looks boring, revoke the Resend key and drop the old DKIM records.
    

## What you lose

Shorter than the other guides in this cluster, because you are not leaving as much behind. It is not empty.

-   A managed SES account. Quota increases, production access, and bounce-rate thresholds become your conversations with AWS.
-   Resend's shared IP pool and the reputation it carries. You start on the AWS shared pool instead.
-   The signup that just works. SES production access is an application AWS can refuse.
-   One bill. You now have an AWS bill for sending and a platform bill for everything around it.
-   Nobody watching your sending on your behalf. If your bounce rate climbs, it is your account AWS pauses.

## The published prices, side by side

### Resend

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.

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.

### Amazon SES

$0.10 per 1,000 emails on à la carte. New accounts are defaulted to the Essentials plan at $0.16 per 1,000; Pro is $105/mo + $0.22 per 1,000 and Enterprise $500/mo + $0.23 per 1,000. Plans are per-account, per-Region.

Production access is an application AWS can refuse, and new accounts start sandboxed to verified addresses. No dashboard, no templates, and nothing stores your events until you build it.

Both taken from the vendors' published pricing, verified August 2026. A comparison that ignores the platform fee on our side is a comparison designed to flatter us, so put your own numbers in the [SES calculator](https://wraps.dev/tools/ses-calculator).

## Where Wraps fits

The developer experience you liked about Resend is the thing we are trying not to lose. Same React Email components, same shape of send call, your AWS account underneath.

### What it does

-   wraps email init puts SES, EventBridge, SQS, Lambda, DynamoDB and scoped IAM roles in your AWS account
-   wraps email connect adopts an SES account you already set up, without changing it
-   React Email templates render the same way they do today
-   Delivery events land in your own account instead of expiring on a vendor's schedule

### What it does not

-   It does not make us cheaper than Resend at low volume. Below about 100,000 a month, Resend usually wins on price.
-   It does not get you production access. AWS decides, typically within 24 hours, and the answer can be no.
-   SDKs are TypeScript and Python only.
-   Contacts, templates, and workflow state live in our database, not your AWS. Sending data and delivery events are what land in your account.

Platform fee only: Free ($0/mo), Pro ($29/mo), Business ($199/mo) — priced on AWS accounts, dashboard history, and governance features, not send volume. Sending is billed by AWS directly — $0.10 per 1,000 on SES à la carte, or $0.16 on the Essentials plan new AWS accounts are defaulted to. Contacts are unlimited on every tier.

## Questions people ask before they commit

### Is Resend cheaper than running SES myself?

Below roughly 100,000 emails a month, usually yes, once you add any platform fee to the raw AWS sending cost. Resend's paid tiers are priced for exactly that band and they are hard to beat there. The crossover moves in SES's favour as volume rises, and it moves earlier if you are paying separately for marketing contacts.

### Do my React Email templates need changing?

No. React Email is an open source library, not a Resend feature, and Wraps renders the same components. This is the single biggest reason a Resend migration is shorter than a SendGrid or Postmark one.

### Does my sending reputation carry over?

The domain half does, and that is the half mailbox providers weight most heavily. What you leave behind is Resend's shared IP pool. Your own SES account starts on the AWS shared pool, which is a reasonable default for most senders, and your own bounce and complaint rates now determine what AWS lets you send.

### What are the non-price reasons to move?

Three come up repeatedly: logs purged at 30 days on every non-Enterprise plan, an API capped at 2 requests per second on all tiers, and the risk of a vendor suspending an account during a traffic spike. Sending from your own AWS account replaces all three with limits you can raise by asking AWS.

### How long does this take?

An afternoon of code, plus the production access wait — AWS usually answers within 24 hours, longer if it asks for more detail — plus a week of parallel running if you are careful. It is the shortest of the four migrations on this site, because you are already on SES underneath.

## Export the logs first

Everything else here is reversible. A thirty-day purge is not, so do that step whether or not you end up moving.

[Deploy SES with one command](https://wraps.dev/docs/quickstart/email)[Other Resend alternatives](https://wraps.dev/alternatives/resend)
