Email parser that returns JSON
Forward any email to your inbox and get typed JSON at your webhook in seconds, attachments and PDFs included.
From inbox to JSON in four steps. No templates, no regex, no MIME parsing on your side.
Create an inbox
Each workflow gets its own address on our domain.
orders-x72@in.parsedmail.com
Describe the fields
Write them like you would to a colleague. We turn that into a typed schema.
Forward emails
Add a forwarding rule in Gmail, Outlook or your mail server, or post emails to the API.
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
}
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...
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 worksBuilt 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.64A 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 queueOne parser for every email that carries data
All use casesInvoices to accounting
Vendor, totals, due date and line items from PDF invoices sent to ap@.
invoice_number, total_due, due_date
Read the use caseOrders to ERP
Supplier and marketplace order emails become sales orders.
order_number, items[], ship_to
Read the use caseLeads to CRM
Form notifications and partner referrals with consistent fields.
name, company, email, budget
Read the use caseBooking confirmations
Hotel, flight and venue confirmations into one calendar.
reference, check_in, guests
Read the use caseShipping notifications
Carrier, tracking number and ETA from every courier.
carrier, tracking_number, eta
Read the use caseSupport emails
Classify intent and pull order IDs before a ticket opens.
intent, order_id, urgency
Read the use caseJob applications
Applicant emails and CV attachments into ATS fields.
name, role, years_experience
Read the use caseMarketplace notifications
Sales from every channel in one order format.
channel, order_id, payout
Read the use caseEmail to spreadsheet
A row per email in Google Sheets or Excel.
one row per email
Read the use caseAn 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
}
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 time | 75 hours a month |
| At a loaded $32 an hour | $2,400 a month |
| Growth plan, billed yearly | $74 a month |
| Left for a person | Only 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.
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.
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.
Plans by monthly volume. Every plan includes webhooks, the API, retries and deduplication.
Starter
One workflow, one small team.
$288 billed yearly, instead of $588
Billed monthly, cancel any time
- 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 teamsOps and finance teams running several workflows.
$888 billed yearly, instead of $1,788
Billed monthly, cancel any time
- 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.
$2,988 billed yearly, instead of $5,988
Billed monthly, cancel any time
- 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.
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.