Case studies · real engine runs

Five statements, one run each — including the row that does not tie

Every figure on this page came out of the same engine that runs when you drop a file. The PDF is linked beside each case, and the engine's own output is downloadable next to it. Four of the five documents were written for this test — the institution names are fictional and say so on the page. The fifth is a real three-page excerpt of a ten-page business statement, with the account number masked.

Updated November 2026 · 9 min read

A converter demo usually shows one clean page and one clean result. That pairing proves nothing, because it is the pairing you get from a tool that is guessing. The useful question is narrower: when this run is over, can you tell where the output stops matching the paper?

So these five cases are not beauty shots. Each document isolates one thing that breaks extraction, and each case reports what the run actually returned — the row count, the re-added closing balance, the variance, and every row where the printed balance would not follow from the one above it.

Case 1Synthetic document

A business checking statement that continues onto a second page

Running-balance column · 2 pages · the second page has no column headers

Page one of a synthetic business checking statement, with a running balance columnPage two of the same statement: activity continues with no column headers

Open the PDF · run on 2026-11-02 · engine 11s · 2 file page(s)

Rows on the paper
26
Lines read
26
Printed opening
41,852.55
Printed closing
45,779.21
Re-added closing
45,779.21
Variance
0.00
Run says balanced
no
Every paper row accounted for
yes
2 rows where the balance does not follow
  • 2025-06-26 · CHECK 1045 — printed 43,727.98, the row above gives 43,727.96 (difference 0.02)
  • 2025-06-27 · ACH DEBIT INSURANCE PREMIUM — printed 41,751.96, the row above gives 41,751.98 (difference 0.02)
DateDescriptionAmountPrinted balance
2025-06-02COUNTER DEPOSIT · BANDOLIER TX12,400.0054,252.55
2025-06-03ACH CREDIT SUMMIT OUTFITTERS LLC INVOI8,250.0062,502.55
2025-06-04CHECK 1041-1,860.0060,642.55
2025-06-04CHECK 1042-742.1559,900.40
2025-06-05CARD PURCHASE RIDGE SUPPLY CO-318.4259,581.98
2025-06-06WIRE OUT HAULMARK FREIGHT-4,900.0054,681.98
2025-06-09ACH DEBIT PAYROLL 06/09-9,412.1845,269.80
2025-06-09ACH DEBIT PAYROLL TAX 06/09-1,128.4444,141.36

First 8 rows of 26. Full output: the engine's own markdown.

Case 2Synthetic document

A personal checking statement with no running balance at all

Debits and credits in two columns · balance printed only at the top and the bottom

A synthetic personal checking statement with separate debit and credit columns and no balance column

Open the PDF · run on 2026-11-02 · engine 1s · 1 file page(s)

Rows on the paper
14
Lines read
14
Printed opening
—
Printed closing
—
Re-added closing
—
Variance
0.00
Run says balanced
no printed balances to tie
Every paper row accounted for
yes
DateDescriptionAmountPrinted balance
2025-03-03DIRECT DEPOSIT NORTHSIDE PEDIATRICS PA2,486.10—
2025-03-05CHECK 312 RENT-1,650.00—
2025-03-06DEBIT CARD KROGER #448-132.47—
2025-03-08DEBIT CARD CITY WATER UTILITY-68.20—
2025-03-11ACH DEBIT AUTO LOAN 8842-402.66—
2025-03-12DEBIT CARD PHARMACY-41.09—
2025-03-17DIRECT DEPOSIT NORTHSIDE PEDIATRICS PA2,486.10—
2025-03-18CHECK 313 ROOF REPAIR-890.00—

First 8 rows of 14. Full output: the engine's own markdown.

Case 3Synthetic document

A credit card statement printed newest first

Reverse chronological · payments and credits as negative amounts

A synthetic credit card statement printed newest first, with payments shown as negative amounts

Open the PDF · run on 2026-11-02 · engine 1s · 1 file page(s)

Rows on the paper
10
Lines read
10
Printed opening
—
Printed closing
—
Re-added closing
—
Variance
0.00
Run says balanced
no printed balances to tie
Every paper row accounted for
yes
DateDescriptionAmountPrinted balance
2025-04-18HARDWARE STORE94.77—
2025-04-20PAYMENT THANK YOU-800.00—
2025-04-24GROCERY 4482188.31—
2025-04-29AIRLINE TICKET612.40—
2025-05-03ANNUAL FEE95.00—
2025-05-06OUTDOOR EQUIPMENT CO1,318.00—
2025-05-09SERVICE STATION 447172.14—
2025-05-11AUTOPAY THANK YOU-1,204.55—

First 8 rows of 10. Full output: the engine's own markdown.

Case 4Synthetic document

The same business statement, scanned

