Mailgun inbound parse alternative that returns typed JSON
A Mailgun inbound parse alternative makes sense when the code behind your route extracts order numbers, totals or values from PDFs. If all you need is the raw message posted to your endpoint, Mailgun Routes are cheap and good at that job. ParsedMail replaces that extraction code with typed JSON sent to a signed webhook, with a confidence score per field.
Try it on a real email, no account needed
What Mailgun inbound routes do well
Mailgun inbound email routing connects a received message to an action. Routes use filter expressions and forward(), store() and stop(). A forward() action can deliver to an email address or post the message to a URL. That is a useful foundation for ticket replies, message storage and apps that need the original conversation.
A Mailgun inbound webhook normally receives application/x-www-form-urlencoded, or multipart/form-data when attachments are present. A URL ending in json gets application/json, including an attachments array with base64 content. A URL ending in mime gets the raw message in body-mime. Changing the format changes how you receive the email, not whether it contains extracted business fields.
The POST includes subject, sender, recipient, headers, body-plain and, when available, body-html. Mailgun always supplies body-plain. Its stripped-text, stripped-signature and stripped-html fields depend on successful parsing and separate quoted replies and signatures. They do not identify your order number or invoice total. That distinction matters when comparing Mailgun with a parser.
Mailgun inbound pricing in 2026
The Mailgun pricing and receive HTTP documentation for October 2026 give the following plan limits. Inbound messages count against the same email volume, so include sending when sizing an account used in both directions.
| Plan | Price a month | Email allowance | Inbound routes | Log retention |
|---|---|---|---|---|
| Free | $0 | 100 a day | 1 route | 1 day |
| Basic | From $15 | 10,000 a month | 5 routes | 1 day |
| Foundation | $35 | 50,000 a month | Full inbound routing | 5 days |
| Scale | $90 | 100,000 a month | See plan routing terms | 30 days |
Logs and stored messages have different retention limits. Foundation has 1 day of message retention; Scale has up to 7 days. Longer logs do not mean the full message stays available for the same period. If your investigation needs the original email or attachment, plan your own storage around that distinction.
Mailgun inbound pricing buys transport and routing. Budget separately for reading PDFs, extracting fields and maintaining that code. The route price alone is a fair comparison only when delivery is the whole task.
Why teams look for a Mailgun inbound parse alternative
- Each sender needs extraction rules. A supplier puts the order number in the subject, another uses an HTML table, and another puts everything in a PDF. Mailgun delivers those parts. Your application still needs rules that produce the same fields from every layout and stay correct when the layout changes.
- Attachments contain the record. Receiving a file part or decoding base64 is only the first step. Reading quantities, line items and totals means adding document extraction to the handler. ParsedMail reads the body and PDF attachments against the fields you describe in plain English.
- A delivered value still needs checking. Successful HTTP delivery says nothing about whether your code selected the correct total. ParsedMail returns typed values and confidence scores per field. Growth and Scale add a review queue for uncertain results, so checking data can happen before it reaches the next system.
- Debugging starts after the log expires. Free and Basic retain Mailgun logs for 1 day. A report arriving later may require evidence you saved yourself. Keep transport logs, source messages and extracted results distinct when deciding what your support process needs.
The same delivery versus extraction distinction comes up in our SendGrid Inbound Parse alternative and Postmark Inbound alternative comparisons. Our CloudMailin alternative article covers another inbound delivery option.
Mailgun vs ParsedMail
| What matters | Mailgun inbound routes | ParsedMail |
|---|---|---|
| What the webhook receives | Message fields and attachments, or raw MIME | Your extracted fields as typed JSON |
| Order numbers and totals | Your extraction code | Fields described in plain English |
| PDF contents | Files delivered for your code to read | Read with the email body |
| Confidence per field | Not supplied as business field extraction | Scores from 0 to 1 |
| Human review | Your application handles it | Review queue on Growth and Scale |
| Webhook authentication | Signature, timestamp and token; JSON uses X-Mailgun-Signature and X-Mailgun-Timestamp headers | HMAC-SHA256 in ParsedMail-Signature |
| Delivery retries | Up to an 8 hour window; 406 stops retries | 5 retries over about 15 hours, then replay from the log |
| Price per message | Lower for delivery; Basic starts at $15 for 10,000 emails | Higher because extraction is included; Starter $49 for 1,000 emails |
| Sending and receiving in one account | Yes | Inbound parsing only |
| Raw MIME workflow | Direct delivery through a URL ending in mime | Built around extracted data sent to a webhook |
Mailgun wins on delivery price, keeping sending and receiving together, and handing raw MIME to your application. ParsedMail fits when the next system needs typed business fields rather than another message to decode. See parse email to JSON for the shape of the extracted result.
Neither webhook removes the need to handle repeated delivery. Mailgun treats 200 as success and 406 as rejected without retry. Other responses trigger retries at 10 minutes, 15 minutes, 30 minutes, 1 hour, 2 hours and 4 hours within an 8 hour window. ParsedMail retry delays are 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. Verify signatures and make your handler safe to repeat.
Cost math at about 1,200 parsed emails a month
For about 1,200 incoming emails a month, compare the complete extraction workflow rather than dividing the route price by messages.
- Mailgun Basic. From $15 a month covers 10,000 emails and 5 inbound routes, provided combined sending and receiving stay inside that allowance. Add your engineering time for sender layouts, PDF reading, field checks and fixes. Use your actual maintenance history rather than an assumed hourly saving.
- ParsedMail Growth. $149 a month, or $74 a month billed yearly, covers 5,000 emails and 2,000 attachment pages, plus the review queue and 5 seats. The email count fits; check attachment pages separately. Starter is $49 a month, or $24 billed yearly, but its 1,000 emails and 300 pages do not cover this entire flow.
ParsedMail has no usage fees on top of the plan. Parsing pauses at the limit, so Starter plus an assumed overage is not the comparison. If only part of the incoming mail needs extraction and that subset fits Starter, keep the other messages on Mailgun. Full allowances are on pricing.
What the switch looks like in practice
- Keep the Mailgun route. Create a ParsedMail inbox and add a
forward()action to its inbox address while preserving your existing delivery. Alternatively, use a separate inbound subdomain and change its MX to ParsedMail on Scale, which includes a custom inbound domain. - Describe the fields once. Reuse names such as
order_number,totalandline_items. Include what each field means and compare results from real bodies and PDFs. - Map the signed webhook. Verify
ParsedMail-Signatureagainst the raw request body, then readevent.data.dataand the per-field scores inevent.data.confidence. Use theIdempotency-Keyheader to avoid processing a repeated event twice. - Run both in parallel for a week. Compare results without creating duplicate downstream orders. Check missing values, totals and attachments before switching the production mapping and removing extraction code for that flow.
This handler sketch shows the boundary moving. Verification and storage helpers are application code; the complete signature check is on the inbound email webhook page.
// Before, after verifying the Mailgun request
const order = extractOrder(mailgunBody["body-plain"], attachments);
saveOrder(order);
// After, after verifying ParsedMail-Signature over the raw body
const event = JSON.parse(rawBody);
const order = event.data.data;
saveOrderOnce(order, headers["idempotency-key"]);When to stay on Mailgun
Stay on Mailgun when you store conversations, route messages by recipient, need raw MIME or already maintain a small parser for a layout you control. Its lower delivery price is a real advantage. Paying for field extraction adds little when your application only needs the message.
If your team also sends from the same Mailgun domain, email blacklist monitoring can help you know whether the sending IP or domain lands on a blacklist. That sending concern remains separate from choosing how inbound business data reaches your app.
Move an extraction flow when changing layouts and PDFs keep producing maintenance work, or when uncertain fields need a review step. Keep Mailgun for the flows it already handles well. Try the order sample above, then compare your own messages before choosing a plan.