SendGrid Inbound Parse alternative
SendGrid's Inbound Parse posts your email as multipart form data and retries failed deliveries for 72 hours before dropping them, with no notification in the dashboard. CloudMailin delivers each message as clean JSON and records every delivery attempt in a history you can search.
The difference that matters
If your endpoint returns an error, SendGrid retries for 72 hours and then drops the message. Their documentation notes that there is no dashboard notification for failed posts. Messages received through Inbound Parse also never appear in SendGrid's Email Activity feed, so there is no record to check afterwards.
CloudMailin records every delivery attempt along with the HTTP status your server returned, and keeps every message in a searchable history. A failing endpoint shows up in your dashboard rather than as missing data, and you can answer "did we receive it?" without digging through your own logs.
Fwd: signed contract
jenny@customer.co · today 09:31
Delivery attempts
POST https://app.example.com/incoming
POST https://app.example.com/incoming
Why switch
SendGrid's Inbound Parse webhook works, and plenty of applications run on it. These are the other differences that usually prompt a move.
Inbound Parse posts multipart form data, with attachments as file uploads and no JSON option. CloudMailin lets you pick the format for each address: normalized JSON, multipart or the raw message. You can change it from the dashboard at any time.
Inbound Parse requires MX records on a dedicated subdomain, and SendGrid's docs warn against pointing your root domain at it. CloudMailin can receive for a single address, a subdomain or your entire domain, including wildcard addresses.
Inbound Parse caps messages at 30MB and only runs its spam check on messages under 2.5MB. CloudMailin handles messages up to 50MB depending on plan, with no limit on dedicated servers. If you want spam scoring, you can turn it on for each address.
CloudMailin can write attachments, or the full message, directly to your own S3, Azure, Google Cloud or S3-compatible bucket and hand your webhook the URLs. Your files stay in your infrastructure.
Side by side
| SendGrid Inbound Parse | CloudMailin | |
|---|---|---|
| Webhook format | Multipart form data, or raw | ✓ JSON, multipart or raw, per address |
| Message history | ✕ Not shown in Email Activity | ✓ Searchable, with per-message status |
| Failed delivery visibility | ✕ No dashboard notification | ✓ Every attempt recorded with HTTP status |
| Root domain receiving | ✕ Dedicated subdomain only | ✓ Yes, including wildcards |
| Maximum message size | 30MB | ✓ Up to 50MB, unlimited on dedicated servers |
| Spam scoring | ✕ Only messages under 2.5MB | ✓ Optional, per address |
| Message and attachment storage | Posted to your endpoint | ✓ Your own S3, Azure or GCS bucket |
| Outbound sending | ✓ Transactional and marketing campaigns | Transactional only * |
| Inbound email | One feature of a sending platform | ✓ The product |
* Transactional only is deliberate. Sending newsletters and password resets through the same pipes ties your most important messages to the reputation of your bulk sends.
SendGrid details from their own documentation: Inbound Parse, retry behaviour, Email Activity. Checked July 2026. Tell us if anything is out of date.
The code
// multipart/form-data with numbered attachment fields
app.post('/parse', upload.any(), (req, res) => {
const envelope = JSON.parse(req.body.envelope);
const attachmentInfo = JSON.parse(req.body['attachment-info'] || '{}');
const files = req.files; // attachment1, attachment2, ...
res.sendStatus(200);
});
app.post('/incoming_mails', (req, res) => {
const { envelope, headers, plain, html, attachments } = req.body;
res.sendStatus(200);
});
The JSON version is usually less code than parsing multipart form fields.
Migration
Create a CloudMailin address and pick the format your app prefers.
Update your webhook handler. The JSON version is usually less code than parsing multipart form fields.
Point MX records at CloudMailin. You can run both side by side while you test, Inbound Parse on the old subdomain and CloudMailin on a new one.
Support
With CloudMailin our engineers also run support. They have in-depth knowledge of the whole platform, so when something looks wrong you talk to someone who can see both ends of the problem. There is a phone number you can actually call, and support is part of the service rather than a paid add-on.
If you want marketing campaigns and audience management from the same vendor, SendGrid covers ground that we don't. CloudMailin offers a fantastic transactional outbound but not marketing email, and inbound is still the product.
Create an address and watch the first message arrive as JSON.
Questions
Point MX records at CloudMailin and receive your first message as JSON in minutes.