Skip to content
ParsedMail

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

Try a sample

No account or card. Demo emails are deleted after 24 hours.

Developer reviewing inbound email webhook payloads on a screen

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.

PlanPrice a monthEmail allowanceInbound routesLog retention
Free$0100 a day1 route1 day
BasicFrom $1510,000 a month5 routes1 day
Foundation$3550,000 a monthFull inbound routing5 days
Scale$90100,000 a monthSee plan routing terms30 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 mattersMailgun inbound routesParsedMail
What the webhook receivesMessage fields and attachments, or raw MIMEYour extracted fields as typed JSON
Order numbers and totalsYour extraction codeFields described in plain English
PDF contentsFiles delivered for your code to readRead with the email body
Confidence per fieldNot supplied as business field extractionScores from 0 to 1
Human reviewYour application handles itReview queue on Growth and Scale
Webhook authenticationSignature, timestamp and token; JSON uses X-Mailgun-Signature and X-Mailgun-Timestamp headersHMAC-SHA256 in ParsedMail-Signature
Delivery retriesUp to an 8 hour window; 406 stops retries5 retries over about 15 hours, then replay from the log
Price per messageLower for delivery; Basic starts at $15 for 10,000 emailsHigher because extraction is included; Starter $49 for 1,000 emails
Sending and receiving in one accountYesInbound parsing only
Raw MIME workflowDirect delivery through a URL ending in mimeBuilt 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

  1. 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.
  2. Describe the fields once. Reuse names such as order_number, total and line_items. Include what each field means and compare results from real bodies and PDFs.
  3. Map the signed webhook. Verify ParsedMail-Signature against the raw request body, then read event.data.data and the per-field scores in event.data.confidence. Use the Idempotency-Key header to avoid processing a repeated event twice.
  4. 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.

Frequently asked questions

Does Mailgun parse inbound email?

Yes. Mailgun parses inbound email into message fields such as subject, sender, body text, HTML and attachments, with stripped reply fields when parsing succeeds. It does not extract custom business fields such as order numbers or totals. ParsedMail reads those values and returns typed JSON with confidence scores.

How much does Mailgun inbound cost?

Mailgun inbound shares the email allowance of your plan. Free includes 100 emails a day and 1 route; Basic starts at $15 monthly for 10,000 emails and 5 routes. Foundation is $35 for 50,000 emails with full inbound routing, and Scale is $90 for 100,000 emails, using October 2026 pricing.

Can Mailgun extract data from attachments?

No, not custom business fields from the contents. Mailgun delivers attachments as file parts or, for JSON delivery, an array with base64 content. Your application must read the files to extract totals or line items. ParsedMail reads PDF attachments with the email body against your described fields.

Does Mailgun retry inbound webhooks?

Yes. Mailgun treats 200 as success and 406 as rejection without retry. Any other response is retried at 10 minutes, 15 minutes, 30 minutes, 1 hour, 2 hours and 4 hours, within an 8 hour window. Make your handler safe to repeat so a retry does not duplicate a record.

Can I keep Mailgun and add a parser?

Yes. Keep the existing Mailgun route and add a forward action to a ParsedMail inbox address for messages that need extraction. Run both in parallel for a week and compare results before changing downstream writes. You can keep sending through Mailgun while ParsedMail handles the extracted fields.

More from the blog

See your own email as JSON

Paste one into the demo, describe the fields and look at the result. No account needed.