Convert bank statement PDF to CSV

Drop the PDF below and download a CSV with Date, Description, Amount and Balance columns. Before downloading you can switch the delimiter between comma and semicolon, the date format between 2024-03-31, 03/31/2024 and 31/03/2024, and the amount layout between one signed column and separate Debit and Credit columns. Every row is reconciled before export.

What CSV is and where it imports

CSV is plain text: one transaction per line, fields separated by a delimiter. Almost every program reads it, which is its strength, but nothing in the file says which delimiter, decimal mark or date order was used. That is why the same file can open perfectly on one computer and land in a single column on another.

The default export uses a comma delimiter, ISO dates (YYYY-MM-DD) and a dot as the decimal mark, which is the combination least likely to be misread. If your spreadsheet runs with a German, French or other European locale, choose the semicolon delimiter; the decimal mark then switches to a comma to match.

The file starts with a UTF-8 byte order mark so that Excel on Windows shows accented and non-Latin characters correctly. Text cells that begin with =, +, - or @ get a leading apostrophe so a spreadsheet will not run them as formulas.

Imports into: Excel, Google Sheets, databases and scripts, most accounting tools that accept a custom CSV

How to import the file

Microsoft Excel (Windows)

  1. Choose Data > From Text/CSV and pick the file, rather than double-clicking it.
  2. In the preview, set File Origin to 65001: Unicode (UTF-8) and the delimiter to match your export.
  3. Click Load. If dates look wrong, choose Transform Data and set the Date column type with the right locale.

Google Sheets

  1. Choose File > Import > Upload and pick the CSV.
  2. Set Separator type to Detect automatically or to the delimiter you chose.
  3. Leave Convert text to numbers, dates, and formulas on so amounts become numbers.

Common import errors

Everything lands in column A.
The program expected a different delimiter. Re-export with the semicolon option, or use the import dialog and pick the delimiter by hand.
03/04/2024 is read as 4 March instead of 3 April.
Day and month were swapped by the locale. Export with ISO dates (2024-04-03), which no spreadsheet reads ambiguously.
Names such as Müller or Zürich show garbled characters.
The file was opened as ANSI. Import it through Data > From Text/CSV with UTF-8 selected; the byte order mark in our file usually makes this automatic.

Download a sample file

Built from our synthetic sample statement by the same exporter the converter uses. Open it to see the exact layout before you convert your own statement.

CSV vs QBO vs OFX vs Xero CSV

FormatBest forDuplicate detectionCarries closing balanceColumn mapping on importDate format
CSVSpreadsheets, scripts, tools with a custom CSV importNoPer-row running balance columnYes, every timeYour choice: ISO, MM/DD/YYYY or DD/MM/YYYY
QBO (Web Connect)QuickBooks OnlineYes, FITID per transactionYes, ledger balanceNoFixed YYYYMMDD, never ambiguous
OFX 2.2Xero, GnuCash, Moneydance and other finance appsYes, FITID per transactionYes, ledger balance per currencyNoFixed YYYYMMDD, never ambiguous
Xero CSVXero bank statement import with a line-by-line reviewNo transaction IDs; Xero may flag possible duplicatesNoTemplate columns, recognised by XeroDD/MM/YYYY

FAQ: CSV

Is this CSV ready for QuickBooks or Xero?

Not directly. Both expect their own column layout. Use the Xero CSV or QuickBooks Online CSV export instead; they are separate formats on their own pages.

Which delimiter should I choose?

Comma unless your spreadsheet uses a comma as the decimal mark. In that case choose semicolon, and amounts are written with a decimal comma.

Why is there a Balance column?

It is the running balance printed on the statement for each row. Keeping it lets you or a script repeat the reconciliation after you edit the file.

Could I ask ChatGPT for a CSV of my statement instead?

You can, and on a short statement it may be fine, but you would need to add up the rows yourself to know nothing is missing. This converter checks each row against the running balance, keeps the file in your browser, and lets you set delimiter and date order before download.

What if the statement has several currencies?

The CSV gets an extra Currency column so rows from different currencies are never mixed up. Balances are reconciled per currency before export.