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
| Measure | Result |
|---|---|
| Transaction recall | 96.2% (50/52) |
| Amount accuracy | 96.2% (50/52) |
| Date accuracy | 90.4% (47/52) |
| Direction accuracy | 90.4% (47/52) |
| Missed rows | 2/52 |
| Silent severe errors | 0 |
| Planted balance-break detected | 100% (1/1) |
| Composite document rejected | 100% (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
| Case | What was tested | Result |
|---|---|---|
| official-wells-fargo-sample | native text PDF. 22/22 dates, amounts, and signs Statement reported valid | pass |
| official-commerce-bank-sample | native 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-read | composite document, expected reject. 0 transactions extracted Flagged UNSUPPORTED_COMPOSITE_DOCUMENT instead of exporting a fake transaction table | expected reject |
| single-column-running-balance | single amount column. 6/6 Valid | pass |
| debit-credit-wrapped-description | split debit and credit columns, wrapped description. 6/6 Valid | pass |
| balance-break-and-duplicate | planted duplicate row and a closing balance that is $20.00 high. 6/6 recalled Flagged invalid, which is the intended result | caught failure |
| us-format-multi-page-markers | two 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.75 | pass |
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
| Bank | What this report actually covers |
|---|---|
| Wells Fargo | The 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 America | The 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. |
| Chase | Chase 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 date | Expected description | Expected amount | Extracted amount | Match |
|---|---|---|---|---|
| 2026-07-02 | ACME CLIENT PAYMENT | 1250.00 | 1250.00 | yes |
| 2026-07-05 | OFFICE SUPPLY STORE | -86.41 | -86.41 | yes |
| 2026-07-08 | MONTHLY SERVICE FEE | -15.00 | -15.00 | yes |
| 2026-07-14 | SOFTWARE SUBSCRIPTION | -49.00 | -49.00 | yes |
| 2026-07-22 | CLIENT REFUND | -225.40 | -225.40 | yes |
| 2026-07-29 | EQUIPMENT PURCHASE | -199.00 | -199.00 | yes |
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