Skip to content
ParsedMail

SendGrid Inbound Parse alternative that returns parsed JSON

ParsedMail is a SendGrid Inbound Parse alternative for teams that want the data inside the email, not the email itself. SendGrid posts the raw message as multipart form data (text, html, headers, attachments) and leaves the extraction to your code. ParsedMail reads the body and PDF attachments against a schema you describe and posts typed JSON with a confidence score per field.

Office manager setting up an email forwarding rule on a laptop

Email received

From: Purchasing <[email protected]> To: [email protected] Date: Wed, 14 Oct 2026 16:05:00 -0400 Subject: PO 88214, please confirm Hello, Please ship the following on PO 88214: SKU HL-2210 Stainless cleat 6in x 40 SKU HL-3307 Dock line 3/4in 25ft x 12 Deliver to our Norfolk yard, 1200 Water Street, Norfolk, VA 23510. We need it on site by Friday, October 23. Thanks, Renee Caldwell Harborline Marine Supply

Fields described as

order number, customer name, ship to address, line items with sku and quantity, requested delivery date

JSON delivered to your webhook

{
  "order_number": "88214", 0.99
  "customer_name": "Harborline Marine Supply", 0.95
  "ship_to_address": "1200 Water Street, Norfolk, VA 23510", 0.97
  "line_items": [
    { "sku": "HL-2210", "quantity": 40 },
    { "sku": "HL-3307", "quantity": 12 }
  ], 0.94
  "requested_delivery_date": "2026-10-23" 0.90
}

Raw inbound mail or parsed data

SendGrid Inbound Parse is a mail receiver. You point the MX record of a hostname at SendGrid (priority 10, mx.sendgrid.net), and every message to that hostname is posted to your URL. By default the POST is multipart/form-data with parts such as headers, from, to, subject, text, html, envelope, attachment-info and one part per attachment. There is also a raw mode that sends the full MIME message in one email field. Either way, the email arrives as an email.

That is the right shape if your product is a mail client or a help desk. It is the wrong shape if what you need is the PO number, the ship-to address and the line items, because every team then writes the same code: decode the parts, strip quoted replies and signatures, read the PDF, find the values, and keep those rules alive when a sender changes its template.

ParsedMail does that second half. Each workflow gets an inbox address, you describe the fields in plain English, and your endpoint receives one signed POST per email with the values already extracted and typed. The example above is a real-shaped purchase order and the JSON your webhook would get. How the reading works is covered on the AI email parser page.

Side by side comparison

Facts about SendGrid come from its Inbound Parse documentation, checked in October 2026.

SendGrid Inbound ParseParsedMail
What your endpoint receivesThe message: multipart form fields, or the raw MIME in one fieldThe data: a JSON object with your fields, typed, plus sender and subject
Field extractionYour codeA language model against your schema, with a 0 to 1 confidence per field
PDF and scanned attachmentsDelivered as file parts; reading them is your jobRead as part of the email; scans and images on paid plans; first 8 files per email
Message sizeSendGrid recommends keeping messages under 30 MBUp to 25 MB per email
Request authenticationOptional security policy with an ECDSA signature or OAuth tokenHMAC-SHA256 signature on every delivery, timestamped, with an idempotency key
Failed deliveries5xx responses are queued and retried; messages are dropped after 3 days5 retries over about 15 hours, then the email stays stored and can be replayed from the log or the API
RedirectsNot followed, the URL must be exactHTTPS endpoint on port 443 or 8443
DNSMX of your hostname points to SendGridNo DNS needed: forward to an address on in.parsedmail.com; custom inbound domain on Scale
Human check of uncertain valuesNot part of the productReview queue on Growth and Scale
Pricing basisPart of a SendGrid account, see SendGrid's pricing for your planPer email, with a separate page allowance for attachments, from $49 a month

When SendGrid Inbound Parse is the better choice

Keep SendGrid if you need the whole message and nothing else. Typical cases:

  • You are building reply-by-email for comments or tickets, and you store the text and HTML as written.
  • You archive messages for compliance and need every header and the original MIME.
  • You already send through SendGrid, your volume is high, and your team owns a parser that works for a small set of fixed, machine-generated layouts.
  • You need the SPF and DKIM results and the spam score that SendGrid adds to each POST.

In those cases a raw inbound pipe is cheaper and simpler, and adding a parsing layer on top would only add cost.

