Compare
Groundmail vs Resend
Both give you a clean API for sending email. Groundmail sends from mail servers and IP space we own, and gives you dedicated IPs or a whole dedicated server when you need isolation.
At a glance
Same send call. Different ground underneath.
Your app code barely changes. What changes is who runs the servers and IPs your mail leaves from.
| Topic | Groundmail | Resend |
|---|---|---|
| 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 marketing email |
| Send API | POST api.groundmail.dev/emails | POST api.resend.com/emails |
| API keys | Bearer gm_… | Bearer re_… |
| Node package | groundmail | resend |
| Other ways to send | SDKs for 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 |
Resend details come from Resend's public docs. Check them for current features and pricing.
What you get
Infrastructure we own, run by people who know mail
Our servers, our IPs
Dedicated IPs and dedicated servers
Transactional only
A team that has done this before
Switching
Switch in a few steps
- Create a gm_ API key in the dashboard
- Verify your sending domain (SPF, DKIM, return path)
- Point your client at api.groundmail.dev
- Re-point webhooks for delivered, bounced and complained events
- Send a canary, then shift traffic
Field-by-field details are in the Resend migration guide. Using React Email? See the React Email guide.
Mapping
api.resend.com → api.groundmail.dev
re_… API key → gm_… API key
POST /emails → POST /emails
npm i resend → npm i groundmailNode
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: "Reset your password",
html: "<p>Click the link to reset.</p>",
});FAQ
Questions about switching from Resend
How much code changes when I move from Resend?
Usually very little. Groundmail also takes POST /emails with from, to, subject and html or text. Swap the base URL to api.groundmail.dev, swap the key for a gm_ key, and verify your sending domain. The migration guide covers the optional fields.
Can I keep React Email?
Yes. React Email is a separate open-source toolkit. Pass your component to the Groundmail Node SDK, or render it to HTML and send that. The React Email guide in our docs shows both.
What does dedicated mean on Groundmail?
Two things, depending on what you need. Dedicated IPs give your mail its own reputation on our servers. The Dedicated plan goes further: your own mail server and IPs, built, warmed and managed by us, from $299/mo including 250,000 emails.
Can I send newsletters or cold email through Groundmail?
No. Groundmail is for transactional email only: password resets, receipts, alerts, invites. Keeping marketing and cold email off our IPs is what keeps the shared pool clean for everyone on it.
Is there a free plan?
Yes. Free includes 3,000 emails a month (100 a day) on one domain. It needs a verified domain and a card on file. Pro starts at $20/mo for 50,000 emails.
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.