Most banks will give you a PDF statement for any month, but only a short CSV history, and sometimes no CSV at all. When you need the transactions in a spreadsheet for bookkeeping, a tax return, a loan application or matching store payouts, retyping them is slow and easy to get wrong. This converter reads the PDF your bank produced, rebuilds the transaction table and hands you a spreadsheet you can sort, filter and import.
Everything runs in your browser with the same PDF engine Firefox uses. Your statement, its password and the rows it contains are never uploaded to our server, which matters for a document that carries your account number and a month of your spending.
How to convert a bank statement PDF to Excel or CSV
- Download the statement from your online banking as a PDF. Use the original file, not a scan or a photo of a printout.
- Drop the PDF on the converter above, or click the box and choose it. Files up to 60 MB work; a normal statement is well under 5 MB.
- If the PDF is locked, type its password and click Open. Banks often use your date of birth, customer number or part of your account number.
- Look at Number columns found. Each card shows the column heading from your statement, a few sample values and a dropdown: Debit (out), Credit (in), Amount (+ in, - out), Balance or Ignore. Change a dropdown if a column was read wrong.
- Check the Balance check figure. It tells you how many rows add up to the balance your bank printed. Rows that do not are shaded red in the preview.
- Pick how dates should look in your file: 2026-01-31, 31/01/2026 or 01/31/2026. Tick Add a signed Amount column if your software wants one column with minus signs for money out.
- Remove any row you do not want with the x at the end of it. Put removed rows back undoes this.
- Click Download Excel (.xlsx), Download CSV or Copy for Google Sheets, then paste into cell A1 of a blank sheet.
How the converter reads your statement
A PDF does not store a table. It stores pieces of text and where each one sits on the page. The converter collects every piece with its position, groups pieces that share a baseline into lines, and then works out which lines are transactions. A line becomes a new transaction when it starts with a date in the date column. Amounts are grouped into columns by where their right edge falls, because banks right-align money. If the statement has a heading row such as Date, Details, Paid out, Paid in, Balance, those headings name the columns; if it has none, the rightmost number column is taken as the balance and the two before it as debit and credit.
Statements are not tidy, so the converter also handles the common quirks:
- Wrapped descriptions. A description that runs onto a second or third line is joined back into one cell, whether the amounts sit on the first line or the last.
- One date per day. Many UK and European banks print the date only on the first transaction of each day. Later lines with amounts get the same date.
- Value dates. When a statement shows a booking date and a value date side by side, the first is kept and the second is dropped.
- Balance lines. Balance brought forward, opening, beginning, carried forward and closing balance lines are left out of the table, and the opening balance is used for the balance check.
- Reference columns. When the heading row has a Ref, Reference or Chq column, those values go into their own Reference column instead of the description.
- Page furniture. Repeated headings, page numbers, footers and rotated watermark text are ignored. Lines starting with Total or Summary are skipped.
Date formats it recognizes
| Printed on the statement | Read as | Notes |
|---|---|---|
| 31/01/2026, 31-01-2026, 31.01.2026 | January 31, 2026 | Two-digit years like 31/01/26 work too |
| 01/31/2026 | January 31, 2026 | US month-first order |
| 2026-01-31 | January 31, 2026 | Year first |
| 31 Jan 2026, 31-Jan-26, 31 January 2026 | January 31, 2026 | Short or full month names |
| Jan 31, 2026 or January 31 | January 31, 2026 | Common on US card and bank statements |
| 31 Jan or 31/01 (no year) | January 31 of the statement year | The year comes from the statement period text and moves forward when December rolls into January |
A date like 03/04/2026 could be March 4 or April 3. The converter looks at every date in the file: if any first number is above 12 the file is day first, and if any second number is above 12 it is month first. When every date is ambiguous it assumes month first for statements that show dollar signs and day first otherwise, and it tells you so above the table. Change Dates in the PDF are if the guess is wrong, and every row updates at once.
Amounts and signs
| Printed amount | Read as |
|---|---|
| 1,234.56 or $1,234.56 | 1234.56 |
| 1.234,56 or 1 234,56 (European style) | 1234.56 |
| -1,234.56, 1,234.56- or (1,234.56) | 1234.56 out |
| 1,234.56 DR or 1,234.56 Dr | 1234.56 out |
| 1,234.56 CR or +1,234.56 | 1234.56 in |
| 1,234.56 with Dr or Cr in its own column | Out or in, by that column |
Currency symbols and codes such as $, ยฃ, โฌ, โน, Rs, PKR, USD and GBP are removed. To avoid reading account numbers, check numbers and years as money, a value only counts as an amount when it has two decimals (12.50) or thousands separators (12,000).
Statements with separate debit and credit columns are the easy case. When a statement has one amount column, the sign comes from a minus, brackets, a DR or CR mark, or a Dr/Cr column. If there is no mark at all, the converter compares the balance before and after the row: if the balance went up by that amount it is money in, and if it went down it is money out.
Check the result before you download
The balance check is the fastest way to trust the output. For every row with a printed balance, the converter takes the previous balance, adds the credit, subtracts the debit and compares the result with the balance on the statement, to the cent. A statement read correctly shows something like 46 / 46 rows that add up.
When some rows fail, the cause is usually one of these:
- Debit and credit are swapped. Every row fails. Swap the two dropdowns. On an automatic mapping the converter already tries the swap and keeps whichever reading adds up better.
- A column holds something else. Some statements print a running total of fees or an exchange rate in its own column. Set that column to Ignore.
- A fee sits on its own line without a balance. The next row then fails by the fee amount. Compare the red row with the PDF; the data is usually right and the statement simply skipped a balance.
- A page starts mid-day. If a statement repeats the previous page's closing balance as the first line of the new page without a label, remove that row.
A worked example
Here is a short part of a typical UK current account statement, with the date printed once per day and one description wrapped onto two lines:
| Date | Payment type and details | Paid out | Paid in | Balance |
|---|---|---|---|---|
| BALANCE BROUGHT FORWARD | 2,450.18 | |||
| 03 Jan 26 | STANDING ORDER RENT FLAT 4 HIGH STREET MONTHLY | 1,150.00 | 1,300.18 | |
| 05 Jan 26 | SHOPIFY PAYOUT 5521 | 842.37 | 2,142.55 | |
| CARD PAYMENT TO TESCO STORES | 36.20 | 2,106.35 |
The converter produces three rows. The rent row gets the full description STANDING ORDER RENT FLAT 4 HIGH STREET MONTHLY with 1150.00 in Debit. The Shopify payout has 842.37 in Credit. The Tesco payment has no printed date, so it takes 2026-01-05 from the row above. The brought forward line is not a transaction, but its 2,450.18 is used for the check: 2,450.18 minus 1,150.00 is 1,300.18, plus 842.37 is 2,142.55, minus 36.20 is 2,106.35. All three rows match, so the check reads 3 / 3.
Using the file in Excel, Google Sheets and accounting software
The Excel file has one sheet called Transactions with a bold header row that stays in view as you scroll, a filter on every column, real date cells (so sorting by date works) and amounts formatted to two decimals. The CSV is UTF-8 with plain numbers such as 1150.00, which every spreadsheet and accounting app reads without guessing at commas. Text that starts with =, +, - or @ is prefixed so a spreadsheet never runs it as a formula.
For QuickBooks Online, Intuit's help pages (checked September 2026) describe two CSV layouts for a bank upload: three columns (Date, Description, Amount, with payments negative) or four columns (Date, Description, Credit, Debit). The file must be 350 KB or less, and Intuit recommends one date format throughout, ideally dd/mm/yyyy. To match:
- Set Dates in your file to the format your QuickBooks company uses.
- For the three-column layout, tick Add a signed Amount column, open the Excel file and delete the Debit, Credit and Balance columns. For four columns, delete Balance and put Credit before Debit.
- Save as CSV and upload it in QuickBooks under Bank transactions with Link account > Upload from file. See Intuit's upload guide for the current steps.
Xero, Wave and most other bookkeeping tools also take a CSV bank statement. Check the column names their import screen asks for and rename the headers to match.
For store owners, a converted statement is the quickest way to line up Shopify, PayPal and Stripe payouts against what the processor says you were paid. Our Shopify fee calculator and PayPal fee calculator show what each payout should have been before fees, so a gap stands out.
Password-protected and scanned statements
Many banks email statements as password-protected PDFs. The converter opens them with the password you type, and the password is used only inside this page. If it is wrong you can try again straight away. You do not need to remove the password first.
A scanned or photographed statement is different. It is a picture of text, with no text layer for the converter to read, and the tool says so as soon as you open it. Two options work:
- Download the statement again from online banking. Downloaded statements nearly always have real text, even from banks whose paper statements are scanned.
- If a scan is all you have, turn the pages into images with PDF to JPG and read them with Image to Text. OCR gives you plain text lines, not a table, so you will need to split the columns in a spreadsheet, and you should check every amount, because OCR can misread a 5 as a 6.
Troubleshooting
| What you see | Likely cause | What to do |
|---|---|---|
| No transactions were found | A scan, a summary-only page, or dates in an unusual place | Try another setting for Dates in the PDF are, or download the statement again |
| Dates are a month off or impossible | Day and month order guessed wrong | Change Dates in the PDF are to Day first or Month first |
| Money in shows as money out | Debit and credit columns swapped | Swap the two dropdowns under Number columns found |
| A description has text from the next row | Unusually tight line spacing | Edit that cell in your spreadsheet after download |
| An extra row with a big amount | A summary or total line without the word Total | Remove it with the x |
| The balance check fails on every row | A column is mapped to the wrong role | Look at the sample values on each card and fix the dropdowns |
Limitations
- It needs a text PDF. Scans and photos need OCR first, as described above.
- It reads the statement's layout, so a very unusual design, such as transactions laid out in two side-by-side columns on one page, may need manual cleanup.
- Amounts need two decimals or thousands separators. Currencies with no decimals, like the yen, only read when the numbers have thousands separators, so 950 on its own is not picked up.
- The preview shows the first 300 rows; the downloads include every row.
- It converts one statement at a time. For a year of statements, convert each month and paste the rows into one sheet.
- It is a reading aid, not an accounting service. Check the balance figure and your bank's own totals before you file anything.
Your statement stays on your device
The converter is a script that runs in your browser tab. The PDF is opened from your disk into the page's memory, the rows are built there, and the Excel or CSV file is created there and saved by your browser. Nothing is sent to our server, not the file, not the password, not the transactions. Close the tab and it is gone. If you want to confirm this, open your browser's developer tools on the Network tab while you convert: you will see no upload.
If you only need part of a long statement, cut the pages you want with Split PDF first; it also runs in your browser.