MEASURED 2026-10-10

Conversion accuracy, including the misses

Hand-checked ground truth in corpus/manifest.json. Ground truth was not copied from parser output. Official bank PDFs are not redistributed from this site. Reproduce it with node scripts/evaluate-corpus.mjs in the project repository. The same figures are in corpus-report.json.

Seven cases and 52 ground-truth rows. That is below this project's own target of 15 statements and 5 banks. A bank listed on /banks is not a tested layout. These figures are not a guarantee for your file.

All seven cases

MeasureResult
Transaction recall96.2% (50/52)
Amount accuracy96.2% (50/52)
Date accuracy90.4% (47/52)
Direction accuracy90.4% (47/52)
Missed rows2/52
Silent severe errors0
Planted balance-break detected100% (1/1)
Composite document rejected100% (1/1)

Amount, date, and direction use extracted rows as the denominator, the same rule as scripts/evaluate-corpus.mjs. A recalled row with a wrong date still counts as found, and it counts against date accuracy.

Held-out official samples only

Wells Fargo official sample and Commerce Bank official sample. 27 ground-truth rows. Recall 92.6% (25/27). Amount 92.6% (25/27). Date 81.5% (22/27). Direction 81.5% (22/27). The gap versus the full set is the Commerce Bank sample below.

Case by case

CaseWhat was testedResult
official-wells-fargo-samplenative text PDF. 22/22 dates, amounts, and signs Statement reported validpass
official-commerce-bank-samplenative text PDF. 3 of 5 rows recalled. A deposit row and an ATM withdrawal were missed. Three check rows kept unparsed MM-DD dates and the wrong sign. Statement flagged invalid. The miss was not silent. The source PDF's own check summary also disagrees with its itemized checks.parser miss
official-bank-of-america-how-to-readcomposite document, expected reject. 0 transactions extracted Flagged UNSUPPORTED_COMPOSITE_DOCUMENT instead of exporting a fake transaction tableexpected reject
single-column-running-balancesingle amount column. 6/6 Validpass
debit-credit-wrapped-descriptionsplit debit and credit columns, wrapped description. 6/6 Validpass
balance-break-and-duplicateplanted duplicate row and a closing balance that is $20.00 high. 6/6 recalled Flagged invalid, which is the intended resultcaught failure
us-format-multi-page-markerstwo pages, repeated header, wrapped description, trailing minus, parentheses, DR and CR. 7/7 including negative amounts and a row that continues after the page break Valid. Opening 4820.00 to closing 5579.75pass

The parser miss

On the Commerce Bank official sample, hyphenated month-day dates were not normalized, and that also broke sign checks. Two rows in sections whose header shares a line with an account number were dropped. The statement was marked invalid, so the error was visible rather than a quiet export. That PDF is not offered for download here.

High-demand bank layouts

BankWhat this report actually covers
Wells FargoThe public sample checking PDF scored 22/22 on date, amount, and sign, and the statement was valid. The PDF stays on Wells Fargo’s site and is not hosted here.
Bank of AmericaThe scored file is Bank of America’s how-to-read guide, not a deposit or credit-card statement. The parser returned zero transactions and flagged it as a composite document. A Bank of America statement layout is not in this 52-row set.
ChaseChase is not one of the seven scored cases. A separate synthetic fixture checks the Chase name, the last four digits, and month-day dates. The credit-card page’s five-page scan note is format evidence, not a row in this table.

Adding a bank name to the directory does not add a scored layout. These three rows are the coverage that exists today.

A PDF you can reconvert

The corpus text files are not a substitute for a file you can open. This one-page synthetic PDF uses the same lines as the hand-written Example Community Bank fixture. It is not a bank-issued statement. On 2026-10-10 the parser extracted 6 of 6 rows with the same date, description, amount, and balance. The statement was valid. Download the input PDF, the Excel file, and the CSV. The comparison below is also in example-community-bank-comparison.json. This six-row file is one public case. It does not replace the 52-row report, and it is not a Chase, Bank of America, or Wells Fargo test.

Expected dateExpected descriptionExpected amountExtracted amountMatch
2026-07-02ACME CLIENT PAYMENT1250.001250.00yes
2026-07-05OFFICE SUPPLY STORE-86.41-86.41yes
2026-07-08MONTHLY SERVICE FEE-15.00-15.00yes
2026-07-14SOFTWARE SUBSCRIPTION-49.00-49.00yes
2026-07-22CLIENT REFUND-225.40-225.40yes
2026-07-29EQUIPMENT PURCHASE-199.00-199.00yes

Inputs you can download

These two files are synthetic and contain no bank customer. Fixture Savings Bank repeats a utilities debit and prints a closing balance $20.00 too high. The 10 October run reconstructed all six rows and flagged the statement invalid. Prairie State Bank & Trust is two pages, with a wrapped description, a trailing minus, parentheses, and DR/CR markers. All seven rows matched, from opening 4820.00 to closing 5579.75. Official bank PDFs used in the other cases are not redistributed.

Scans

One synthetic image-only PDF with no text layer. English OCR runs locally. The automated test expects 4 dated rows, signed amounts, running balances, and a matching closing balance, with no network request. Not a scanned-bank accuracy rate. Phone photos, skew, blur, handwriting, and non-English scans are not in this scored set.

Not in this report

  • QuickBooks Desktop or QuickBooks Online import success
  • Every layout of the banks named on /banks
  • Real customer files
  • A percentage for blurry or photographed statements

Scanned statement limits · QBO import limits · Chase format notes · How files are handled