Every converter in this category advertises an accuracy number. None of them publishes what it was measured on. This page is our attempt at the opposite: the corpus, the method, the per-file results, and the files we got wrong.
32 of 40
PDFs whose extracted rows add up against the balances the statement itself printed
6
printed nothing we could check against — reported as unverified, not as correct
2
where the arithmetic disagreed and we said so
A statement usually prints facts about itself: an opening balance, a closing balance, sometimes column totals. Reconciled means we added up the rows we extracted and they match those printed figures. It is arithmetic, not an opinion, and you can redo it by hand on your own file.
It is not a claim that every field is perfect. A description could still be truncated or a date read in the wrong order without breaking the totals. Reconciliation catches the errors that move money — a dropped row, a missed digit, a debit read as a credit — which are the ones that matter most and the ones that are hardest to spot by eye.
Roughly a fifth of real statements print nothing checkable at all. Those come back unverified. That is an honest “we cannot tell you”, and we would rather say it than show a green tick that means nothing.
These are 40 real PDF statements and 6 real CSV/Excel exports, collected from the founder's own accounts and from family and friends who agreed to share theirs. They span 6 currencies, and 14 of the PDFs are credit-card statements rather than bank accounts.
This is not a random sample and we will not pretend otherwise. It is weighted towards Singapore and India, with statements from the UK, the United States, Australia and Brunei alongside them; it is mostly personal accounts, though a small retail business banks in there too; and it contains no statement from a bank that refused to work — because a file nobody could obtain never entered the set. A vendor's own corpus is the weakest form of evidence there is. It is simply more than anyone else in this category currently shows you, and it grows as real files arrive.
The files themselves are never published, and never will be. They belong to real people. What you see below is derived from them by a generator that reads only counts and verdicts and never reads a filename.
2,722 transactions across 40 files. 34 were read from the page's own text layer; 6 were scans that needed OCR.
| File | Currency | Read as | Rows | Out / In | Result |
|---|---|---|---|---|---|
| F01 card | AUD | Text | 34 | 32 / 2 | Reconciled |
| F02 | AUD | Text | 325 | 301 / 24 | Reconciled |
| F03 card | BND | Text | 111 | 105 / 6 | Unverified |
| F04 | GBP | Text | 5 | 4 / 1 | Reconciled |
| F05 | GBP | Text | 61 | 57 / 4 | Reconciled |
| F06 | GBP | Text | 205 | 193 / 12 | Reconciled |
| F07 | GBP | Text | 242 | 189 / 53 | Unverified |
| F08 | INR | Text | 16 | 10 / 6 | Reconciled |
| F09 card | INR | Text | 18 | 14 / 4 | Suspect |
| F10 | INR | Text | 19 | 14 / 5 | Unverified |
| F11 | INR | Text | 21 | 15 / 6 | Reconciled |
| F12 | INR | Text | 48 | 30 / 18 | Reconciled |
| F13 | INR | Text | 53 | 41 / 12 | Reconciled |
| F14 | INR | Text | 53 | 47 / 6 | Unverified |
| F15 | INR | Text | 106 | 77 / 29 | Reconciled |
| F16 | — | Text | 6 | 6 / 0 | Unverified |
| F17 | — | Text | 12 | 6 / 6 | Reconciled |
| F18 | — | Text | 12 | 6 / 6 | Reconciled |
| F19 | — | Text | 13 | 11 / 2 | Reconciled |
| F20 | — | Text | 74 | 63 / 11 | Reconciled |
| F21 | — | Text | 113 | 106 / 7 | Reconciled |
| F22 | — | Text | 123 | 116 / 7 | Reconciled |
| F23 card | — | OCR | 14 | 13 / 1 | Unverified |
| F24 card | SGD | Text | 2 | 2 / 0 | Reconciled |
| F25 | SGD | Text | 9 | 5 / 4 | Reconciled |
| F26 card | SGD | Text | 10 | 5 / 5 | Reconciled |
| F27 | SGD | Text | 32 | 5 / 27 | Reconciled |
| F28 | SGD | Text | 50 | 31 / 19 | Reconciled |
| F29 card | SGD | Text | 54 | 36 / 18 | Reconciled |
| F30 card | SGD | Text | 56 | 53 / 3 | Reconciled |
| F31 card | SGD | Text | 56 | 55 / 1 | Reconciled |
| F32 card | SGD | Text | 61 | 58 / 3 | Reconciled |
| F33 card | SGD | Text | 85 | 84 / 1 | Reconciled |
| F34 | SGD | Text | 247 | 33 / 214 | Reconciled |
| F35 card | SGD | OCR | 8 | 7 / 1 | Reconciled |
| F36 | SGD | OCR | 42 | 33 / 9 | Reconciled |
| F37 | SGD | OCR | 71 | 70 / 1 | Reconciled |
| F38 | SGD | OCR | 130 | 124 / 6 | Suspect |
| F39 card | USD | Text | 101 | 97 / 4 | Reconciled |
| F40 card | USD | OCR | 24 | 13 / 11 | Reconciled |
File ids are positions in a sorted list, not stable identifiers — they shift when the corpus grows. “card” marks a credit-card statement, where a purchase is exported as a debit so it lands the right way round in QuickBooks and Xero.
1,350 of 1,361 source rows mapped into transactions across 6 files. These are parsed entirely in your browser and never uploaded, which is also why this path is weaker at self-checking: it reads column headers, and a header can be missing or meaningless.
| File | Source rows | Mapped | Skipped | Date order | Result |
|---|---|---|---|---|---|
| C01 | 12 | 12 | 0 | MDY | Unverified |
| C02 | 18 | 18 | 0 | MDY | Unverified |
| C03 | 45 | 45 | 0 | MDY | Unverified |
| C04 | 54 | 48 | 6 | DMY | Reconciled |
| C05 | 611 | 606 | 5 | MDY | Reconciled |
| C06 | 621 | 621 | 0 | MDY | Suspect |
Publishing only the wins would make this page marketing. These are the open problems this corpus currently shows.
Column 1 … Column 7, and auto-detection matches on header text, so it has nothing to go on. Mapped by hand in the app it takes all 621 rows correctly — but the automatic path is what most people will meet first.You do not have to take this page's word for anything. Drop one of your own statements in — the same reconciliation check runs on it, and tells you which of the three results above your file got, before you export anything. CSV, Excel and OFX files never leave your browser at all.
Every file in the corpus is re-run through the real extraction pipeline — not a test double — on every change that touches it. The run records each file's row count, debit/credit split, zero-amount rows and reconciliation verdict, and compares them against a stored baseline, so an unexplained change in what a real file extracts is itself treated as a defect. This page is generated from those baselines, so it cannot drift from what the checks actually measured: if the corpus grows or the numbers move, the page is stale until it is regenerated, and our build checks fail until it is.
Figures on this page were last regenerated from a corpus of 40 PDFs and 6 CSV/Excel files.