# Amazon SES vs Wraps - Everything SES Needs, Including Operations

Source: https://wraps.dev/compare/amazon-ses-vs-wraps

**Amazon SES** is the cheapest way to send email, and the only one where the account, the domain reputation and the data stay yours. If you are willing to hold an AWS account, it is the right call.

So this is not SES versus Wraps. It is raw SES versus **SES with Wraps on top**. Same service, same AWS bill, same DKIM keys. **Wraps** sets the whole surface up in one command, in your account, and then runs it day to day.

## TL;DR — The Key Differences

|  | Raw SES | SES + Wraps |
| --- | --- | --- |
| Sending service | Amazon SES | Amazon SES |
| Whose AWS account | Yours | Yours |
| Setup | Wire up SES plus the 6-8 AWS services around it | One command, non-destructive, namespaced wraps-email-\* |
| Bounce and complaint rates | CloudWatch metrics you build alarms on | Drawn against AWS's own lines, swept hourly, owners notified |
| Suppression | API calls against the SES suppression list | Wired on at deploy, browsable and clearable in the dashboard |
| Deliverability checks | Bring your own | DKIM, SPF, DMARC, MX, TLS, BIMI and blacklists, on demand |
| Per-message history | Aggregate CloudWatch metrics | A row per message, searchable |
| Source | AWS service | AGPL-3.0, self-hostable |

## Everything SES Needs, Including Operations

Most teams pick a hosted API because they do not want to deal with SES. Wraps makes dealing with it easy, in two parts. One command sets the infrastructure up in your AWS account. The control plane — the Wraps-hosted side — runs it from there.

One command sets it up

-   SES configuration set, EventBridge rules, SQS queues with a dead letter queue, a Lambda event processor and DynamoDB event history
-   Domain identity with DKIM, SPF and DMARC records, with Route 53 detected automatically when you use it
-   Account-level suppression turned on for bounces and complaints from the first send
-   CloudWatch alarms on bounce rate, complaint rate and the dead letter queue, set below AWS's own lines — on for the Production and Enterprise presets, off for Starter
-   HTTPS open and click tracking on your own domain, via ACM and CloudFront
-   IAM roles with least-privilege policies, everything namespaced wraps-email-\*
-   Pulumi state, so upgrades and wraps email destroy are one command each

The control plane runs it

-   Bounce and complaint rates drawn against AWS's own review and pause lines, swept hourly, with org owners and admins notified
-   Your 24-hour send quota with a warning line well before you reach it
-   The suppression list, browsable and clearable, instead of API calls
-   wraps email check: DKIM, SPF, DMARC, MX, MX-TLS, BIMI, RDAP and public blacklists, on demand
-   wraps email doctor and wraps email status, with named remediations rather than a red X
-   A row per message with recipient, subject, template, and delivery and open timestamps

The lines those rates are drawn against are AWS's own: it can place an account under review above a 5% bounce rate and can pause sending at 10%, and for complaints the equivalent lines are 0.1% and 0.5%. The alarms Wraps deploys sit deliberately below them — bounce warns at 2% and goes critical at 4%, complaints warn at 0.05% and go critical at 0.08% — so a drift reaches you by email or webhook, in Slack, Discord or PagerDuty, while there is still room to fix it. Raw SES publishes the numbers. Wraps draws the gap against them, every hour, without anyone opening CloudWatch.

## The Architectural Difference

Most SES alternatives replace SES with their own infrastructure. You move your DNS, warm a new reputation, rewrite your sending code, pay a per-email markup, and keep nothing if you leave.

Wraps deploys _to_ SES instead of replacing it.

Migrating SES to Resend, Postmark, SendGrid...

-   Leave your SES infrastructure behind
-   Start a new sending reputation from zero
-   Change DNS records: new DKIM, new SPF
-   Rewrite sending code against a new API
-   Pay a per-email markup, on their terms

Adding Wraps on top of SES

-   SES stays: same service, account, region
-   Same DKIM keys, SPF records, DMARC policy
-   Same sending reputation, no warm-up
-   Existing sending code keeps working
-   Same AWS bill, paid to AWS

Wraps is a wrapper over your own SES

