Statement to CSV 4 min read
How to convert a bank statement PDF to CSV without uploading it
If you've tried to copy the transactions out of a bank statement PDF and paste them into Excel, you know how it goes. The dates, descriptions and amounts land in one long column. A description that wrapped onto a second line becomes a row of its own, and the page totals come along too. Fixing that by hand for a year of statements takes an evening.
I made Statement to CSV to do the job in the browser. You drop in your bank and credit card statement PDFs and get back one CSV with every transaction, oldest first. The files stay on your computer or phone the whole time.
Why copying from the PDF goes wrong
A PDF doesn't store a table. It stores words and the spot on the page where each one sits, and your eye does the work of seeing rows and columns. Copy and paste only gets the words, in whatever order the file keeps them.
Every bank also lays out its statement differently, which is why a converter that handles one bank's statement often falls apart on the next:
- Some have separate Withdrawal and Deposit columns. Others have one Amount column with a minus sign, or Cr and Dr after the number.
- The same day can be written 05/03/26 or 03/05/26, depending on the country, and card statements often leave out the year.
- Long descriptions, like UPI references, wrap onto a second or third line.
- Column headers repeat on every page, and some statements print offers or reward points right under the table.
Why I didn't want to upload my statements
Most online converters upload your PDF to their server and do the work there. A bank statement holds your account number, your balance and every payment you've made, and its password is often your name and date of birth. I didn't want to send that to a website I knew nothing about.
Statement to CSV runs entirely in your browser. The PDF is opened, read and turned into a CSV on your device. The file, its name, its password and the transactions all stay there.
How it reads a statement
First it pulls the transaction tables out of each PDF, using where every word sits on the page. Scanned statements are read with OCR before that.
Then a small AI model called MobileBERT reads each row and answers three questions about it: what the date is, how much money went out, and how much came in. It answers by pointing at text that's already in the row, so it can't invent an amount. Reading rows this way means it copes with column names it has never seen, whatever your bank calls them.
Last, the transactions from all your files go into one list, sorted by date. If a statement shows a running balance, every row is checked against it. A file where some rows don't add up is marked "worth a look", which usually means a row was missed or misread, so that's the file to check first.
Converting your statements, step by step
- Open statement-to-csv.tukka.dev on a computer or phone.
- Drop your statement PDFs onto the page, or choose them with the file picker. You can add several at once, from different banks and cards.
- If a PDF is password-protected, type the password when it asks. It's used only to open the file on your device.
- Wait while it reads. The first time, the AI model downloads (about 20 MB) and your browser keeps it for next time. A computer reads about five rows a second; a long statement takes a while on a phone.
- Look over the preview. If dates like 03/04 could mean 3 April or 4 March, pick the order your bank uses.
- Download the CSV and open it in Excel, Google Sheets or Numbers.
If you add the same file twice, it's only read once.
What's in the CSV
Each transaction gets one row, with five columns:
- Date, written as YYYY-MM-DD so spreadsheets sort it correctly.
- Description, with wrapped lines joined back together.
- Debit, the money that went out.
- Credit, the money that came in.
- File, the statement the row came from.
Debit and Credit are from your side on bank and card statements alike. Amounts are plain numbers with two decimals. The file is saved in a format Excel opens correctly, so ₹ and other symbols in the descriptions show up as they should.
Before you rely on it
It reads column headers the way a person would, so it works with most statements that list transactions in a table. That covers savings and current accounts and credit cards, from Indian, US, UK and other banks. An unusual layout can still trip it up. Give the CSV a quick look before you send it to your accountant or attach it to a loan or visa application, starting with any file marked worth a look.
Transactions aren't split by account or card. The File column tells you which statement each row came from, so you can filter by it.
Statement to CSV is free and needs no account. Try it with your own statements at statement-to-csv.tukka.dev.