Why not just paste it into ChatGPT?

Often you should. For one personal statement you want to look at in a spreadsheet, a chat assistant is faster than any converter and this page is not going to pretend otherwise. What follows is the part where it stops working — and none of it is about the model being stupid.

Start with the honest half

Drop a text-layer PDF into a current assistant and ask for CSV, and you will usually get a usable table. It will handle a layout no parser has ever seen. It will read a column heading in a language the parser has no profile for. For a one-off — checking a subscription, splitting an expense, looking at last year — that is the right tool, and the whole category built on charging for that job is losing to it. The operator of the largest converter in this niche published his numbers in August 2026: revenue down 24%, new subscribers down from 184 a month to 45, and he names chat assistants as the reason.

So the question is not which is smarter. It is what you can prove afterwards.

It cannot check its own reading

A statement carries its own proof: an opening balance, a closing balance, often a running balance beside each row. Those came from the bank's ledger, not from whatever read the PDF, so they are an independent test of every number extracted. src/parse/reconcile.ts runs that test — row by row against the balance column where there is one, and opening + Σ(amounts) = closing where there is not — and reports each row that fails.

An assistant can be asked to check its own arithmetic, and it will report that the arithmetic checks out. That is a different claim: it is the same process auditing itself, and a misread amount is wrong in the sum exactly as it was wrong in the row. The check is only worth something when the number being checked against was not produced by the thing being checked.

The practical shape of this: an assistant that misreads 1.234,56 as 1234.56 in a European statement hands you a spreadsheet where one row is a hundred times too small, with nothing marked. The balance chain here does not care what the row looked like — it fails, names the row, and prints both figures.

The file has to be valid, not plausible

If the CSV is for your own eyes, plausible is enough. If it is going into software, it is not.

None of that is clever. It is a hundred small facts that decide whether an import silently fails, and they are the kind of thing a model reproduces approximately.

The one that is not about quality at all

If you are a bookkeeper, an accountant or a tax advisor, the statement is not yours. In Germany a Steuerberater is bound by §203 StGB; across the EU, handing client data to a processor requires a contract under Article 28 GDPR. A consumer chat product is neither your processor nor covered by such a contract, and pasting a client's bank statement into one is a disclosure decision, not a tooling decision. That is a bar no amount of model quality clears.

What this site does about it is stated on the home page and enforced by the deployment rather than promised: the file is parsed in memory and never written to disk, the container is mounted read-only, and the source is public so you can check both. If that is still not enough for your obligations, the licence is MIT — run it inside your own network and nothing leaves it.

What you can hand to someone else

Every conversion here produces a receipt: a plain text document naming the statement, the profile that read it, the two balances it was checked against, the arithmetic, and every row that did not fit. It is built by src/receipt.ts, in the same six languages as the rest of the site. Its last section says what the check does not prove, because a receipt that only says "verified" invites exactly the reliance it cannot support.

A chat transcript is not that document. It can be edited, it does not survive the tab, and it asserts a conclusion without showing the arithmetic that produced it.

Where this tool is the wrong answer

Said plainly, because the rest of the page is only worth reading if this part is here.

The short version

Use an assistant when you need a reading. Use this when you need a reading you can check, in a file another program will accept, from a tool you are allowed to send the data to.