Postmark to AWS SES Migration
Migrating from Postmark to AWS SES: When and How
Postmark is the best deliverability-focused ESP on the market. SES is 5–10x cheaper at high volume. This guide helps you decide whether the cost savings justify the operational trade-offs — and how to execute the migration if they do.
Postmark is the premium option in transactional email — priced accordingly, and genuinely worth it for teams that prioritize deliverability above all else. AWS SES is a commodity infrastructure service priced at cost. The decision to migrate is fundamentally about whether the cost savings justify building the operational scaffolding that Postmark handles for you.
This guide gives you the honest trade-off analysis and the step-by-step migration path if you decide to move.
The Cost Difference Is Stark
No other comparison in the transactional email space has this wide a price gap at volume.
| Volume | Postmark | AWS SES | Monthly Savings | Annual Savings |
|---|---|---|---|---|
| 10,000 emails | $15/month | $1.00/month | $14.00 | $168 |
| 50,000 emails | $50/month | $5.00/month | $45.00 | $540 |
| 125,000 emails | $100/month | $12.50/month | $87.50 | $1,050 |
| 500,000 emails | ~$400/month | $50.00/month | $350.00 | $4,200 |
| 1,000,000 emails | ~$800/month | $100.00/month | $700.00 | $8,400 |
SES dedicated IPs ($24.95/IP/month) add some cost, but even with two dedicated IPs, SES is 3–6x cheaper than Postmark at 500K+ emails per month.
Message Streams vs SES Configuration Sets
Postmark’s message streams are its most distinctive feature. Each stream has its own dedicated IP pool, separate bounce/complaint tracking, and isolated reputation. You create a transactional stream and a broadcast (marketing) stream, and Postmark ensures that a complaint spike on your broadcast stream cannot damage your transactional inbox placement.
SES does not have a native message stream concept, but you can replicate the isolation:
| Postmark Concept | SES Equivalent | Setup Required |
|---|---|---|
| Transactional stream | Configuration Set A + dedicated IP pool A | Manual — create in SES console |
| Broadcast/marketing stream | Configuration Set B + dedicated IP pool B | Manual — create in SES console |
| Per-stream bounce rate | Per-Configuration-Set CloudWatch metrics | CloudWatch dashboard or alarm |
| Per-stream reputation isolation | Separate dedicated IP pools | Requires dedicated IPs ($24.95/IP/month) |
| Automatic stream enforcement | None — application must select correct Configuration Set | Application code responsibility |
The functional result is the same, but Postmark enforces the separation automatically. With SES, your application must consistently pass the correct ConfigurationSetName parameter on every send.
Template Migration
Postmark templates use Mustache syntax with conditionals, layouts, and partial includes. SES templates support basic {{variable}} substitution only.
Best practice: move template rendering to application code before or during the migration.
Recommended libraries:
- React Email — JSX-based email components with Tailwind support
- MJML — responsive email markup language, compiles to HTML
- Handlebars — logic-capable server-side templating for Node.js
- Jinja2 — equivalent for Python stacks
Render the complete HTML in your application, then call SES.sendEmail() with the rendered body. Your templates become code artifacts (version-controlled, testable, provider-agnostic) rather than data stored in a vendor platform.
Message Retention: Postmark’s 45-Day Log vs SES
Postmark retains every message — including full headers, body, and per-recipient event history — for 45 days. You can search by recipient, subject, or message ID and see exactly what was delivered, opened, or bounced.
SES has no equivalent message archive. To replicate this:
- Enable SES event publishing to S3 via a Configuration Set
- Use SES receipt rules to store raw inbound messages to S3
- Index CloudWatch Logs (or send SNS events to CloudWatch) for delivery/bounce/complaint events
- Optionally, use Athena to query the S3-stored event archive
This setup is more operationally complex than Postmark’s built-in retention, but it is permanent and queryable at scale via SQL.
Deliverability: Where Postmark Has a Real Advantage
Be direct with your stakeholders about this trade-off:
- Postmark’s shared IP pools are heavily curated — they reject senders with poor list hygiene before they can affect other customers’ deliverability
- Postmark’s feedback loops and complaint processing are faster to surface in their UI
- Postmark’s deliverability team actively monitors and intervenes on reputation issues
- SES shared IPs carry the reputation of all SES customers in that pool — a much larger and less curated set
For clean transactional lists (low bounce rates, no marketing email, engaged recipients), this difference is rarely observable in practice. For teams with variable list quality or mixed transactional/marketing sends, Postmark’s isolation is a real deliverability advantage.
Migration Checklist
- Verify sending domain in SES (DKIM CNAME records, optional MAIL FROM)
- Request SES production access (AWS support case with use case and volume estimate)
- Create two Configuration Sets: one for transactional, one for broadcast (if applicable)
- Provision dedicated IPs if reputation isolation is required ($24.95/IP/month)
- Configure SNS event destinations on each Configuration Set for bounces, complaints, and deliveries
- Implement SNS → Lambda event handler to process bounce/complaint events and update your suppression store
- Migrate templates from Postmark to application-rendered HTML (React Email, MJML, or Handlebars)
- Export Postmark suppression list and import hard bounces/complaints to SES account-level suppression list
- Update SDK calls or SMTP config to point at SES
- Run parallel sends at 5–10% volume for 1–2 weeks while monitoring bounce and complaint rates
- Warm dedicated IPs gradually if using them (30-day ramp to full volume)
- Shift remaining traffic to SES and close Postmark account
When to Stay on Postmark
The migration is not always the right call:
- Your email volume is under 30,000 emails/month — the savings do not justify the engineering investment
- Your team lacks AWS experience and cannot operate SNS pipelines reliably
- Deliverability is a critical business metric and your list quality is variable
- You need Postmark’s 45-day searchable message history for support or compliance workflows
- Non-technical team members manage email templates and need Postmark’s template editor
When SES is the Right Move
SES is clearly the right choice when:
- You send more than 100,000 emails per month and the $80–$700/month savings are material
- Your application stack is already on AWS (Lambda, ECS, EC2) — IAM auth and CloudWatch integration are native
- Your engineering team has AWS experience and can build and operate SNS/Lambda event pipelines
- You want to consolidate vendors and reduce third-party dependencies
FactualMinds is an AWS Select Tier Consulting Partner. Our AWS SES consulting service covers the full Postmark-to-SES migration: domain setup, Configuration Set design for stream isolation, SNS event pipeline implementation, template migration, and IP warming strategy. Contact us to discuss whether the migration makes sense for your volume and team.
Frequently Asked Questions
Is AWS SES as reliable as Postmark?
Postmark has built its entire brand around deliverability and reliability — it maintains separate infrastructure per customer, obsesses over bounce rates, and publishes transparency reports on delivery performance. SES is reliable at AWS infrastructure scale but is a general-purpose service without Postmark's deliverability-first focus. In practice, both platforms achieve comparable inbox placement for transactional email when properly configured with DKIM, SPF, and a warmed sending reputation. Postmark's reputation isolation (message streams) is genuinely better for protecting transactional deliverability from broadcast email impact. For pure transactional email on a clean list, SES delivers comparably. If deliverability is your primary risk, Postmark's premium is defensible.
How do I migrate Postmark templates to AWS SES?
Postmark templates use Mustache-style syntax ({{variable}}) with conditional blocks ({{#if condition}}) and layout inheritance. SES email templates support basic {{variable}} substitution but lack conditional logic and template inheritance. The recommended migration path is to move template rendering to your application layer using a library like React Email, MJML, or Handlebars. Render the full HTML body in your application code, then send the pre-rendered HTML to SES via SendEmail. This decouples your templates from the ESP and works identically whether you are on Postmark, SES, or any other provider.
Does AWS SES have message streams like Postmark?
Not natively, but you can replicate the core benefit using SES Configuration Sets. Postmark message streams isolate transactional and broadcast email into separate IP pools to protect transactional deliverability from broadcast reputation impact. In SES, create separate Configuration Sets — one for transactional, one for broadcast — each pointing to a different dedicated IP pool. This achieves the same reputation isolation. The difference is that Postmark enforces stream separation and gives you per-stream analytics automatically; SES requires you to configure and enforce the separation yourself and aggregate per-Configuration-Set metrics from CloudWatch.
Is Postmark worth the premium over SES?
At low-to-medium volume (under 50,000 emails per month), Postmark's premium is often worth it for the deliverability focus, message stream isolation, and the 45-day message retention with searchable activity logs. The calculus changes at high volume. At 500,000 emails per month, Postmark costs around $400–450 versus $50 on SES — a $350–400 monthly difference. For a 1,000,000 email/month sender, the gap approaches $800/month. At that scale, the engineering cost of building SES event pipelines and log aggregation is typically a one-time investment that pays back in a few months. For teams with AWS expertise, SES wins at scale. For teams without it, Postmark's operational simplicity may be worth more than the monthly cost difference.
What does Postmark charge vs AWS SES?
Postmark charges $15/month for 10,000 emails ($1.50 per 1,000), $50/month for 50,000 emails ($1.00 per 1,000), and $100/month for 125,000 emails ($0.80 per 1,000). AWS SES charges a flat $0.10 per 1,000 emails with no monthly minimum. At 50,000 emails per month, Postmark costs $50 versus $5 on SES — a 10x price difference. At 125,000 emails per month, the ratio is still 8x. Dedicated IPs on SES add $24.95/IP/month, which narrows the gap but does not close it at meaningful volume.
Need Help Choosing the Right Cloud Platform?
Our AWS-certified architects help you evaluate cloud platforms based on your specific requirements, workloads, and business goals.
