Amazon SES Pricing 2026: Plans, Inbound and Hidden Costs
Amazon SES costs $0.10 per 1,000 emails on à la carte pricing, plus $0.12 per GB of data sent. Receiving costs $0.10 per 1,000 emails plus $0.09 per 1,000 incoming chunks of 256 KB.
The part most price guides miss: since July 21, 2026, new SES accounts start on the Essentials plan at $0.16 per 1,000, which bundles a deliverability dashboard. Pro ($0.22 per 1,000 plus $105 a month) and Enterprise ($0.23 plus $500) add dedicated IPs and more. You can switch back to à la carte whenever you like.
The quick answer: for one-way mail at volume (receipts, password resets, alerts) SES is about as cheap as email gets, and most apps should run it on à la carte. If your app has to receive mail and answer it, the SES bill stays tiny but the build doesn’t: receipt rules, S3, Lambda, MIME parsing, threading and bounce handling are all yours to write. CarlyEmail is that system already assembled for AI agents: real inboxes from one API call, threads built for you, signed webhooks the moment mail lands. It’s free for 3 inboxes and 1,000 emails a month, then $20 a month for 25 inboxes.
Every SES number below was read from AWS’s live SES pricing page, the AWS Price List API and the SES Developer Guide on October 2, 2026, in USD.
SES pricing plans (new in July 2026)
AWS launched three plans on July 21, 2026. Each bundles features you’d otherwise buy as add-ons, and each is priced per account, per region.
| Essentials | Pro | Enterprise | À la carte | |
|---|---|---|---|---|
| Monthly fee (per account, per region) | $0 | $105 | $500 | $0 |
| Outbound, first 10M a month (per 1,000) | $0.16 | $0.22 | $0.23 | $0.10 |
| Outbound, 10M to 100M (per 1,000) | $0.14 | $0.17 | $0.18 | $0.10 |
| Outbound, over 100M (per 1,000) | $0.11 | $0.12 | $0.13 | $0.10 |
| Deliverability dashboard (VDM, SES deliverability) | included | included | included | $0.07 per 1,000 |
| Managed dedicated IPs | add-on | included | included | $15/mo + per-email fee |
| Global deliverability (inbox placement, blocklists) | $1,250/mo add-on | 1 domain, 1 IP, 5 seed tests | 5 domains, 12 IPs, 25 seed tests | $1,250/mo |
| Email validation | add-on | 2,500 API checks/mo | 5,000 API checks/mo | $0.01 per check |
| Global Endpoints and Tenants | add-on | add-on | included | add-on |
| Mail Manager open ingress endpoint | $50/mo | $50/mo | 1 included | $50/mo |
How the plans actually bill:
- Outbound counts recipients. One message to three addresses is three emails. Mail Manager processing, which the plan rates also cover, counts per email.
- Volume tiers are marginal. The 10M-plus rate only applies to emails past 10 million, not to the whole month.
- New accounts start on Essentials. New SES accounts, and any account and region with no metered SES activity since June 1, 2025, began on Essentials on July 21, 2026. Accounts already sending stayed on à la carte unless they picked a plan.
- Leaving the default is immediate. If you were defaulted to Essentials, your first switch to à la carte takes effect right away. Upgrades are immediate too. Every other downgrade waits for the next billing cycle.
- Plans are per region. Send from two regions on Pro and you pay $105 twice. Plans aren’t offered in the Middle East (UAE) and Middle East (Bahrain) regions.
The Essentials math is worth a minute. Essentials charges $0.06 more per 1,000 than à la carte, and that difference buys Virtual Deliverability Manager’s SES dashboard, which costs $0.07 per 1,000 on its own. If you use the dashboard, Essentials is a penny cheaper per 1,000. If you don’t, switching to à la carte in the SES console’s Pricing plan page cuts your sending bill by 37.5%.
Every à la carte price
À la carte is SES’s original pay-per-use model: no minimums, and each feature billed separately.
| Item | Price | Fine print |
|---|---|---|
| Outbound email | $0.10 per 1,000 | Per recipient, flat at any volume |
| Data sent | $0.12 per GB | Labeled attachment data; AWS’s own worked examples apply it to the full message size |
| Inbound email (receipt rules) | $0.10 per 1,000 | Plus $0.09 per 1,000 incoming chunks; a chunk is 256 KB of headers, body and attachments |
| Dedicated IP, standard | $24.95 per IP per month | You warm it up, scale it and manage pools |
| Dedicated IPs, managed | $15 per month per account, plus $0.08 per 1,000 emails | Per-email fee falls to $0.04 (10M to 50M) and $0.02 (50M to 100M); contact AWS above 100M |
| Bring your own IP | $24.95 per IP per month | Minimum 256 addresses, so at least $6,387.20 a month |
| VDM, SES deliverability | $0.07 per 1,000 | $0.05 from 10M, $0.02 above 100M; queries $0.0005 per 1,000 after 5,000 free a month |
| VDM, global deliverability | $1,250 per month per region | Includes 5 domains, 12 IPs, 25 seed tests; then $25 a domain, $12.50 an IP, $10 a test |
| Email validation | $0.01 per API check | Auto Validation on sends is $0.01 per 1,000 |
| Global Endpoints | $0.03 per 1,000 | On top of the sending price |
| Tenants | $0.005 per tenant per month | Plus $0.005 per 1,000 emails |
| Mail Manager processing | $0.15 per 1,000 | Plus $0.09 per 1,000 chunks; $0.10 per 1,000 extra recipients on “Send to Internet” |
| Mail Manager ingress endpoint (open or mTLS) | $50 per endpoint per month | Billed even while the endpoint is “Closed”; delete it to stop |
| Mail Manager archiving | $2 per GB ingested | Plus $0.19 per GB per month to store and search |
| Mail Manager add-ons | $0.125 to $0.415 per 1,000 | Spamhaus and Abusix $0.125, Trend Micro $0.1875, Vade $0.415 |
Then come the charges that never appear on the SES line of your bill: S3 storage for mail you receive, SNS notifications, Lambda invocations, CloudWatch metrics, and EC2 data transfer if your sender runs there. Each is small. Each is also another service to configure.
What receiving email costs on SES
Classic receiving (receipt rules) is what most developers mean by “SES inbound”: $0.10 per 1,000 messages plus $0.09 per 1,000 chunks. A plain-text reply is far under 256 KB, so 10,000 received emails cost about $1.00 plus at most $0.90 in chunk fees. The plans cover outbound and Mail Manager; this line sits separately on the pricing page.
What that money buys: SES accepts mail for your verified domain, checks SPF and DKIM, scans for spam and viruses, then runs your receipt rules. A rule can write the message to S3 (up to 40 MB), publish it to SNS (only up to 150 KB, so anything with an attachment goes to S3), invoke Lambda, bounce it, add a header or stop. What arrives is the raw, unmodified MIME message. SES has no POP or IMAP server, so there’s no mailbox to open and no API that lists one address’s mail.
Two hard limits shape the design: one active rule set per account, holding at most 200 rules of 500 recipients each, and neither is adjustable. Per-agent addresses usually end up as one domain-wide rule plus your own routing table in code.
Mail Manager is an inbound email gateway for routing, filtering and archiving an organization’s mail. To make it your MX you need an open ingress endpoint at $50 a month (one comes with Enterprise), plus processing at $0.15 per 1,000 à la carte or your plan’s rate. It’s built for compliance-heavy company mail. For an app, receipt rules are the cheaper path.
Is Amazon SES free?
Not permanently. There are two cases:
- AWS accounts opened since July 15, 2025 get $100 in Free Tier credits at sign-up and up to $100 more for completing activities, usable on SES among other services. On the Free account plan nothing is charged, but the account closes after six months or when the credits run out, whichever comes first. At à la carte rates, $100 covers a million emails if you spend it on nothing else.
- Older accounts were on SES’s previous allowance: 3,000 free “message charges” a month for the first 12 months after you start using SES, where a send, a receive and a VDM-processed email each count as one.
Once the credits or the 12 months are gone, every message is billed.
The sandbox: the gate before the meter
Every new account starts in the SES sandbox, separately in each region. In the sandbox you can:
- send only to verified addresses and domains (or AWS’s mailbox simulator)
- send at most 200 messages per 24 hours
- send at most 1 message per second
To leave, you request production access per region, describe your mail and website, and confirm you have a process for bounces and complaints. AWS says it responds within 24 hours, longer if it needs more information.
This matters more for an agent than for a receipt sender. An agent that answers whoever writes in is replying to unverified addresses, so it can’t do its job until AWS approves the account. After approval, AWS reviews any account whose bounce rate reaches 5% or complaint rate reaches 0.1%, and may pause sending at 10% bounces or 0.5% complaints.
What SES costs at real volumes
Outbound only, at 32 KB per message (the size AWS uses in its own examples), including the data charge:
| Emails a month | À la carte | Essentials (the default) | Pro |
|---|---|---|---|
| 10,000 | $1.04 | $1.64 | $107.24 |
| 50,000 | $5.19 | $8.19 | $116.19 |
| 100,000 | $10.38 | $16.38 | $127.38 |
| 1,000,000 | $103.84 | $163.84 | $328.84 |
| 10,000,000 | $1,038.40 | $1,638.40 | $2,343.40 |
At a million emails a month, a standard dedicated IP takes à la carte from $103.84 to $128.79. Managed dedicated IPs add $15 plus $80 in per-email fees, for $198.84. AWS’s own guidance is to stay on shared IPs unless you send large volumes on a regular, predictable schedule, and to pick managed over standard when your volume is irregular.
Now the two-way case. Josh runs a support agent on SES that receives 6,000 emails a month and answers every one:
| Line | À la carte | Essentials |
|---|---|---|
| 6,000 replies sent | $0.60 | $0.96 |
| Data sent (32 KB each) | $0.02 | $0.02 |
| 6,000 emails received | $0.60 | $0.60 |
| Incoming chunks (at most 1 each) | $0.54 | $0.54 |
| SES total | about $1.76 | about $2.12 |
Add a few cents of S3, Lambda and SNS. On the invoice SES is roughly $18 a month cheaper than CarlyEmail’s $20 Startup plan. The invoice is the small number.
The hidden cost: everything SES leaves to you
For an app that only sends, SES is close to complete: verify a domain, leave the sandbox, call SendEmail, wire up bounce and complaint notifications. For an app that receives and replies, SES delivers bytes to a bucket, and everything that turns them into an inbox is yours:
- Domain and MX. Verify the domain, publish DKIM, and point MX at SES’s inbound endpoint for your region.
- Receipt rules. Decide which addresses exist, inside the 200-rule, 500-recipient ceiling.
- S3 plus Lambda. A bucket policy that lets SES write, then a function the rule triggers after the write, which fetches the message from the bucket.
- MIME parsing. Multipart bodies, character sets, base64 and quoted-printable attachments, inline images, and stripping the quoted reply chain before an LLM reads it.
- Threading. Store every
Message-ID, matchIn-Reply-ToandReferences, fall back to subject matching for clients that drop those headers, and set them yourself on every reply. - A mailbox API. Listing an address’s messages, read state, labels and search mean a database you design.
- Spoof and spam policy. SES gives you SPF, DKIM, DMARC, spam and virus verdicts. Deciding what your agent is allowed to read is your code, and an LLM that follows instructions in forged mail is a real attack.
- Events into your app. Fan-out from Lambda, retries and idempotency so a redelivery doesn’t send a second reply.
- Bounces and complaints. Configuration sets, event destinations, suppression, and staying under 5% bounces and 0.1% complaints.
- Tenant isolation. If each customer gets an agent, IAM policies and key prefixes so one tenant’s code can’t read another’s mail.
Turning email into a webhook compares this SES pipeline with the other inbound options.
An Amazon SES alternative for AI agents: CarlyEmail
CarlyEmail is that list, assembled. It’s an email API that gives AI agents real inboxes: one API call creates an address at hello@carlyemail.com or on your own domain, mail from Gmail, Outlook or anything else arrives already threaded, and replies land inside the thread.
Here’s the whole receive-and-reply loop in Python. The router verifies the webhook signature, admits only authenticated message.received events, drops redeliveries and mail the inbox sent itself, and acknowledges before your agent runs:
from carlyemail import CarlyEmail
from carlyemail.inbound import create_email_router
from fastapi import FastAPI
carly = CarlyEmail()
app = FastAPI()
def on_email(email):
answer = my_agent(email.thread_id, email.text) # your model, your prompt
carly.messages.reply(email.inbox_id, email.message_id, {"text": answer})
app.include_router(create_email_router(on_email, path="/hooks/carlyemail"))
email.text arrives with the quoted chain already stripped, and email.thread_id is the key to store the agent’s memory under. Creating the inbox is one more line: carly.inboxes.create({"username": "support"}).
Josh’s support agent, both ways:
| Two-way agent mail | Amazon SES | CarlyEmail Startup |
|---|---|---|
| Monthly bill at 6,000 in and 6,000 out | about $2, plus S3, Lambda and SNS | $20; received mail doesn’t count toward the 10,000 sends |
| Inboxes | none; mail for your domain lands in S3 as raw MIME | 25 real inboxes, one API call each |
| Reading mail | list S3 objects and parse MIME | list messages or fetch a whole thread |
| Threading | your database and header matching | assembled automatically, including replies Outlook mangles |
| Arrival events | receipt rule to S3 to Lambda | signed webhook or WebSocket carrying thread_id |
| Forged senders | verdicts in the notification; you filter | delivered as message.received.unauthenticated, never message.received |
| Bounces and complaints | configuration sets, SNS and your suppression code | suppressed automatically |
| Day one | sandbox: 200 a day, verified recipients only | free plan, no card; full free limits once you confirm your email |
What else you stop building:
- Tenant isolation. Pods give each customer their own space, and API keys can be scoped to one pod or one inbox. Another tenant’s mail returns 404.
- A guardrail the agent can’t talk around. A key with
draft_createbut notmessage_sendgets a 403 on send however the agent reasons. The agent writes drafts, Emily approves. - Domain setup. Add a custom domain and SPF, DKIM and DMARC are set up for you, on sending infrastructure that tracks reputation per organization.
- Glue for your stack. REST, TypeScript and Python SDKs, a CLI, and a hosted MCP server at
https://api.carlyemail.com/mcp, with guides for LangChain, the OpenAI Agents SDK, the Claude Agent SDK, the Vercel AI SDK and Mastra. You keep your agent and your model key. - Sign-up itself. Paste
Read https://docs.carlyemail.com/llms.txt and set yourself up with an email address.into any agent. Until you confirm a 6-digit code, the account can only email you.
CarlyEmail pricing: Free is $0 with no card: 3 inboxes, 1,000 emails a month (100 a day), 1 custom domain, 2 webhooks, 1 GB of storage. Startup is $20 a month for 25 inboxes, 10,000 emails, no daily cap, 10 domains and 25 GB. Business is $200 a month for 250 inboxes, 100,000 emails, 100 domains and 250 GB. Enterprise covers higher volume, a dedicated sending domain or custom terms. Only sent mail counts toward the email quota, mail is kept until you delete it, there’s no “Sent via” footer on any plan, and every plan gets the whole API. Get started at carlyemail.com.
The honest scope line: if all you do is send receipts at volume, SES is priced for that, and at a tenth of a cent per email you should use it. If mail has to come back and be answered, that’s what CarlyEmail is for, and nothing stops you running both: SES for notifications, CarlyEmail for the agent’s inbox. For the wider field, see the best email APIs, email APIs for AI agents, SendGrid pricing, Resend pricing and Mailgun pricing.
FAQ
How much does Amazon SES cost per email?
On à la carte pricing, $0.10 per 1,000 emails ($0.0001 each), counted per recipient, plus $0.12 per GB of data sent. New accounts default to the Essentials plan at $0.16 per 1,000, falling to $0.14 past 10 million and $0.11 past 100 million a month. You can switch to à la carte in the SES console.
Is Amazon SES free?
No permanent free plan exists. AWS accounts opened since July 15, 2025 get $100 in Free Tier credits plus up to $100 more for completing activities, usable on SES. Older accounts had 3,000 free message charges a month for their first 12 months on SES. After that, every message is billed.
Does Amazon SES charge for receiving email?
Yes. Classic receiving costs $0.10 per 1,000 messages plus $0.09 per 1,000 incoming chunks of 256 KB. S3 storage, SNS and Lambda bill separately. Receiving through Mail Manager costs $0.15 per 1,000 à la carte plus $50 a month for each open ingress endpoint.
Do I have to use an SES pricing plan?
No. Plans are optional, priced per account and per region. New accounts start on Essentials, and if you were placed there by default, your first switch back to à la carte takes effect immediately. Essentials only saves money if you use Virtual Deliverability Manager’s dashboard.
How much is a dedicated IP on Amazon SES?
A standard dedicated IP is $24.95 per IP per month, and you manage its warm-up. Managed dedicated IPs cost $15 a month per account plus $0.08 per 1,000 emails for the first 10 million, and SES handles warm-up and scaling. The Pro and Enterprise plans include managed dedicated IPs.
What’s the best Amazon SES alternative for AI agents?
CarlyEmail. SES gives you raw MIME in an S3 bucket and leaves parsing, threading and routing to you. CarlyEmail creates a real inbox per agent in one API call, threads every conversation, and fires a signed webhook with the thread_id on arrival. It’s free for 3 inboxes and 1,000 emails a month.
Give your agent a real inbox
Your agent gets its own email address. People can email it, it answers in the same thread, and your personal inbox stays out of it. Start with 3 inboxes, no card needed.
Get startedSee the prompt
Read https://docs.carlyemail.com/llms.txt and set yourself up with an email address.


