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.

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.

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.

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.

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.
Start from a preset.
Supplier invoices and receipts: parties, identifiers, dates, totals and payment details.
Commercial agreements: parties, dates, term, fees, termination, governing law and signatories.
Candidate profiles: contact details, current role, experience, education and expectations.
Buyer purchase orders: identifiers, parties, dates, totals and delivery terms.
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.

