Compare
Groundmail vs Postmark
Both take transactional email seriously. Groundmail runs its own mail servers on IP space we own, and offers dedicated IPs or a whole dedicated server when your mail needs to stand alone.
At a glance
Transactional focus on infrastructure we own
The job is the same: receipts, password resets and alerts that have to land. Here is how the details line up.
| Topic | Groundmail | Postmark |
|---|---|---|
| Sending infrastructure | Our own mail servers and our own IP space | See their docs |
| Isolation | Shared transactional pool, dedicated IPs, or your own dedicated mail server | See their docs |
| Email types | Transactional only | Transactional and broadcast message streams |
| Send API | POST api.groundmail.dev/emails | POST api.postmarkapp.com/email |
| Auth | Authorization: Bearer gm_… | X-Postmark-Server-Token header |
| Payload fields | from, to, subject, html, text | From, To, Subject, HtmlBody, TextBody |
| Other ways to send | SDKs for Node, Python, PHP, Ruby, Go, Laravel and Symfony; SMTP relay; MCP server | See their docs |
| Pricing | Free 3,000/mo · Pro from $20/mo · Dedicated server from $299/mo | See their pricing page |
Postmark details come from Postmark's public docs. Check them for current features and pricing.
What you get
Own the pipe, then isolate it further
Our servers, our IPs
An isolation tier above shared IPs
Transactional only
Run by mail operators
Switching
Map the fields, re-point the webhooks
- Create a gm_ API key and verify your sending domain
- Point your client at api.groundmail.dev with a Bearer header
- Rename HtmlBody, TextBody and friends to their lowercase forms
- Rebuild templates in the dashboard, or send html from your app
- Re-point bounce, complaint and delivery webhooks
The Postmark migration guide has the full field list and a cutover checklist.
Mapping
X-Postmark-Server-Token → Authorization: Bearer gm_…
POST /email → POST /emails
From / To / Subject → from / to / subject
HtmlBody / TextBody → html / text
ReplyTo → reply_tocurl
curl -X POST https://api.groundmail.dev/emails \
-H "Authorization: Bearer $GROUNDMAIL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "you@yourdomain.com",
"to": "user@example.com",
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>"
}'FAQ
Questions about switching from Postmark
How do Postmark fields map to Groundmail?
From becomes from, To becomes to, Subject becomes subject, HtmlBody becomes html, TextBody becomes text and ReplyTo becomes reply_to. PascalCase names like HtmlBody are not accepted, so map them in your client. The migration guide has the full list.
What replaces Postmark message streams?
Groundmail is transactional only, so there is no separate stream to pick. If you also send broadcasts, keep those with a provider built for marketing mail and move your transactional sends here.
Are templates and inbound email supported?
Yes. Build templates in the dashboard with {{variables}} and send them by alias from any SDK. Inbound email works per domain: add MX records and receive messages through webhooks or the dashboard.
When do I need a dedicated server instead of dedicated IPs?
Dedicated IPs give your mail its own reputation on our servers. The Dedicated plan gives you your own mail server and IPs, built, warmed and managed by us, from $299/mo including 250,000 emails. It suits teams with allowlists, compliance reviews or strict isolation needs.
How long does a cutover take?
The API swap is usually quick. DNS, webhook re-pointing and template rebuilds take most of the time. Run both providers side by side while you ramp volume, rather than switching everything on day one.
Put your transactional email on solid ground.
Start free on our transactional pool. Move to dedicated IPs or a dedicated server when you need the isolation. Same API either way.