That is the product, and the name. The repository is AGPL-3.0 with an enterprise kernel under a separate licence, and the SDKs are MIT. You can read it, fork it, or self-host the whole stack. Wraps reaches your account through an IAM role you create and can revoke, assumed for an hour at a time. No AWS access keys are stored anywhere.

The limit, stated plainly: sending and the per-event delivery history live in your AWS account, with retention you set in your own deploy config. Contacts, templates, broadcasts, workflow state and a row per message — recipient, subject, sender, template variables, delivery and open timestamps — live in the Wraps database. If that split does not work for you, self-host it.

## Pricing at Real Volumes

The per-email cost is identical either way. AWS bills you directly for sending at the same rate whether or not Wraps is in front of it, and the Wraps plan is flat — no send meter, no contact pricing. What the plan buys is the setup and the operations on top.

| Volume | SES sendingBilled by AWS, à la carte | Wraps plan | Your total |
| --- | --- | --- | --- |
| 10K/mo | $1.00 | Free | $1.00$0 plan + $1 SES |
| 50K/mo | $5.00 | Pro | $34.00$29 plan + $5 SES |
| 100K/mo | $10.00 | Pro | $39.00$29 plan + $10 SES |
| 500K/mo | $50.00 | Pro | $79.00$29 plan + $50 SES |

**SES sending** is charged by AWS at $0.10 per 1,000 emails on à la carte pricing. AWS defaults new accounts to the Essentials plan at $0.16 per 1,000, so add roughly 60% to that column if you are on it. The supporting AWS services Wraps deploys — Lambda, DynamoDB, SQS, EventBridge, CloudWatch — bill at normal AWS rates and stay small at these volumes.

