email-webhook vs. SendGrid Inbound Parse: Which Should You Use?
SendGrid Inbound Parse is the most widely known way to receive email over HTTP. email-webhook does the same job with considerably less ceremony. This article breaks down exactly where they differ so you can choose the right tool.
How each approach works
SendGrid Inbound Parse works through your own domain. You point an MX record
at SendGrid's mail servers, configure an inbound parse domain in their
dashboard, and SendGrid forwards arriving mail to a URL you control โ as a
multipart/form-data POST.
email-webhook gives you a dedicated @email-webhook.com address the moment
you sign up. You point that address wherever you like (forward from your own
inbox, use it directly, set it as a reply-to), then configure a webhook URL in
the dashboard. Incoming mail is forwarded as a JSON POST.
Side-by-side comparison
| SendGrid Inbound Parse | email-webhook | |
|---|---|---|
| Setup | MX record change + domain verification + parse domain config | Sign up and paste a URL |
| Payload format | multipart/form-data |
application/json |
| Attachments | Binary multipart parts; count in attachments, metadata in attachment-info |
Inline base64 array in the JSON body |
| Email content stored? | Yes โ passes through SendGrid's infrastructure | No โ forwarded from memory, never written to disk |
| HTTP methods supported | POST only | POST, PUT, PATCH, DELETE, GET |
| Custom headers | Not configurable on the outgoing webhook request | Up to 5 per webhook |
| Own domain required | Yes โ you must control DNS for the receiving domain | No โ you use a @email-webhook.com address out of the box |
| Primary product focus | Email sending platform; inbound parse is a secondary feature | Purpose-built for receiving email over HTTP |
The payload format gap
This is the most practical difference day-to-day.
SendGrid delivers mail as multipart/form-data. Your handler has to extract
fields from a form post, not a JSON body โ which means framework-specific
parsing, extra middleware, and more boilerplate:
// SendGrid Inbound Parse handler โ multipart form-data
import multer from "multer";
const upload = multer();
app.post("/webhook", upload.any(), (req, res) => {
const from = req.body.from;
const subject = req.body.subject;
const text = req.body.text;
// `attachments` is a count; `attachment-info` is a JSON string with metadata.
// Actual file data arrives as binary multipart parts, accessible via req.files.
const attachmentCount = Number(req.body.attachments ?? 0);
const attachmentInfo = JSON.parse(req.body["attachment-info"] ?? "{}");
const files = req.files; // array of multer file objects
res.sendStatus(200);
});
email-webhook sends a plain JSON body. No form parser, no extra middleware:
// email-webhook handler โ plain JSON
app.post("/webhook", express.json(), (req, res) => {
const { from, subject, message, attachments } = req.body;
res.sendStatus(200);
});
Attachments are inline in the attachments array, each with a filename and
base64-encoded content. No multipart parser, no separate binary parts to
reassemble.
Setup complexity
Getting SendGrid Inbound Parse running requires:
- A domain you control with access to its DNS settings.
- Adding an MX record pointing at
mx.sendgrid.netโ which routes all mail for that subdomain through SendGrid. - Verifying the domain inside SendGrid's dashboard.
- Configuring an "Inbound Parse" entry with the hostname and destination URL.
- Waiting for DNS propagation.
With email-webhook:
- Sign up.
- Create a webhook with your URL.
- Send a test email to your
@email-webhook.comaddress.
No DNS changes. No domain required. No propagation wait. You can be receiving webhooks in under five minutes.
Privacy and data handling
SendGrid is part of Twilio's infrastructure. When a message hits their inbound parse pipeline, it passes through their systems before arriving at your endpoint. Your email content โ bodies, attachments, sender details โ transits and is processed on their servers.
email-webhook is designed as a pass-through. When an email arrives, it is parsed in memory and immediately forwarded to your endpoint. The body and attachment content are never written to disk. If you have Message Logs enabled, only metadata is stored (sender, subject line, HTTP status, duration) โ never the email content itself.
For teams routing business email, confidential notifications, or any privacy-sensitive messages through a third-party service, this distinction matters.
When SendGrid Inbound Parse is the right choice
- You are already using SendGrid for email sending and want a single vendor.
- You need to receive email at an address on your own domain (e.g.
support@mycompany.com) and can change its MX records. - You need the spam score, DKIM result, and SPF status that SendGrid includes in the payload.
When email-webhook is the right choice
- You want to receive webhook deliveries without touching DNS.
- Your handler is built to consume JSON โ you don't want to deal with
multipart/form-dataparsing. - You are building something where email content must not be stored by a third party.
- You want to use POST, PUT, PATCH, DELETE, or GET and send custom authentication headers with every delivery.
- You are building a serverless function, an AI pipeline, or any stateless HTTP handler and want the simplest possible integration.
Using email-webhook with your own domain
If you need to receive mail at your own domain address, you are not limited to
the @email-webhook.com address. Most email providers โ Gmail, Fastmail,
Postfix โ support forwarding rules. Set up a forwarding rule that sends mail
from support@mycompany.com to your @email-webhook.com address, and your
webhook fires on every delivery, no MX record change required.
Summary
Choose SendGrid Inbound Parse if you are already on SendGrid, need inbound mail on your own domain's MX record, or need the spam and authentication metadata it provides.
Choose email-webhook if you want a simpler setup, a clean JSON payload, stronger privacy guarantees, and a service built specifically for this use case. Get started in under five minutes โ