Document extraction · audited by code

Verifiable Extraction — pick a report, watch code catch the error

Messy financial PDF → clean structured data, parsed in your browser → and the math is re-checked by code, not guessed by a model.

The hard part of AI document work isn't pulling text out — it's being sure it's right. So the model only reads and classifies; tested code does every calculation.

1 · Pick a report

Each is a public record published by the Ohio Auditor of State — not affiliated with any client. Different townships, different counties, and different column structures (3, 4, even 5 fund columns) — the same code reads and verifies them all.

Entity
Allen Township, Darke County
Fiscal year end
December 31, 2024
Basis
Regulatory Cash Basis
Statement
Combined Statement of Receipts, Disbursements and Changes in Fund Balances

2 · The source page — rendered live in your browser

The report you pick above is rendered right here with pdf.js — each figure read with its position on the page, so the table below is provably grounded in the real document.

Every report is rendered and verified entirely in your browser — nothing is uploaded. No server, no network call. That privacy is the point.

Loading the bundled Allen Township sample…

The rendered source page. Hover a row in the table below to highlight that figure's box on the original document — the link from data back to source.

3 · The extraction (every figure is editable)

Every line item the model pulled from the statement, with the page it came from. The model's job ends here — it reads and classifies, it never does the arithmetic. Click any number and change it — the checks below recompute instantly.

Line item General Special Revenue Combined Total Source Page

4 · The verification (live, in your browser)

These three tie-out checks are a JavaScript port of the repo's validate.py. They run on the data above — right now, on this page, with no server call:

25 checks run · 0 exceptions.

5 · Watch it catch the error

Edit any cell yourself, or click below to inject one realistic mistake — a single transposed digit in a disbursement line item of the currently selected report, computed from its own figures (not a canned number). The same checks re-run instantly. Reset to restore the clean statement.

When the figure is wrong, the live checks above flip to red and name the exact failing check and offending cell — the wrong number cannot pass.

One transposed digit, caught automatically — before it ever reaches a human.

6 · Model alone vs. verified pipeline

Model alone

≈ 249,000

An LLM guesses the disbursements total. Plausible. Unchecked. Off by hundreds — and nothing flags it.

Verified pipeline

249,222

Code sums the line items from the source page and ties it out. FOOT, CROSSFOOT, ARTICULATE all pass — or it tells you exactly what failed.

The model proposes. Tested code decides.

Bring this discipline to your documents

I build this for messy documents in any domain — finance, legal, healthcare, insurance, government.