Skip to content
ParsedMail

AI email parser

An AI email parser uses a language model to read each email the way a person would and fill a fixed set of typed fields, without templates or regex per sender. ParsedMail adds a confidence score for every field, returns null instead of guessing, and sends uncertain results to a review queue.

Sales team reviewing leads extracted from inbound email

Email received

From: Website <[email protected]> Subject: Fwd: Quote request ---------- Forwarded message ---------- From: Elena Brooks <[email protected]> Hello, we met your team at the Freight Tech Summit last week. We are looking at about 40 seats for our dispatch team and would like to start in early January, ideally the 6th. Budget is roughly $18k a year. You can reach me at 555 0187. Elena Brooks Operations Lead, Tidewater Logistics Sent from my phone

Fields described as

contact name, company, email, phone, number of seats, budget, desired start date, source (one of website, referral, event, other)

JSON delivered to your webhook

{
  "contact_name": "Elena Brooks", 0.98
  "company": "Tidewater Logistics", 0.96
  "email": "[email protected]", 0.99
  "phone": "555 0187", 0.82
  "number_of_seats": 40, 0.90
  "budget": { "amount": 18000, "currency": "USD" }, 0.78
  "desired_start_date": "2027-01-06", 0.84
  "source": "event" 0.93
}

How AI parsing differs from templates

Template parsers work from a sample. You highlight "Order #" and the value after it, and the tool remembers the position or the surrounding words. That is fast to set up and fully predictable, as long as every email from that sender looks the same. When a sender redesigns its notification, adds a line or switches to an HTML table, the template returns nothing or the wrong value, and someone has to notice.

An AI parser does not remember positions. A language model reads the whole message against your field list and decides that "Budget is roughly $18k a year" means a money value of 18,000 USD, whether it sits in the first paragraph or the signature block. One schema covers every sender writing about the same thing. You still get fixed keys and types, because ParsedMail validates the model output against the schema before anything leaves. The parse email to JSON page shows the output format in detail.

Template parserAI email parser
Setup per senderOne template eachNone, one schema per workflow
Free-text emailsWeakStrong
Layout changesTemplate breaksUsually unaffected
Uncertainty signalMatch or no matchConfidence score per field
Fully identical machine emailsVery goodVery good

What the model ignores

Real email is noisy. Forwarded messages carry headers of the original, replies quote the whole thread, and signatures repeat names and phone numbers that belong to the sender, not to the subject of the email. ParsedMail tells the model to skip quoted replies, signatures and legal footers, and to use only text that is actually in the message. It never fills a field from general knowledge. In the example above the forwarding wrapper from the website form is ignored and the contact data comes from the original sender.

Confidence scores and null instead of guessing

Every field gets a score between 0 and 1, and every email gets confidence_avg. A clearly printed order number scores high. "Roughly $18k" scores lower, because the exact figure is not stated. When a value is simply not in the email, the field is null. That matters more than it sounds: a parser that invents a plausible delivery date is worse than one that admits it does not know, because the invented value flows into your systems unnoticed.

When a value cannot be converted to its type, such as "next Tuesday-ish" for a date field, the field becomes null and a warning is added to warnings. A missing required field gets confidence 0. Your code, or a reviewer, decides what to do with it.

A review queue for the uncertain cases

On Growth and Scale each inbox has a confidence threshold, 0.80 by default. If any field scores below it, or a required field is missing, the email stops at needs_review instead of going to your webhook. A reviewer sees the original email next to the extracted values, corrects what is wrong and approves or rejects it. Approved emails are delivered with the corrected values. This is how teams automate most mail while keeping a person on the edge cases. Details are on the email parser with human review page.

Classification when one inbox gets many kinds of email

A shared address like [email protected] may receive purchase orders, shipping notices and invoices. Instead of one inbox per type, attach several candidate schemas to the inbox. The model picks the schema that fits each email and records it in classification:

"classification": {"schema": "sch_2Wd5", "name": "Shipping notice", "confidence": 0.94}

If no schema fits, the email goes to the review queue rather than being forced into the wrong shape. Classification is available on Growth and Scale.

When a template tool is the better choice

If you receive one kind of email from one system that never changes its layout, and you already use Zapier, the template-based Zapier Email Parser is free inside Zapier and may be all you need. It does not read PDFs, has no confidence scores and has no API of its own, so the trade-offs show up once senders multiply or attachments appear. A fair comparison is on the Zapier Email Parser alternative page.

Your data and the model

Emails are processed to fill your schema and nothing else. They are never used for model training. Raw email is kept for the retention period of your plan, from 30 days on Starter to configurable or zero retention on Scale, while the extracted JSON stays. More on the security page.

Writing field descriptions the model understands

The schema is the only instruction the parser gets, so clear names pay off. Name the business meaning, not the label in one sender's email: "requested delivery date" instead of "date 2". Add a short note where two values compete, such as "total including tax, not subtotal". Use an enum when you want one of a fixed set of answers, and a table for repeating rows like order lines. Mark only truly mandatory fields as required, because a missing required field sends the email to review. Test each change on a sample email in the dashboard, then replay stored mail if needed. The AI extraction page lists every field type.

Frequently asked questions

Does the AI parser need sample emails to learn from?

No. You describe the fields in plain English and the schema works on the first email. You can test it against a sample email in the dashboard before going live.

How accurate is AI email parsing?

It depends on how clearly the information is written. Instead of a single accuracy figure, ParsedMail gives a confidence score per field on every email, so you can measure it on your own mail and route low scores to review.

What does the parser do when a value is missing?

It returns null for that field. It does not guess. If the field is required, the email also gets confidence 0 for it and a warning.

Can I change the fields after going live?

Yes. Edit the schema at any time and its version increments. Stored emails can be replayed against the new version, and a replay of an already counted email is not counted again.

Is the output the same shape every time?

Yes. Keys come from the schema, keep their order and are coerced to their types before delivery, so your code never sees a surprise key.

Related

See your own email as JSON

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