Skip to content
ParsedMail

Email parser that returns JSON

Forward any email to your inbox and get typed JSON at your webhook.

Try a sample

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

Operations lead at a desk with two monitors reviewing incoming orders
Sends JSON to
Your webhook REST API Zapier Make n8n Google Sheets via Zapier Any HTTP endpoint
How it works

From inbox to JSON in four steps. No templates, no regex, no MIME parsing on your side.

Office manager setting up an email forwarding rule on a laptop
Step 1

Create an inbox

Each workflow gets its own address on our domain.

orders-x72@in.parsedmail.com
Step 2

Describe the fields

Write them like you would to a colleague. We turn that into a typed schema.

order_numbertext
customer_nametext
productstable
totalmoney
delivery_datedate
Step 3

Forward emails

Add a forwarding rule in Gmail, Outlook or your mail server, or post emails to the API.

Forward to
orders-x72@in.parsedmail.com
Step 4

Receive JSON

A signed POST to your webhook, or fetch it from the API.

POST /hooks/orders
Signature: t=..,v1=..

{
  "order_number":
    "NW-48213",
  "total": 552.40,
  "currency": "USD",
  "confidence": 0.97
}
Why teams switch

Stop retyping emails. Orders, invoices and leads arrive in your systems as typed records, with a confidence score on every field.

It reads meaning, not layouts

Template parsers break the day a supplier redesigns their email. ParsedMail understands that "Amount due", "Balance" and "Total to pay" are the same total, in any layout and in dozens of languages. You describe the field once.

  • Dates, money, numbers and enums are validated, not just copied as text
  • Per-field confidence from 0 to 1 tells you what to trust
  • Quoted replies, signatures and footers are ignored

Extraction, eml_7q2...

vendor_name Halcyon Cloud Ltd 0.98
invoice_number INV-2026-0917 0.99
due_date 2026-10-31 0.96
total_due $756.00 0.97
purchase_order null 0.62

Attachments on this email

  • invoice-0917.pdf2 pages, parsed
  • delivery-note-scan.pdf1 page, read as scan
  • logo.pngskipped, logo

Attachments and PDFs in the same JSON

Invoices and purchase orders usually live in a PDF, not in the body. ParsedMail reads text PDFs, CSV files and scanned documents and merges what it finds into one record, including line-item tables. Logos and signature images are skipped and never counted.

How attachment parsing works

Built to be relied on

Webhooks are signed and retried five times over about 15 hours. Every email, extraction and delivery attempt is in a searchable log you can replay. Duplicate emails are caught by Message-ID and content hash and are never charged twice.

5
automatic retries per delivery
HMAC
SHA-256 signature on every POST
30 to 365
days of logs, by plan
0
charges for duplicate emails

Deliveries to https://erp.example.com/hooks

  • 14:02:11503retry in 1 min
  • 14:03:12503retry in 5 min
  • 14:08:13200delivered in 184 ms

Review queue

confidence 0.64
invoice_numberINV-2026-0917
total_due$756.00 was $75.60
due_date2026-10-31
Approve and deliverReject

A person checks only what the model is unsure about

Set a confidence threshold per inbox. Results below it wait in a review queue where a teammate corrects the value side by side with the original email. Only approved data is sent on, so a wrong total never reaches accounting.

See the review queue
For developers

An email parsing API that behaves like infrastructure

REST endpoints for inboxes, schemas and emails. Signed webhooks with idempotency keys. JSON Schema for every parser, so your code can validate what it receives.

  • Post raw MIME or JSON to /v1/inboxes/{id}/emails
  • Parse synchronously with POST /v1/parse
  • Replay any email after you change a schema
# Parse one email against a schema, synchronously
curl https://parsedmail.com/api/v1/parse \
  -H "Authorization: Bearer $PARSEDMAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "schema": "sch_8k2m1x",
    "email": "Subject: Order #NW-48213 confirmed ..."
  }'
const res = await fetch("https://parsedmail.com/api/v1/parse", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.PARSEDMAIL_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ schema: "sch_8k2m1x", email: rawEmail }),
});
const { data, confidence } = await res.json();
import os, requests

r = requests.post(
    "https://parsedmail.com/api/v1/parse",
    headers={"Authorization": f"Bearer {os.environ['PARSEDMAIL_KEY']}"},
    json={"schema": "sch_8k2m1x", "email": raw_email},
)
order = r.json()["data"]
// Express: verify ParsedMail-Signature (t=...,v1=...)
const [t, v1] = req.get("ParsedMail-Signature")
  .split(",").map(p => p.split("=")[1]);
const expected = crypto.createHmac("sha256", SECRET)
  .update(`${t}.${rawBody}`).digest("hex");
if (!crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
    || Date.now() / 1000 - t > 300) return res.sendStatus(400);

Response

{
  "data": {
    "order_number": "NW-48213",
    "total": { "amount": 552.4, "currency": "USD" }
  },
  "confidence": { "order_number": 0.99, "total": 0.98 },
  "needs_review": false
}
For operations leaders

What manual entry costs you every month

A person who retypes an order email spends two to four minutes on it, and makes an error now and then. Put your own numbers in and compare that with a plan.

A worked example

A distributor receives 1,500 order emails a month from suppliers and marketplaces. Each one takes about three minutes to copy into the ERP.

Manual time75 hours a month
At a loaded $32 an hour$2,400 a month
Growth plan, billed yearly$74 a month
Left for a personOnly the review queue

Savings calculator

Hours of retyping

Cost per month

Plan that covers this volume

, per month billed yearly

