Bank Statement to Excel
Processed in your browser — your files never leave this device.
A bank statement PDF is a table that a PDF cannot describe — it stores where each character sits, not which column it belongs to. This rebuilds the table from those positions, then does the thing that actually matters: it checks the statement against itself. Every row's balance has to equal the row above plus that row's own credit and debit. Where a row does not add up, it says which row. Your statement never leaves your device, which for this document is the whole point.
How to use it
- Add the statement PDF. If your bank sent it locked, the tool asks for the password — most banks use your date of birth as DDMMYYYY, your PAN in capitals, or your customer ID.
- The columns are read from the statement's own header row, so Withdrawal, Deposit and Balance land where the bank put them rather than where we guessed.
- Every row is then checked against the one above it. You see immediately whether the arithmetic closes, and which rows to look at if it does not.
- Save as a spreadsheet or plain CSV. The spreadsheet carries a second sheet showing exactly what was checked and what was inferred.
Examples
- A year of statements turned into one spreadsheet for a loan application
- A password-protected statement opened and converted without it leaving the laptop
- A statement checked before filing, with three misread rows found by the arithmetic rather than by eye
What this tool cannot do
- The columns are inferred, not templated. There is no per-bank library here, and a statement with an unusual layout may come out wrong — which is exactly why the arithmetic check exists and why you should read it.
- A scanned statement will not work. There is no text in the file to place, only pixels. PDF to Text can read scans, but it cannot rebuild a table from them.
- Where every date on the statement could be read either way round — 01/04 is both the first of April and the fourth of January — the dates are left exactly as printed rather than converted. Guessing would put wrong dates in your records silently.
- The check tells you the rows that do not add up. It cannot tell you a row is missing where the balance column was also unreadable, which is why the totals are compared as well.
Frequently asked questions
- My statement is password protected. Will it work?
- Yes. Banks usually encrypt emailed statements with something derived from your details — a date of birth as DDMMYYYY with no separators, your PAN in capitals, or a customer ID. The tool asks for it when the file needs one, uses it to open the file, and drops it. It is never stored, never put in the address bar, and the page is served with a rule forbidding it from sending anything anywhere. Being straight about the limit of that: no web page can promise a string has been scrubbed from memory.
- How do I know the numbers came across correctly?
- Because the statement is made to check itself. Each row's balance must equal the row above plus that row's credit and debit — and where it does not, that row is named rather than quietly included. This matters more than extraction accuracy: every tool in this category makes mistakes on unusual layouts, and the difference is whether it tells you. A confident wrong answer about your finances is worse than a flagged uncertain one.
- Does it work with my bank?
- It reads the columns from your statement's own header row rather than from a list of banks we support, so it works with far more layouts than a template-based tool — and it tells you when it could not. If the arithmetic does not close, or it says the document is not a transaction table, that is the honest answer rather than a spreadsheet of plausible nonsense.
- Is my statement uploaded anywhere?
- No, and this page is one where you can check rather than trust. Run curl -I on it and look for connect-src 'none' in the content-security-policy line: that is your browser being instructed to refuse any attempt by this page to send data anywhere at all, including to us. No site that processes your statement on a server can ship that rule, because it would break their own upload at the first click.