JEXTRACT
Open app
document extraction // liteparse + typesafe jev

Documents
to data.
Two calls.

Define the fields you want. jextract parses the PDF locally in milliseconds, asks Jev where each field lives and which span is its value, then trims free-text spans to the exact words. Typed data with confidence and bounding boxes, in about half a second and $0.0005 for a one-page invoice.

A document with boxed lines flowing into a grid of dots forming a table
parse~5 msliteparse, local, no cloud
jev calls2 (+1)locate + pick · optional trim for free text
one-page invoice~0.3 s12 fields, measured
cost$0.0004per document · output tokens free
outputvalue + boxconfidence, page, bbox, candidates
what it does

Extraction as retrieval, not generation.

An LLM extractor reads the whole document and writes JSON, then you parse it, validate it and hope the number was not rounded. jextract treats the document as a set of chunks and the taxonomy as questions. Jev locates the chunk, code cuts typed candidates from it, Jev picks the one that is the value. The answer is always a span on the page with a probability attached.

1 · parseliteparsepositioned text → lines → segments → chunks, in memory
2 · locatejev · choiceper field: which chunk holds the value, or none
3 · pickjev · choiceper field: which typed candidate is the exact value
4 · refinejev · noul + choicefree text only: is the span exact? if not, which trim is
a real run · northwind invoice · 12 fields
parse4 ms
1 page · 5 chunks · 480 tokens
locate173 ms
12 choice questions over 5 chunks · 1 request
pick158 ms
12 choice questions over 38 candidates · 1 request
total337 ms · 9,132 tokens · $0.00038 · 12/12 found
A document split into chunk slabs, one highlighted with a crosshair and a filled probability bar
locate

One question per field, one request.

Every chunk of the document is the state. For each field Jev answers a single Choice: which chunk holds the value, or none. Twelve fields, sixty chunks, one round trip.

A document with boxed lines flowing into a grid of dots forming a table
pick

Spans, not generations.

Candidates are cut in code by type: dates, amounts, identifiers, label–value splits, proper nouns. Jev picks the exact span with a probability. Nothing is invented, and every value comes with the box it was read from.

A dotted timeline with three short blue stages and a stopwatch
speed

Hundreds of milliseconds, end to end.

Parsing is local and takes single-digit milliseconds. Each Jev round runs in about 150 ms; the third only fires for free-text fields whose span could carry extra words. Long documents are windowed and located in parallel.

taxonomies // presets, editable, or your own json

Start from a preset.

faq

Questions.

What is jextract?
jextract turns a PDF into structured data for a taxonomy you define. LiteParse extracts positioned text locally, then TypeSafe's Jev model answers two rounds of questions: which chunk holds each field, and which candidate span is the exact value. A one-page invoice with twelve fields takes about 300 milliseconds and costs about $0.0004.
How is this different from LLM document extraction?
LLM extraction asks a model to generate JSON from the whole document, then parses and validates it. jextract never generates: every value is a span that exists on the page, chosen from typed candidates with a calibrated probability, and free-text spans are trimmed to exact token windows the same way. That makes it deterministic to check, fast, and around ten times cheaper per document at list prices.
What is a taxonomy here?
A list of fields, each with a name, a one-sentence description and a type: string, id, date, money, number, percent, email, phone, enum or boolean. Presets cover invoices, contracts, résumés and purchase orders; you can edit them or send your own as JSON.
Does it work on scanned documents?
Yes with OCR enabled. LiteParse bundles Tesseract, so scanned pages are recognised locally; it is slower (seconds instead of milliseconds) and less accurate than born-digital PDFs.
Where do the confidence numbers come from?
Jev returns a probability for every option it is offered. The confidence on a field is the probability of the chosen span multiplied by the probability that the field is present at all. Absent fields are reported as absent rather than guessed.
ready

Try it on a sample, then your own PDF.