Above 25,000 emails a month, run several Scale workspaces.

See the plans

SSO with SAML

Okta, Microsoft Entra ID and Google Workspace on Scale.

Audit log

Who changed a schema, rotated a key or replayed an email.

Roles and seats

Owner, admin, member and reviewer roles per workspace.

Retention you control

From 7 to 365 days, or zero retention of raw email on Scale.

Data processing agreement

Standard DPA for Scale customers, signed online.

Status and uptime target

99.9% monthly uptime target on Scale, public status page.

Compare

How ParsedMail compares with the usual options

ParsedMail Template parsers Raw inbound services Manual entry
Setup for a new email layout Describe fields once New template per layout You write the parser None
Understands meaning Yes No, position and rules No, MIME parts only Yes
PDF and attachment data In the same JSON Often an add-on Raw files only Yes, slowly
Confidence per field Yes No No No
Human review queue Built in (Growth, Scale) No No It is all review
Webhook retries and replay Included Often an add-on Basic No
Cost per 1,000 emails From $24 a month Similar or higher Lower, plus your dev time About 50 hours of work

"We tried AI and it hallucinated."

The parser may only use what is in the email, nulls a missing value instead of guessing, and flags low confidence for review.

"Our emails contain customer data."

Encrypted in transit, retention you choose, never used for model training, DPA on Scale.

"We already have a developer."

Then they get an API with signed webhooks and JSON Schema in an afternoon, instead of a MIME parser to maintain for years.

Comparing specific tools? Read ParsedMail vs Mailparser, ParsedMail vs Parseur or ParsedMail vs Zapier Email Parser.

Pricing

Plans by monthly volume. Every plan includes webhooks, the API, retries and deduplication.

Yearly saves 50%

Starter

One workflow, one small team.

$24 / month

$288 billed yearly, instead of $588 Billed monthly, cancel any time

Get started
  • 1,000 emails per month
  • 300 PDF and attachment pages
  • 5 inboxes, unlimited schemas
  • Signed webhooks with automatic retries
  • REST API, Zapier, Make and n8n
  • Confidence score on every field
  • Deduplication and 30-day logs with replay

Growth

Most teams

Ops and finance teams running several workflows.

$74 / month

$888 billed yearly, instead of $1,788 Billed monthly, cancel any time

Get started
  • 5,000 emails per month
  • 2,000 PDF and attachment pages
  • 25 inboxes
  • Human review queue below your confidence threshold
  • AI classification across schemas
  • Line items from bodies and PDFs
  • 5 seats with roles, 90-day logs, failure alerts

Scale

Several teams, compliance and higher volume.

$249 / month

$2,988 billed yearly, instead of $5,988 Billed monthly, cancel any time

Get started
  • 25,000 emails per month
  • 10,000 PDF and attachment pages
  • Unlimited inboxes, custom inbound domain
  • SSO (SAML) and audit log
  • Configurable retention, zero retention option
  • Data processing agreement and invoices
  • 20 seats, priority processing queue

Prices in USD. No usage fees on top of the plan: when a month's limit is reached, parsing pauses and you can move to a higher plan in one click. Not sure yet? Try the demo first.

FAQ

Questions teams ask before they switch

What is an email parser?

An email parser reads incoming emails and pulls specific values out of them, such as an order number, a customer name or a total, so the data can go into another system without retyping. ParsedMail does this with AI and returns typed JSON to your webhook or API.

How do I parse an email to JSON with ParsedMail?

Create an inbox, describe the fields you want in plain English, then forward emails to the inbox address. Each email is parsed within seconds and the JSON is posted to your webhook or fetched over the REST API.

Will it break when a sender changes their email layout?

No templates or regex rules are involved. The parser reads the meaning of the email, so a new layout or a different supplier still lands in the same fields. When it is unsure, the confidence score drops and the email can go to the review queue.

Is AI accurate enough for invoices and orders?

Every field is typed and validated (dates, money, numbers, enums) and carries a confidence score from 0 to 1. On Growth and Scale, anything below your threshold waits in a human review queue instead of reaching your ERP.

Do I have to change my mail server?

No. You forward emails or set an automatic forwarding rule in Gmail, Outlook or your mail server. On Scale you can also receive mail on your own domain, such as [email protected].

What happens if my webhook is down?

Deliveries are retried automatically after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. Every attempt is logged, and you can replay any email from the log or pull the result over the API.

Does it read attachments and PDFs?

Yes. PDFs, CSV and text attachments are read into the same JSON, and scanned PDFs and images are read on paid plans. Attachment pages count toward the page limit of your plan.

Is my data used to train AI models?

No. Your emails are processed only to produce your JSON. Raw emails are kept for the retention period of your plan and Scale can switch to zero retention of raw email.

What if I go over my monthly limit?

There are no surprise bills. Parsing pauses at the limit, emails are still stored, and you can move to a higher plan in one click and replay them.

Does ParsedMail work with Zapier, Make and n8n?

Yes. Use a webhook trigger (Catch Hook in Zapier, Custom webhook in Make, Webhook node in n8n) as the endpoint, or call the REST API from any HTTP step.

Is there a free plan?

There is no free plan. You can run the demo on this page without an account, and a confirmed account gets a one-time sandbox of 10 emails. After that, plans start at $24 per month billed yearly.

Can I get a refund?

Payments are final, as described in the refund policy. That is why the demo and the sandbox exist: you can see your own emails parsed before you pay.

Your next order email could already be JSON

Run the demo with one of your emails, then send ten more through the sandbox before you choose a plan.