DocExtract

Bank statements in. Checked data out.

DocExtract reads a statement, pulls out every transaction, then tests the arithmetic. If the numbers don't add up, a person gets the file with the exact row highlighted.

How it works

Three steps, one API call.

1 · Extract

Read the page

An open document model reads the page image and returns bank, period, balances and every transaction as structured JSON.

2 · Verify

Check the math

Fixed rules test the result: opening plus transactions equals closing, each running balance follows the last, and printed totals match the rows.

3 · Review

Send doubts to a person

A file that fails comes back marked review, with a risk score and the row that broke, so a reviewer checks one line instead of the whole document.

The checks

All deterministic, so they don't depend on the model being right.

Reconciliation

Opening balance plus all transactions must equal the closing balance.

Running balance

Every row's balance must follow from the row before it. A break points at the edited or misread line.

Printed totals

Total deposits and withdrawals on the statement must match the sum of the rows.

Dates and duplicates

Dates inside the statement period and in order. Identical rows are flagged as a warning.

What it does not do

Read this before you rely on it.

  • A failed check means "send to a human". Arithmetic can't tell a misread digit from a deliberate edit.
  • An edit that keeps every balance consistent passes the checks. This is not fraud detection on its own.
  • Image-level forensics (spotting pasted or altered pixels) is not built yet.
  • It is a prototype. Accuracy has been tested only on clean, machine-made statements. Real scans and photos are untested.
  • On a CPU-only server a page takes about a minute. The web app turns PDFs into page images in your browser; the API itself takes images.

Runs where your data lives

The model is open-weight and runs on your own server, so statements are not sent to a third-party AI service. You control retention, and the API requires a key.

Open the app