groundmail

Compare

Groundmail vs SendGrid

Groundmail does one job: transactional email, sent from mail servers and IP space we own. When you need more isolation, add dedicated IPs or move to a dedicated server on the same API.

At a glance

A smaller payload and a narrower focus

One flat JSON body per send. One kind of mail on our IPs. Here is how it lines up.

TopicGroundmailSendGrid
Sending infrastructureOur own mail servers and our own IP spaceSee their docs
IsolationShared transactional pool, dedicated IPs, or your own dedicated mail serverSee their docs
Email typesTransactional onlyEmail API plus Marketing Campaigns
Send APIPOST api.groundmail.dev/emailsPOST api.sendgrid.com/v3/mail/send
PayloadFlat from, to, subject, htmlpersonalizations[] and content[]
Node packagegroundmail@sendgrid/mail
SMTPsmtp.groundmail.dev:587See their docs
PricingFree 3,000/mo · Pro from $20/mo · Dedicated server from $299/moSee their pricing page

SendGrid details come from SendGrid's public docs. Check them for current features and pricing.

What you get

Built only for mail your users are waiting on

Transactional only

Password resets, receipts, alerts and invites. No marketing or cold email on our IPs, which keeps the shared pool clean.

Our servers, our IPs

We run our own mail servers on our own IP space. Reputation, warmup and blocklist work all happen on infrastructure we control.

Dedicated IPs and dedicated servers

Move from the shared pool to dedicated IPs, or to your own mail server built, warmed and managed by us. Dedicated starts at $299/mo including 250,000 emails.

A team that has run mail at scale

We have operated MTAs at scale and dealt with Google Postmaster and Spamhaus directly. That experience is part of the service.

Switching

Replace v3 mail send with POST /emails

  • Create a gm_ API key and verify your sending domain
  • Swap @sendgrid/mail for groundmail, or call the API directly
  • Flatten personalizations and content[] into from, to, subject and html
  • Swap template_id for a Groundmail template alias
  • Recreate webhook endpoints and update signature checks

Full field and event tables are in the SendGrid migration guide. Prefer SMTP for now? See SMTP relay.

Mapping

/v3/mail/send              →  /emails
personalizations[].to[]    →  to
from.email                 →  from
content[] (type, value)    →  html / text
template_id                →  template alias

Node

import { Groundmail } from "groundmail";

const client = new Groundmail(process.env.GROUNDMAIL_API_KEY);

await client.emails.send({
  from: "you@yourdomain.com",
  to: "user@example.com",
  subject: "Your order shipped",
  html: "<p>It's on the way.</p>",
});

FAQ

Questions about switching from SendGrid

How does a v3 mail send call map to Groundmail?

Flatten it. personalizations[].to[] becomes to, from.email becomes from, and content[] becomes html and/or text on POST /emails. The SendGrid migration guide has the full mapping table.

What replaces dynamic templates?

Groundmail templates. Build them in the dashboard with {{variables}} and send by alias, or pass html straight from your app. React Email works too.

How do Event Webhook events map?

Groundmail sends one signed JSON object per event. delivered maps to email.delivered, bounce to email.bounced, spamreport to email.complained, open to email.opened and click to email.clicked. The guide lists the rest.

Can I move my marketing email too?

No. Groundmail is transactional only. We keep marketing and cold email off our IPs so the shared pool stays clean for receipts, resets and alerts. Keep campaigns with a marketing tool and send transactional mail here.

Can I keep using SMTP while I migrate?

Yes. Point your SMTP settings at smtp.groundmail.dev on port 587 with credentials from the dashboard. Move HTTP sends over when you are ready.

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.