Skip to content

Migrate from SendGrid to PostStack

A modern REST API and SDK. Paid plans from €5/month instead of $19.95.

SendGrid is the legacy incumbent — powerful, but its REST surface predates modern conventions. Field names are PascalCase, transactional and marketing live on separate endpoints, and the SDK splits across @sendgrid/mail, @sendgrid/client, and @sendgrid/inbound-mail-parser. PostStack consolidates everything into a single typed SDK with lowercased JSON, idempotency keys, and a unified webhook surface. The migration is a small refactor in code, plus a DNS update for SPF/DKIM/DMARC alignment.

Why switch from SendGrid?

  • Paid plans start at €5/month. SendGrid has no tier below $19.95
  • Simple, predictable pricing instead of SendGrid's tier-and-add-on model
  • IMAP and POP3 mailboxes and DMARC aggregate reports are built in, neither ships in SendGrid
  • EU-hosted infrastructure in Helsinki, Finland with GDPR compliance by default
  • A modern, typed REST API instead of the SendGrid v3 surface area

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.

VolumeSendGridPostStackSavings
3,000/mo60-day trial€0Free forever
10,000/mo~$19.95/mo€5/mo~73%
50,000/mo~$19.95/mo€15/mo~19%
100,000/mo~$89.95/mo€30/mo~64%
500,000/mo~$449/mo€130/mo~69%
1,000,000/mo~$899/mo€255/mo~69%

Code Migration

Before (SendGrid)

typescript
import sgMail from '@sendgrid/mail';
sgMail.setApiKey(process.env.SENDGRID_API_KEY!);

await sgMail.send({
  to: 'user@example.com',
  from: 'hello@yourdomain.com',
  subject: 'Hello!',
  html: '<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

FeatureSendGridPostStack
REST APIYes (v3)Yes
TypeScript SDKPartialYes
WebhooksYesYes
Email TemplatesYesYes
Contact ManagementYesYes
Open/Click TrackingYesYes
SMTP RelayYesYes
Inbound Email + WebhooksYes (Inbound Parse)Yes
IMAP/POP3 MailboxesNoYes
Visual Email BuilderLimitedYes
DMARC Aggregate ReportsNoYes
Workflow AutomationMarketing onlyYes
Embeddable Signup FormsMarketing onlyYes
EU Data ResidencyNoYes
Simple API DesignComplexYes

API Mapping

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

ConceptSendGridPostStack
Send transactional emailsgMail.send({ to, from, subject, html })poststack.emails.send({ to, from, subject, html })
Field casingPascalCase legacy fields in v2; mixed in v3camelCase consistently across the API
Add a domain (sender authentication)POST /v3/whitelabel/domainspoststack.domains.create({ name })
Manage contactsPUT /v3/marketing/contacts (Marketing Contacts product, separate billing)poststack.contacts.create({ email, ... }) — included in every plan
Inbound ParseInbound Parse webhook with multipart/form-datainboundEmails webhook with structured JSON
Webhook signature verificationEllipticCurve + signed-event-webhook-public-key (ECDSA)X-PostStack-Signature header, HMAC-SHA256 of `timestamp.body`
Template engineHandlebars (with proprietary helpers in v3)Standard Handlebars (no proprietary extensions)

Migration Gotchas

Field casing changes

SendGrid v2 used PascalCase (`From`, `To`, `Subject`); v3 mostly normalises but some legacy fields remain. PostStack uses lowercase camelCase consistently. Run a sed pass or rely on TypeScript autocomplete to catch the renames.

Marketing Contacts is a separate product on SendGrid

SendGrid bills marketing contacts and transactional sends separately. PostStack includes contacts, audiences, segments, and broadcasts in every plan — there is no contacts add-on or per-contact charge.

Inbound Parse uses multipart/form-data

SendGrid posts inbound mail as multipart/form-data; PostStack posts a clean JSON payload with parsed headers, plain-text body, HTML body, and attachments. Your existing inbound handler needs to switch from a multipart parser to JSON.

Webhook signature scheme differs

SendGrid uses ECDSA-based signature verification; PostStack uses HMAC-SHA256. The verification code is a few lines either way, but it is not a drop-in replacement — you do need to swap the verification logic.

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 @sendgrid/mail with @poststack/sdk
  5. 5Update from sgMail.send() to poststack.emails.send()
  6. 6Test in development, then switch production traffic

Frequently asked questions

Can I keep my SendGrid templates?

Yes — export the Handlebars body from SendGrid and import as a PostStack template. PostStack uses standard Handlebars without proprietary helpers, so simple templates port directly. Templates using SendGrid-specific `{{insert}}` blocks may need a small rewrite.

Do I have to migrate marketing contacts separately?

No. PostStack does not split marketing and transactional. Export your contacts as CSV from SendGrid Marketing Campaigns, import into a PostStack audience, and continue sending — both transactional and broadcasts — from the same dataset.

How long does the migration take?

A small SaaS with a single sending integration usually finishes in two to four hours, including DNS propagation. Larger setups with template libraries and inbound parse handlers usually take a working day.

Can I run SendGrid and PostStack in parallel?

Yes. The two providers can coexist at the DNS layer (multiple `v=spf1 include:…` chains, multiple DKIM selectors). Run a percentage split for a day to verify deliverability before cutting over fully.

What about my IP warmup history?

IP reputation does not transfer between providers — neither way. PostStack handles IP warmup automatically on its shared pool for new senders, and a dedicated IP add-on is available if you need full control.

Does the inbound parse endpoint work the same?

Conceptually yes, but the payload format is different. SendGrid posts multipart/form-data; PostStack posts JSON. You will need to update your inbound webhook handler.

More on SendGrid vs PostStack

Ready to switch?

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