Bank Statement to Excel Converter: Get Transaction Data Out of PDFs
Accountants charge by the hour. Accounting software charges by the month. If all you need is to get the transaction list out of a PDF bank statement and into a spreadsheet — to reconcile, to budget, or to hand to a bookkeeper — paying for either one to handle that single step is a lot. This tool reads the PDF, identifies the transactions, and exports them to Excel or CSV, running entirely in your browser. Your bank statement never touches a server.
PDF.js extracts the text from your statement file. A pattern-matching parser finds the transaction rows. SheetJS writes the .xlsx file. The whole process takes a few seconds. Nothing is uploaded, logged, or retained after you close the tab.
Why bank statement PDFs are genuinely difficult to parse
PDF is a page description format, not a data format. Text inside a PDF isn't stored in rows and columns — it's stored as individual positioned strings scattered across a coordinate grid. When you select and copy text from a PDF and paste it into a text editor, the result often looks like random fragments in the wrong order. That's not a rendering bug; it's how the format works.
PDF.js reads those positioned text strings and reconstructs lines based on their y-coordinates. Once lines are identified, the parser looks for patterns characteristic of bank statement rows: a date (DD/MM/YYYY or MM/DD/YYYY), a description string, and one or more numeric amounts. Different banks format their statements differently, which is why the parser is configurable — you can adjust which columns are identified as debits vs credits vs balance if the auto-detection gets a particular layout wrong.
Which bank statements work
The tool works on text-based PDFs — the kind your bank generates when you download a statement from their web portal. Most major banks produce text-based PDFs: HSBC, Barclays, NatWest, Lloyds, Chase, Bank of America, Wells Fargo, TD, and ANZ all produce statements the parser handles well in testing. Most UK, US, Australian, and Canadian digital banking portals fall into this category.
Scanned image PDFs are the exception. They look like PDFs but contain no extractable text — they're photos of paper pages saved as PDF containers. The parser can't extract data from these. You'd need OCR software (ABBYY FineReader, Adobe Acrobat Pro, or a dedicated OCR service) to convert the scanned image to searchable text first. The tool is honest about this: if PDF.js can't find text content, you'll see an explanation rather than silently wrong data.
Older credit union statements, some regional bank PDFs from before 2015, and any statement that was scanned from paper rather than generated digitally will likely fall into the unsupported category. If you can search text inside the PDF (Ctrl+F in any PDF viewer finds text), the parser should work on it.
Importing into accounting software
The exported CSV works directly with QuickBooks Online's bank import feature: Banking → Upload transactions → upload the CSV → map the Date, Description, and Amount columns. Xero's bank statement import accepts the same format under Accounting → Bank Accounts → Import a Statement. Wave Accounting expects four columns: Date, Description, Debit, Credit — check that your column mapping matches before importing.
For Google Sheets, import via File → Import. Dates come in as strings in most cases — use =DATEVALUE() or the Data → Split Text to Columns feature to convert them to date values if you need date-based filtering or formulas. Excel opens the .xlsx file directly with no import step; amounts come through as numbers so formulas work on them immediately.
What you'd actually use this for
Tax preparation is the most common reason people need bank statements in spreadsheet form. Filtering by keyword to find all software subscription charges, or summing all payments to a specific vendor, takes seconds in Excel and would take 20 minutes scrolling through PDF pages. For self-employed people categorising business expenses, having the raw transaction data in a spreadsheet means adding a Category column and classifying in bulk is practical.
Bookkeepers use it to pull client statements into a working file before reconciliation. Small business owners use it to verify bank reconciliations before sending books to their accountant, to find duplicate charges, and to compare actual spending against budget projections. Mortgage applicants needing to prove 3 months of income and outgoings sometimes need to reformat statement data into a consistent layout for submission — this handles that in minutes.
Personal finance tracking is another fit: if you use a spreadsheet budget rather than an app like Monzo or YNAB, importing your statement each month means you don't have to type transactions manually. Add a category column, copy the formula down, and your monthly categorisation is done.
Check the output before you rely on it
The parser is pattern-based. It works well when statement layout is consistent across pages, but some statements change column positions mid-document — for example, when a page break splits a long merchant description across two lines. That can cause a transaction to parse with the wrong amount or get skipped. Always spot-check the extracted table against the original PDF before using the data for anything requiring precision. The tool shows you the data before export so you can catch column-mapping errors first.
For statements that contain images alongside transactions — graphs, logos, promotional sections — those elements are ignored. The parser only processes text content. Transactions that appear only inside embedded images (some older PDF formats render transaction text as image data) won't be captured.
After converting your statement data, if you need to share pages visually or compress PDF-derived screenshots for email, the image compressor reduces file sizes significantly. If your bank sends statements as images rather than PDFs, the Word to PNG tool can help convert documents shared in other formats.