A photograph of the page: skewed, grainy, JPEG-compressed — the OCR path

A scanned, skewed, grainy copy of the business checking statement

Open the PDF · run on 2026-11-02 · engine 4s · 1 file page(s)

Rows on the paper
20
Lines read
20
Printed opening
41,852.55
Printed closing
44,977.26
Re-added closing
44,977.26
Variance
0.00
Run says balanced
yes
Every paper row accounted for
yes
DateDescriptionAmountPrinted balance
2025-06-02COUNTER DEPOSIT BANDOLIER TX12,400.0054,252.55
2025-06-03ACH CREDIT SUMMIT OUTFITTERS LLC INVOI8,250.0062,502.55
2025-06-04CHECK 1041-1,860.0060,642.55
2025-06-04CHECK 1042-742.1559,900.40
2025-06-05CARD PURCHASE RIDGE SUPPLY CO-318.4259,581.98
2025-06-06WIRE OUT HAULMARK FREIGHT-4,900.0054,681.98
2025-06-09ACH DEBIT PAYROLL 06/09-9,412.1845,269.80
2025-06-09ACH DEBIT PAYROLL TAX 06/09-1,128.4444,141.36

First 8 rows of 20. Full output: the engine's own markdown.

Case 5Real statement

A real business statement, ten pages long, three of them included here

A real bank's export · scanned pages · a running balance on every row

Page one of a real business checking statement, redacted account numberPage three of the same real statement, marked continued

Open the PDF · run on 2026-11-02 · engine 20s · 3 file page(s)

Rows on the paper
64
Lines read
51
Printed opening
—
Printed closing
—
Re-added closing
—
Variance
0.00
Run says balanced
no printed balances to tie
Every paper row accounted for
no — 13 not read
DateDescriptionAmountPrinted balance
2024-07-01TRACTOR SUPPLY # 220 S99.48—
2024-07-01HEVENOR LUMBER C79.05—
2024-07-01Prime Video Channels7.30—
2024-07-01GEICO PREM COLL618.03—
2024-07-02PY *U Store It175.00—
2024-07-02WAL-MART #112638.00—
2024-07-02WAL-MART 4112636.47—
2024-07-02THE HOME DEPOT #654779.12—

First 8 rows of 51. Full output: the engine's own markdown.

What these runs do and do not prove

They prove that five differently-shaped documents were read, that the lines on the paper came out as lines, and that the run reported where its own numbers stopped agreeing with the printed ones. They do not prove that your statement will read the same way: a layout we have not seen is a layout we have not seen, and the run will tell you so rather than fill the gap.

Two of the cases exist precisely to make that visible. In case one a single printed balance is two cents off the arithmetic, and the run names that row and the row after it — because the next printed balance was worked out from the wrong one, so the break shows up twice and nowhere else. Case four is a scan of the same page: the difference between one and four is the difference the paper itself makes, not a setting we turned up. And in case five the run reports that it did not account for every row on the paper, which is the only thing that stops it from calling the statement balanced — a statement with unseen rows is not a balanced statement, whatever the arithmetic says.

Nothing on this page was edited after the run. If you want to check that claim, the PDFs and the engine markdown are both one click away, and scripts/convert_bank_cases.mjs is the only thing that writes the numbers above.

Run your own

Drop a statement on the converter and you get the same figures for your own file: the lines read, the re-added closing balance, the variance, and the rows that do not follow. Three files are free, sixty pages in total, no card. Bank statements to Excel · to QuickBooks (.QBO)

Common questions

Are these real customer statements?+

One of them is a real business statement (three pages of ten, account number masked). The other four were written for this test so that each one isolates a single failure mode; the bank names on them are made up. Both kinds are labelled as such on the page — a case study that quietly mixes the two would be worthless.

Why show a run that fails?+

Because the failing run is the one that tells you whether the tool is honest. Any converter returns a clean-looking spreadsheet; the question is whether it tells you where the spreadsheet stops matching the paper. The first case below carries a printed balance that is two cents off, and the run names the row and the difference instead of smoothing it over.

Does this mean you support every bank's format?+

No. We keep no per-bank templates. What the engine reads, it reads from the layout in front of it; what it cannot place, it keeps as printed and flags. These five cases show five layouts being read — they are not a promise about the sixth.

How were the numbers on this page produced?+

scripts/convert_bank_cases.mjs sends each PDF to the engine, saves the markdown the engine returns, and runs it through the same parser the product uses. The JSON it writes is what this page renders. There is no hand-entered figure here; changing one requires re-running the engine.

Check it on your own document

A free account converts 100 pages in all, across up to 5 files. You get the same extraction, the same flags and the same exports as a paid plan — not a preview.

Files shredded after conversion · never used for training

Keep reading