**Wraps plans** are flat: Free ($0/mo), Pro ($29/mo), Business ($199/mo). They are priced on AWS accounts, dashboard history and governance features, never on send volume. [See what each plan includes](https://wraps.dev/platform#pricing)

## Detailed Feature Comparison

### Setup

| Feature | Raw SES | SES + Wraps |
| --- | --- | --- |
| Domain verification (DKIM, SPF, DMARC) | 
DNS records by hand

 | 

CLI-guided, Route 53 detected

 |
| Event pipeline (deliveries, bounces, complaints) | 

Build EventBridge + SQS + Lambda + DynamoDB

 | 

Deployed by one command

 |
| Infrastructure as code | 

Write your own, 20+ resource types

 | 

Pulumi component or the @wraps.dev/cdk construct

 |
| Runs alongside SES you already have | 

 | 

Non-destructive, nothing existing is modified

 |
| One-command teardown | 

Delete resources by hand

 | 

wraps email destroy

 |

### Day-to-day operations

| Feature | Raw SES | SES + Wraps |
| --- | --- | --- |
| Bounce and complaint rate monitoring | 
CloudWatch metrics; build the alarms yourself

 | 

Hourly sweep against AWS's lines, owners and admins notified

 |
| CloudWatch alarms in your AWS account | 

Define the metrics, alarms and SNS topics yourself

 | 

Deployed below AWS's thresholds; on for Production and Enterprise presets, off for Starter

 |
| Alert delivery | 

Wire SNS to wherever your team reads alerts

 | 

Notification email and webhooks: Slack, Discord, PagerDuty

 |
| Suppression list management | 

API calls, case-sensitive

 | 

On at deploy for bounces and complaints, browsable UI

 |
| Deliverability and blacklist audit | 

Not part of SES

 | 

wraps email check, on demand

 |
| Per-message delivery tracking | 

Aggregate CloudWatch metrics only

 | 

Event log with filtering

 |
| Sandbox and production access | 

Console request; AWS decides

 | 

Detected, explained, request linked. AWS still decides

 |
| Webhook delivery | 

Build EventBridge + Lambda + HTTP yourself

 | 

Built in, configurable from the CLI

 |

### Developer experience

| Feature | Raw SES | SES + Wraps |
| --- | --- | --- |
| TypeScript and Python SDKs | 
AWS SDK, service-specific and verbose

 | 

@wraps.dev/email and the Python client

 |
| SMTP credentials | 

IAM user and credential generation by hand

 | 

wraps email init --smtp

 |
| Open and click tracking | 

Config set + custom domain + CloudFront

 | 

HTTPS tracking domain set up for you

 |
| Template editing | 

Raw HTML templates

 | 

React Email TSX with an AI editor

 |
| Inbound email | 

Build receipt rules + S3 + Lambda yourself

 | 

wraps email inbound (S3 + MIME parser + webhooks)

 |
| MCP server for coding agents | 

 | 

Send, check status, read the event log

 |

### Ownership and team

| Feature | Raw SES | SES + Wraps |
| --- | --- | --- |
| Sending and event history live in your AWS account | 
 | 

Retention set in your own deploy config

 |
| Source you can read and fork | 

AWS service

 | 

AGPL-3.0; SDKs MIT; self-hostable

 |
| Team access | 

IAM users and roles

 | 

Organizations with roles; SSO and SCIM on Business

 |
| No vendor lock-in | 

 | 

Standard AWS resources; they keep running if you leave

 |

\= built-in or included, \= possible but requires manual setup, \= not available

## When Raw SES Is Enough

Plenty of SES accounts never need anything around them.

-   Your sending is one SendEmail call and a template you already own.
-   You have a platform team that built the pipeline around SES and is happy running it.
-   You need SES options Wraps does not expose yet, like dedicated IP pools or Mail Manager rules.
-   You have no AWS account and no appetite for one. Then neither raw SES nor Wraps is your answer — rent a sending API.

## When to Add Wraps

You already decided SES is right. Wraps is for the part after that decision.

-   You want SES prices and SES ownership without hand-building the event pipeline that goes around it.
-   You want bounce and complaint rates checked against AWS's lines every hour, with a name on the notification.
-   You already run SES and want a dashboard, suppression UI, message search and deliverability checks on top of it, without touching DNS.
-   You want the tooling to be open source, with the option to self-host all of it.
-   Your team's time is better spent on the product than on plumbing every SES user builds the same way.

## Getting Started with Wraps

One command deploys the whole SES surface to your AWS account: SES configuration, domain identity, suppression, the event pipeline, rate monitoring and HTTPS open and click tracking. The free plan needs no card.

$ npx @wraps.dev/cli email init

The CLI walks through connecting your AWS account, verifying the domain, creating DNS records and deploying. If you already have SES set up, it detects your existing domain verification and adds the supporting infrastructure on top: no DNS changes, no reputation risk.

If the account is still in the SES sandbox, init says so at the end, explains what it means, and links the production access request in your console. AWS decides that one. Nobody selling software can decide it for you.

## Also Compare

[

Resend vs Wraps

Same DX, different economics

](https://wraps.dev/compare/resend-vs-wraps)[

SendGrid vs Wraps

Escape the legacy tax

](https://wraps.dev/compare/sendgrid-vs-wraps)[

Customer.io vs Wraps

Unlimited contacts, no surprise bills

](https://wraps.dev/compare/customer-io-vs-wraps)[

Postmark vs Wraps

Beyond transactional sending

](https://wraps.dev/compare/postmark-vs-wraps)[

Klaviyo vs Wraps

Up to 5.6x cheaper at scale

](https://wraps.dev/compare/klaviyo-vs-wraps)[

Mailgun vs Wraps

Your infra, AWS pricing, no suspensions

](https://wraps.dev/compare/mailgun-vs-wraps)[

Hand-rolled bounce handling vs Wraps

152 honest lines, and what they don't cover

](https://wraps.dev/compare/ses-bounce-handling-hand-rolled-vs-wraps)

## Everything Amazon SES needs, including operations

One command sets it up in your AWS account. The control plane runs it from there. Same SES, same bill, same reputation.

[Get Started](https://wraps.dev/docs/quickstart)[Calculate Your Costs](https://wraps.dev/tools/ses-calculator)

**Last updated:** September 2026. Pricing verified against [aws.amazon.com/ses/pricing](https://aws.amazon.com/ses/pricing/).

We update this page regularly. If anything here is inaccurate, let us know at [support@wraps.dev](mailto:support@wraps.dev).
