Convert a Bank Statement to CSV
Turn any statement your bank produced into a plain CSV, with a balance check that proves nothing was dropped.
No sign-up needed. A PDF is read on our server, never stored.
- PDF, CSV, Excel and the OFX family are all read, and which one you have is taken from what is inside the file rather than its name
- Only a PDF is read on our server, held in memory and dropped when the request ends. Every other format is read in this browser tab
- No account and no card, a handful of PDFs an hour, and no limit at all on the rest
A bank statement is not one kind of file. It depends on the bank, and on how far back you are asking. The same account will hand you a PDF, a CSV with columns nobody else uses, an .xlsx workbook, or one of the OFX-family downloads (.ofx, .qfx or .qbo). CSV is the shape everything else will read. That is why it is usually what someone is trying to get to rather than what they started with.
What comes back is four columns: the date, the description, whether the money went in or out, and the amount. Dates are written as yyyy-mm-dd, the one layout that cannot be read two ways. No wondering whether 05/01 means January or May. Amounts carry two decimal places and no thousands separators, because a comma inside a number is read as another column by every spreadsheet that opens the file.
Rows come back in date order however the statement was arranged. The material banks print around the real table is left out: preamble above the header, totals underneath, a page footer every thirty rows. Those rows are counted rather than silently discarded, so the number skipped is on screen to check against what you expected.
One of the inputs leaves your machine and the rest do not. Reading a PDF needs a parser too large to hand to a browser, and a scanned statement has to be looked at rather than parsed. So a PDF goes to our server, is held in memory while it is read, and is dropped when the request ends. It is never written to disk and never stored. A CSV, a workbook or an OFX file is read in this browser tab and goes nowhere.
Whichever arrived, the balance check runs before anything is downloaded. Where the statement prints a running balance, every step is reconciled against it. Where it does not, you type the opening and closing figures in from the page yourself. CSV is also not the only thing available once a statement has been read. The same transactions on screen can be written as any other format here, without the file being read a second time.
New to the format? Read what varies in a bank statement CSV. It covers what is inside one, and what it cannot tell you.
A converter that tells you when it missed something.
Most tools hand you a file and let you find out in your ledger. Every conversion here is reconciled against the closing figure first. That figure is read from your statement’s balance column, or typed in from the page when there isn’t one.
When the totals don’t meet you get the exact size of the gap, every row that did read, and the converted file anyway.
Sample balance check
A transaction may be missing. Review the rows below, or re-upload including all pages.
A sample result. This is the same component the converter uses.
Your statement is read, not kept
Reading a PDF needs a server. Here is exactly what happens on it.
The PDF is held in memory while it is read, then dropped when the request ends. It is never written to disk and never stored. There is no copy to delete, lose or be compelled to produce.
Open your browser's network tab and convert. You will see one request, to this site, and nothing after it. The transactions come back as text. The file you download is written here, in this tab.
PDF is the only one that leaves. A CSV or a spreadsheet from the same bank is converted in your browser and never crosses the network. Take that instead when your bank offers both.
Questions people actually ask
Does my statement get uploaded?
Only if it is a PDF. Reading one needs a parser far too large to send to your browser. A scanned statement is a picture of a page, so it has to be looked at rather than parsed. It goes to our server, is held in memory while it is read, and is discarded when the request finishes. It is never written to disk and never stored, so there is no copy to delete afterwards. Every other format this page takes, CSV, Excel, .ofx, .qfx and .qbo, is converted inside this browser tab and never crosses the network. Open your browser's network tab while you convert one and you will see that for yourself.
What can I actually drop in?
A PDF, a CSV, an .xlsx spreadsheet, or an .ofx, .qfx or .qbo file. Which one you have is worked out from the contents rather than the extension. That matters because banks are careless about naming. A CSV arrives called .txt often enough, and the three OFX extensions are used interchangeably for the same document. If a layout cannot be read automatically, you are shown the file and asked to point at the date, amount and description columns yourself.
What columns does the CSV have?
Four: Date, Description, Direction and Amount. The date is yyyy-mm-dd and the direction reads In or Out. The amount is signed, negative for money out, with two decimal places and no thousands separators. Rows are sorted oldest first regardless of the order the statement used, since plenty of banks print newest at the top.
Is the running balance written into the file?
No, and that is deliberate. The file carries the four columns above. The balance is what gets checked before you download, rather than something copied into the output. A running balance in a CSV is a figure nobody recalculates, so it goes stale the moment a row is edited and then quietly disagrees with the transactions beside it. What the balance is genuinely good for is proving the extraction was complete, which is the job it does here.
Does it read scanned or photographed statements?
Yes. A PDF either carries its own text or is an image of a page. Where there is text, only that text is read. Where there is not, as with a scan, a photograph or a fax, the pages are read as images instead. You are told which of the two happened. They are not equally exact, and you should know which one you are checking.
How do I know every transaction came through?
Check the balance panel above the results. If your statement prints a running balance, the opening and closing figures are taken from it and every step is reconciled against the transactions. A row that went missing breaks the chain and is reported as a figure rather than passed on quietly. Where a statement prints no running balance there is nothing to check against on its own. Type the opening and closing figures in from it and the same check runs.
Do I need an account?
No. There is no sign-up, no email capture and no card. PDFs are capped at a handful an hour, because reading one costs something to run. Every other format is converted in your browser and has no limit.
Try it on the statement that’s annoying you right now.
No account, no card, no limit. If the layout isn’t recognised you will know immediately, rather than after a support ticket.