Why teams leave Postmark
- No marketing tier. Postmark's broadcast/transactional split is intentional, but it forces a second tool for segments + automations.
- Single region. Postmark is US-only. EU data residency requires moving.
- Pricing climbs sharper than competitors. 10k sends = $15/mo, 50k = $50/mo, 300k = $200/mo. Relayly is $25/$25/$100 for the same.
- Limited drag-drop editor. Postmark's templates are great for engineers, less so for non-technical marketers.
What carries across
| Postmark concept | Relayly equivalent | Auto-migrates? |
|---|---|---|
| Servers | Sub-accounts | Yes — Scale tier and above. 1:1 mapping. |
| Message Streams | Tagged sends + classification | Streams become tag-based send classification on our side. |
| Templates (Mustache) | Liquid templates | Auto-translation handles the common cases. |
| Suppression list | Suppressions | Yes — bounces, spam complaints, unsubs. |
| Outbound API logs | Read-only archive | Optional. Search remains available for 90 days. |
| Inbound webhooks | Inbound routes | Yes — same parsed payload structure. |
The codebase swap
API shapes are similar enough that find/replace handles most call sites. The key differences:
// Postmark Node SDK import { ServerClient } from "postmark"; const client = new ServerClient(process.env.POSTMARK_TOKEN); await client.sendEmail({ From: "hello@yourdomain.com", To: "user@example.com", Subject: "Welcome", HtmlBody: "<p>Hi</p>", });
// Relayly Node SDK import Relayly from "@relayly/node"; const r = new Relayly({ apiKey: process.env.RELAYLY_API_KEY }); await r.email.send({ from: { email: "hello@yourdomain.com" }, to: [{ email: "user@example.com" }], subject: "Welcome", html: "<p>Hi</p>", });
Message Streams → Tags
Postmark's Message Streams (transactional vs broadcast) split your account into distinct sending tracks. Relayly uses tags + auto-classification to achieve the same effect — sends with a broadcast tag automatically route through the marketing-grade IP pool, transactional sends through the priority pool.
The migrator transcribes your stream IDs to tag conventions. Most teams keep the same names: outbound, broadcast, marketing.
The cutover playbook
- Run the export script. It's read-only against Postmark and re-runnable.
- Review the manifest. Anything flagged as "needs review" gets a copy-paste remediation snippet.
- Apply to Relayly. Idempotent SQL + REST imports. Re-run safely.
- Dual-send for a week. Compare inbox rates at Gmail / O365 / Yahoo through the dashboard.
- Flip the API key. Search-and-replace your codebase, deploy, monitor 24h.
- Pause Postmark. Don't delete the account — keep it for 30 days as an unsubscribe-list reciprocity reference.
- After 30 quiet days, terminate Postmark. You're done.
Pricing-side check
| Volume | Postmark | Relayly | Annual delta |
|---|---|---|---|
| 10k sends/mo | $15/mo | $25/mo | − $120/year |
| 50k sends/mo | $50/mo | $25/mo | + $300/year |
| 300k sends/mo | $200/mo | $100/mo | + $1,200/year |
| 1M sends/mo + EU residency | Not available | $130/mo | EU residency unblocked |
Postmark pricing as of 2026-05 from postmarkapp.com/pricing. Postmark is cheaper at the lowest tier; Relayly takes over from ~30k/mo and the gap widens at higher volume.
Start the migration
Sign up free, run the export script, dual-send for a week. We'll spot you 10,000 verification sends.
Start free