Failures published first
An accuracy benchmark you can re-run yourself
Every accuracy table in this market shares one structural problem: it is published by a vendor, the vendor ranks first, and the "ground truth" is the vendor's own reading of the documents — an opinion you are asked to trust. This page is built the other way around. The corpus is 28 publicly available bank statements, listed below with their sources so anyone can fetch them. The ground truth is arithmetic: opening balance + every transaction = closing balance, checked against the numbers the bank printed. You can redo every row of it in a spreadsheet, without trusting us.
RowSure's own column was run on 19 August 2026; vendor exports were collected on 18–19 August from the tools' free tiers, verbatim. Engine output is published as-is, refusals included — because a benchmark that doesn't show its own failures is an advertisement.
The method, completely
- The corpus is public. Court exhibits, charity-register filings, council meeting packets, regulators' teaching material, and banks' own published specimen statements. No customer documents, ever. Each row below names its source; every document can be re-fetched from it.
- The check is arithmetic, not opinion. A conversion passes on a document when the opening balance plus every extracted transaction equals the closing balance the bank printed — row by row where the statement prints a running balance, at period level where it doesn't. Where the document prints its own transaction counts, those are checked too.
- Vendor outputs go in verbatim. A tool is measured on its raw CSV or Excel export of these same documents — no cleanup, no retries, no cherry-picking. Results are published whether the tool passes or fails, and that applies to RowSure's own column first.
- When our own reading of a document doesn't reconcile, a disagreement with another tool's output is reported as uncertain — we can't tell which of the two readings is wrong, so we say exactly that instead of deciding it.
- No adjectives. Verdicts are four words: passes, fails, uncertain, unreadable. The numbers carry the judgement.
RowSure on this corpus: 24 of 28 certified — and 4 refusals, listed first
The four documents we did not certify are the interesting ones, so they come first. All four are documents whose pages don't carry the numbers a certification needs — and delivering a "verified" spreadsheet from them would have been the lie this product exists to prevent:
| Document | Source | Outcome | Why refusing was the correct answer |
|---|---|---|---|
| Société Générale specimen | the bank's own published sample | ✗ declined | the layout reads at 100% — 47 transactions — but the specimen prints X XXX,XX placeholders instead of balances. There is nothing true to certify against |
| Sparkasse (Austria) teaching sheet | bank teaching material | ✗ declined | a one-page classroom sheet: no opening or closing balance is printed anywhere on it |
| Rabobank voorbeeld | the bank's published example | ✗ declined | a scan on which no opening balance is shown — the chain has nothing to anchor to |
| Bank of America "how to read" sample | the bank's own explainer | ✗ declined | explains the layout without printing period balances |
And the 24 that certified, with how deep the proof goes on each:
| Document | Source | Txns | Proof |
|---|---|---|---|
| Monzo (personal) | UK Charity Commission filing | 581 | ✓ row-level, listed newest-first — the engine chains the balances backwards; opening balance not printed, said so |
| Starling (business) | UK Charity Commission filing | 365 | ✓ row-level, in 2 sections |
| Chase — multi-account bundle | California public filing | 8 | ✓ the PDF holds two statements; each certified per statement — a bundle is not one chain, and treating it as one used to be this engine's hardest failure |
| Unity Trust (current) | Whitehill Town Council | 44 | ✓ row-level |
| Barclays | UK Charity Commission filing | 38 | ✓ row-level, reverse order; opening balance not printed, said so |
| First National Bank North | Cass County (MN) public packet | 35 | ✓ row-level |
| CaixaBank | L'Alfàs municipal audit filing | 29 | ✓ row-level, in 3 sections |
| Revolut (Pro) | UK Charity Commission filing | 22 | ✓ row-level |
| HSBC teaching example | University of Southampton | 12 | ✓ row-level, in 2 sections |
| Postbank specimen | the bank's own published Muster | 12 | ✓ aggregate, discrepancy 0.00 |
| Sparkasse (DE) demo | the bank's own published demo | 12 | ✓ aggregate, discrepancy 0.00 |
| Lloyds | UK Charity Commission filing | 11 | ✓ row-level, reverse order |
| Postbank business specimen | the bank's own published Muster | 10 | ✓ aggregate |
| German Kontoauszug sample | financial-education curriculum | 9 | ✓ aggregate |
| Bank of America | US federal court exhibit (D. Md.) | 76 | ✓ aggregate |
| Wise (GBP) | UK Charity Commission filing | 7 | ✓ row-level, reverse order |
| Chase | SEC filing | 6 | ✓ aggregate |
| Wells Fargo | US federal court exhibit (W.D.N.C.) | 3 | ✓ row-level |
| FDIC sample | FDIC Money Smart curriculum | 3 | ✓ row-level |
| Chase card sample | the bank's own published sample | — | ✓ card-statement identity on the period totals |
| HSBC (business) | UK Charity Commission filing | 1 | ✓ aggregate |
| NatWest (reserve) | Buxted Parish Council | 1 | ✓ aggregate |
| RBS (business) | UK Charity Commission filing | 1 | ✓ aggregate |
| Wells Fargo (district) | special-district board packet | 0 | ✓ a statement with no transactions: opening equals closing, certified as exactly that |
"Row-level" means every extracted amount was proven against the running balance the bank printed beside it. "Aggregate" means the period equation closed but the document prints no per-row balance to check against — a shallower proof, and we label it as such. The four levels, explained → Total engine cost for the whole corpus: $0.58.
Other converters, measured so far — wins published first
Raw exports collected on 18–19 August 2026 from each tool's own free tier, one document at a time, compared verbatim by the same arithmetic. Nothing here is estimated: every number below can be re-derived from the tool's own export and the public document. Coverage is partial — free tiers are small — and grows as more exports are run.
CapyParse — 2 documents, 2 pass
| Document | Rows | Verdict | The arithmetic |
|---|---|---|---|
| Revolut Pro (22 transactions) | 22/22 | passes | every amount matches; the export reconciles, discrepancy 0.00 |
| Wise (7 transactions) | 7/7 | passes | every amount matches; discrepancy 0.00 |
Both wins are published exactly because the rule says so — results go up whether they beat us or not.
StatementPro.ai — 2 documents, 1 passes, 1 fails
| Document | Rows | Verdict | The arithmetic |
|---|---|---|---|
| Chase two-statement bundle | 8/8 | passes | all 8 amounts match, row for row. A bundle has no single total, so the comparison is row-by-row only — the same reason our own engine certifies this file per statement |
| Wise (7 transactions) | 6/7 | fails | one leg of a 1.00 card hold-and-release pair is absent, and the export's arithmetic is off by exactly 1.00 |
Good-faith note: this tool's export headers weren't readable by our comparer at first. We extended the comparer rather than mark the files unreadable — the comparison measures their extraction, not our parser.
bankstatementconverter.com — 3 documents, 1 passes, 2 fail
| Document | Rows | Verdict | The arithmetic |
|---|---|---|---|
| Wise (7 transactions) | 7/7 | passes | every amount matches; discrepancy 0.00 |
| Unity Trust (44 transactions in our row-level-certified reading) | 39/44 | fails | five rows are absent from the export, and the five absent amounts sum to 3,916.83 — exactly the amount by which the export fails to reconcile. The arithmetic pins the missing rows |
| Monzo (581 transactions) | 575/581 | fails | 575 rows parse and match; 5 rows arrive with the amount and balance fused into a text cell (unusable in a spreadsheet), and 12 lines of page boilerplate are exported as transaction rows. As delivered, the export does not reconcile |
Not yet measurable
- DocuClipper — the free-trial export is capped at 10 transactions per download (the cap is stated inside the export file itself), and we don't publish partial exports as anyone's result. The column arrives when a full export is run on a paid plan.
- Statement Extract and others — no export produced yet.
A vendor column appears on this page only when the raw export actually exists — run by us, by the vendor, or by any user. Nothing is estimated, and results go up whether they beat us or not.
- If you sell a converter: run the corpus, send the raw exports to hello@rowsure.com, and your column goes up unedited — wins included. If you believe a row above is wrong, the correction gets the same prominence as the claim.
- If you use one: put any of these documents through it and send us the export. Or check it yourself in one minute, without us: upload the PDF and the export and the same arithmetic runs on the spot, free.
Reproduce it
Every document above names its public source and can be fetched from it. The check needs no software of ours: add up the transactions in any spreadsheet and compare against the printed balances. If you want our exact corpus bundle and comparison script, write to hello@rowsure.com and we'll send it — and if you find an error on this page, we'll publish the correction with the same prominence as the claim.