document extraction // liteparse + typesafe jev

Documents
to data.
Two calls.

Define the fields you want. jextract parses the PDF locally, then asks Jev where each field lives and which span is its value. You get typed data with a confidence and a bounding box for every field, in under a second and about $0.0005 for a one-page invoice.

Fig 1 · the sample invoice is parsed into six chunks, a reading head locates and picks each field, and twelve sorts come out as tall as their confidence. Pick a sort or use the arrow keys.
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
Northwind invoice, 12 fieldsMeasured run
  1. 1
    ParseLiteParse, local4 ms

    Positioned text becomes lines, then segments, then chunks, all in memory.

    1 page, 5 chunks, 480 tokens
  2. 2
    LocateJev, one Choice per field173 ms

    Which chunk holds the value, or none.

    12 questions over 5 chunks, 1 request
  3. 3
    PickJev, one Choice per field158 ms

    Which typed candidate is the exact value.

    12 questions over 38 candidates, 1 request
  4. 4
    RefineJev, free text only—

    Is the span exact? If not, which trim is.

    Not in this measurement. Adds about 150 ms when a span needs trimming.
Total337 ms, 9,132 tokens, $0.00038, 12/12 found
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.

Requests
1
Questions
1 / field
Window
22k tok
How locate works
Fig 2 · one drawer per chunk plus none, each opened by Jev's probability for the chosen field; pick a card or use the arrow keys.
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.

Candidates
≤ 24
Generated
0 tokens
Output
span+box
How pick works
Fig 3 · blades cut typed spans from the located line into a rack capped at 24; each rises by Jev's probability and the top one is picked. Pick a field or use the arrow keys.
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.

Parse
3 ms
Pick
161 ms
Sample run
813 ms
Every stage, timed
Fig 4 · the sample invoice run on a split-time stopwatch: parse, locate, pick, refine, slowed 4×; click a sub-dial or use the arrow keys.
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.