Skip to content

Migrate from Postmark to PostStack

Postmark-grade deliverability on EU infrastructure. €5 instead of $15 to get started.

Postmark is well-respected for transactional deliverability — they were one of the first providers to split the transactional and marketing IP pools to protect inbox placement. PostStack runs the same split internally and inherits the same deliverability discipline. The two surfaces are similar in shape; the most visible difference is field casing (Postmark uses PascalCase, PostStack uses camelCase) and the broader product surface — PostStack includes IMAP mailboxes, a visual email builder, and DMARC aggregate reports that Postmark does not.

Why switch from Postmark?

  • €5/month for 10,000 emails, roughly 63% cheaper than Postmark at that volume
  • Savings of up to 67% at low and mid volumes, narrowing toward the multi-million range
  • IMAP and POP3 mailboxes, a visual email builder, and DMARC aggregate reports, none of which Postmark ships
  • European infrastructure in Helsinki, Finland, not subject to the US CLOUD Act

Price Comparison

Competitor prices are public list prices (USD) verified May 2026; PostStack prices are in EUR. Figures are approximate after currency conversion — check each provider's pricing page for current rates.

VolumePostmarkPostStackSavings
3,000/mo~$15/mo€0 (free)100%
10,000/mo~$15/mo€5/mo~64%
50,000/mo~$66/mo€15/mo~75%
100,000/mo~$126/mo€30/mo~74%
500,000/mo~$606/mo€130/mo~77%
1,000,000/mo~$1,206/mo€255/mo~77%

Code Migration

Before (Postmark)

typescript
import * as postmark from 'postmark';
const client = new postmark.ServerClient(process.env.POSTMARK_API_KEY!);

await client.sendEmail({
  From: 'hello@yourdomain.com',
  To: 'user@example.com',
  Subject: 'Hello!',
  HtmlBody: '<h1>Welcome!</h1>',
});

After (PostStack)

typescript
import PostStack from '@poststack/sdk';
const poststack = new PostStack('sk_live_...');

await poststack.emails.send({
  from: 'hello@yourdomain.com',
  to: 'user@example.com',
  subject: 'Hello!',
  html: '<h1>Welcome!</h1>',
});

Feature Comparison

FeaturePostmarkPostStack
REST APIYesYes
TypeScript SDKYesYes
WebhooksYesYes
Email TemplatesYesYes
BroadcastsYesYes
Contact ManagementLimitedYes
Open/Click TrackingYesYes
SMTP RelayYesYes
Inbound Email + WebhooksYesYes
IMAP/POP3 MailboxesNoYes
Visual Email BuilderNoYes
DMARC Aggregate ReportsNoYes
Workflow AutomationNoYes
Embeddable Signup FormsNoYes
Contact SegmentationNoYes
EU Data ResidencyNoYes

API Mapping

Side-by-side reference for the most common operations as you migrate.

ConceptPostmarkPostStack
Send transactional emailclient.sendEmail({ From, To, Subject, HtmlBody, TextBody })poststack.emails.send({ from, to, subject, html, text })
Field casingPascalCase: From, To, Subject, HtmlBody, TextBody, MessageStreamcamelCase: from, to, subject, html, text, stream
Message streamsMessageStream parameter, "outbound" / "broadcast" / customSame concept — `stream` parameter, used to separate transactional and marketing reputation
Send with a templateclient.sendEmailWithTemplate({ TemplateAlias, TemplateModel })poststack.emails.send({ templateId, variables: { ... } })
Bounce webhook signatureIP allowlist (no signature scheme)X-PostStack-Signature header, HMAC-SHA256
Inbound webhookPOST JSON to your configured URLPOST JSON to your configured URL (same shape)
Suppression managementPOST /suppressions/email/{stream}poststack.suppressions.add({ email, reason })

Migration Gotchas

Casing flip (PascalCase → camelCase)

Every Postmark payload uses PascalCase (`From`, `HtmlBody`, `MessageStream`). PostStack uses camelCase. TypeScript autocomplete catches missed renames; a quick `sed` is enough for plain JS or Python.

Message streams map directly

The "stream" concept (transactional vs broadcast IP pools) exists in both products. Map your Postmark stream names to PostStack stream IDs once and the rest of the integration carries over cleanly.

Postmark webhooks rely on IP allowlists, not signatures

Postmark does not sign webhook payloads — they expect you to allowlist their source IPs. PostStack signs every webhook with HMAC-SHA256. Update your endpoint to verify the `X-PostStack-Signature` header instead of (or in addition to) the IP check.

Template variable syntax is identical

Both providers use Handlebars (`{{variable}}`, `{{#if}}`). Postmark templates can usually be uploaded to PostStack verbatim. Postmark’s proprietary "layout" features are not supported — you would inline the layout into each template.

Migration Steps

  1. 1Sign up for PostStack and get your API key
  2. 2Install the PostStack SDK: npm install @poststack/sdk
  3. 3Add your domain and verify DNS records
  4. 4Replace the Postmark SDK with @poststack/sdk
  5. 5Update API calls to PostStack's camelCase format
  6. 6Test in development, then switch production traffic

Frequently asked questions

Is PostStack’s deliverability comparable to Postmark?

Postmark is a deliverability gold standard for transactional email, and PostStack’s practices mirror theirs — separate transactional and broadcast IP pools, automatic SPF/DKIM/DMARC alignment, daily DMARC report ingestion, Rspamd-grade inbound filtering, and TLS-RPT/MTA-STS. We continually monitor placement at Gmail, Outlook, Yahoo, and Apple Mail.

Can I keep my Postmark templates?

Yes. Both providers use Handlebars. Export the HTML body from Postmark, paste into PostStack, and most templates work unchanged. Postmark’s "layout" feature inlines into your template on the way over.

Does PostStack have message streams?

Yes — the `stream` parameter on the send API serves the same purpose. PostStack splits transactional and broadcast traffic across separate IP pools by default.

How long does the migration take?

A focused half-day is typical for a small/medium SaaS — most of the time is in updating field names across the codebase. The DNS propagation step finishes in minutes.

What about my Postmark suppressions?

Export from Postmark and import in bulk via the PostStack suppressions API. PostStack dedupes by email and starts enforcing the list on the next send.

Can I run both Postmark and PostStack in parallel during the cutover?

Yes — DNS, SPF, and DKIM accommodate multiple providers simultaneously. Route 10% of traffic to PostStack, verify deliverability matches, then ramp.

More on Postmark vs PostStack

Ready to switch?

Start free. Migrate in under an hour. Save up to 72% on your bill.