When ParsedMail fits better

  • The values matter, not the message. Purchase orders, supplier invoices, lead notifications, booking confirmations and carrier updates, where the next system needs fields. See purchase orders to ERP and lead emails to CRM.
  • Many senders, many layouts. One schema covers every supplier, because the model reads meaning instead of positions. A new customer does not need a new regex.
  • The data is in a PDF. Invoices and POs often live in the attachment, and ParsedMail reads it together with the body. Details on attachments and PDF parsing.
  • Wrong values are expensive. Every field has a confidence score, missing values come back empty instead of guessed, and anything under your threshold can wait for a person in the review queue.
  • No mail team. Nobody has to own MX records, MIME decoding and a parser for each sender.

What the code looks like after the switch

A typical Inbound Parse handler reads the form parts, decodes charsets, finds the attachment files, and then runs its own extraction. After moving to ParsedMail the handler verifies a signature and reads fields that are already there:

// Express, raw body for the signature check
app.post("/hooks/parsedmail", express.raw({ type: "application/json" }), (req, res) => {
  if (!verify(req.get("ParsedMail-Signature"), req.body, process.env.PARSEDMAIL_WHSEC)) {
    return res.sendStatus(400);
  }
  const event = JSON.parse(req.body);
  const po = event.data.data;          // { order_number, ship_to_address, line_items, ... }
  if (event.data.needs_review) return res.sendStatus(200); // a person checks it first
  queue.add("create-sales-order", po, { jobId: req.get("Idempotency-Key") });
  res.sendStatus(200);
});

The full signature check, in Node and Python, is on the inbound email webhook page, and every endpoint is listed in the email parsing API reference.

How to migrate from SendGrid Inbound Parse

  1. List your inbound flows. Usually one hostname per flow, such as orders, invoices or leads. Each becomes a ParsedMail inbox with its own address.
  2. Describe the fields. Reuse the field names your current parser outputs, so the services downstream keep working without new mappings.
  3. Replay a sample. POST 20 to 50 stored messages as raw MIME to /v1/inboxes/{id}/emails and compare the JSON with what your parser produced. The format is described in sending emails to the API.
  4. Run both in parallel. Keep the SendGrid MX in place and forward or BCC a copy of the live mail to the new inbox address for a week.
  5. Switch over. Point the senders, or your forwarding rule, at the ParsedMail address, then retire the old handler and the parsing code behind it.

If you only need to move one hostname and keep SendGrid for sending, nothing else changes on your outbound side.

Cost of a parser you maintain yourself

The inbound pipe is rarely the expensive part. The expensive part is the extraction code behind it: rules per sender, PDF handling, edge cases, and the on-call ticket when a supplier redesigns its order confirmation. Count the engineering hours you spent on that code in the last quarter and compare them with a plan price.

ParsedMail Starter is $49 a month, or $24 a month billed yearly, for 1,000 emails and 300 attachment pages. Growth is $149 a month for 5,000 emails, 2,000 pages, 5 seats and the review queue. Scale is $499 a month for 25,000 emails, 10,000 pages, a custom inbound domain, SSO and an audit log. Every limit is on the pricing page.

Frequently asked questions

Is there an alternative to SendGrid inbound parse that extracts fields?

Yes. ParsedMail receives the email the same way, at an inbox address, but posts the extracted fields as typed JSON instead of the raw message. You describe the fields in plain English, and each value comes with a confidence score, so your handler stores data instead of parsing MIME.

Does SendGrid inbound parse support attachments?

Yes. SendGrid posts each attachment as its own form part, with metadata in attachment-info, or the whole MIME message in raw mode. It does not read the attachment for you. ParsedMail reads PDFs, CSV and text files, and scanned PDFs and images on paid plans, as part of extraction.

How do I secure an inbound email webhook?

Verify a signature on every request against the raw body and reject old timestamps. SendGrid offers an ECDSA signature or OAuth through a security policy. ParsedMail signs every delivery with HMAC-SHA256 over the timestamp and body and sends an idempotency key, so retries never create duplicates.

What is the size limit for SendGrid inbound parse?

SendGrid recommends keeping the total message, attachments included, under 30 MB, and runs its optional spam check only on messages of 2.5 MB or less. ParsedMail accepts emails up to 25 MB and reads the first 8 attachments of each email.

Can I keep SendGrid for sending and use ParsedMail for inbound?

Yes. Inbound and outbound are independent. Point one inbound flow at a ParsedMail inbox address or forward a copy to it, and keep sending through SendGrid as before.

Do I need to change DNS to use ParsedMail?

No. Every inbox has an address on in.parsedmail.com, so a forwarding rule or a BCC is enough. On Scale you can receive on your own inbound domain by pointing its MX at ParsedMail.

Related

See your own email as JSON

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