Convert a PDF bank statement to CSV
5 min read
Quick answer
CSV is the universal interchange format for transaction data — every spreadsheet, script, database, and finance app reads it. But a PDF bank statement is built for reading, not parsing, so copy-pasting it into a spreadsheet produces broken columns. QuickBankConvert reads the statement layout and exports tidy date, description, amount, and balance columns as CSV, usually in under a minute. You never share a bank login, and CSV export is free with a free account.
Drop your bank statement here
PDF or OFX · Max 4.4 MB
Uploaded over an encrypted connection. We never ask for your bank login. Privacy
Preview free with no account. Free account to download.
Why CSV is the format you actually want
CSV — comma-separated values — is plain text: one row per transaction, columns separated by commas. There is no proprietary format, no version lock-in, and no app required to open it. That simplicity is exactly why it has become the lingua franca for moving financial data between tools:
- Scripts. A Python script with the built-in
csvmodule, or a few lines of Node or shell, can read a CSV with zero dependencies. - pandas and R.
pandas.read_csv()and R'sread.csv()turn a statement into a dataframe instantly, ready for grouping, filtering, and charting. - Databases. Postgres
COPY, MySQLLOAD DATA INFILE, and SQLite.importall ingest CSV directly — no ETL tooling needed. - Finance apps. YNAB, Tiller, Lunch Money, QuickBooks, and Xero all accept CSV imports with column mapping.
- Spreadsheets. Excel, Google Sheets, and Numbers open CSV natively, so you can pivot and chart without any conversion step.
If your destination is a database or a data pipeline, CSV is almost always the path of least resistance. If you mostly live in spreadsheets, our PDF to Excel guide covers the .xlsx route instead.
Why bank PDFs don't export cleanly
A PDF positions text at exact x/y coordinates on a page; it has no concept of a "column" or a "row." Statements use proportional fonts, multi-line merchant descriptions, and summary boxes for interest, fees, and rewards. When you select-and-copy that into a spreadsheet, three things go wrong:
- Columns collapse. The visual gap between description and amount is just whitespace, so everything lands in one cell.
- Descriptions wrap. A long merchant name that spanned two lines on the page becomes two rows, detached from its amount.
- Debits and credits merge. Money in and money out often share a column with no sign, so totals are meaningless.
QuickBankConvert is built for these layouts. It recognizes the structure of the statement — not just the raw text order — so wrapped descriptions stay attached to the right transaction and amounts stay in their own column. It works across hundreds of bank and card formats.
How to convert a PDF to CSV
- Upload the PDF. Drag your statement onto the converter. The file is uploaded over an encrypted (HTTPS) connection and parsed on our servers.
- Review the preview. Check the date, description, amount, and balance columns. Misreads are rare, but check the totals against your statement before exporting.
- Export the CSV. Download the CSV (free with a free account) and open it in your spreadsheet, script, database, or finance app.
The CSV schema you get
Each row is one transaction. The file always has the same five columns, and its first line is this header row:
Date,Description,Category,Amount,Balance| Column | Type | Description |
|---|---|---|
Date | text | Transaction or posting date as read from the statement, normally written YYYY-MM-DD so it sorts. |
Description | text | Merchant or payee, joined onto a single line. Quoted when it contains a comma. |
Category | text | The category we assigned to the transaction. Empty when there is none. |
Amount | number | One signed value: negative for money out, positive for money in. |
Balance | number | Running account balance. Empty when the statement prints none. |
Because the date is normalized and the amount is a single signed number, the file sorts and sums correctly the moment you open it — no find-and-replace or sign-flipping required.
Importing the CSV into common tools
- Excel / Google Sheets: open the file directly, or use Data → Import for control over delimiters and types.
- pandas:
df = pandas.read_csv("statement.csv", parse_dates=["date"])and you're ready togroupbyand chart. - R:
df <- read.csv("statement.csv"), thenas.Date(df$date)for time-series work. - SQLite:
.mode csvthen.import statement.csv transactions. - Budgeting apps: use the app's CSV importer and map
date,description, andamountto its fields.
Need a different shape for accounting software? Plus, Pro, and Business add TSV and JSON, plus QBO, QIF, and a Xero export. The import steps are in the QuickBooks guide and the Xero guide.
Is it private?
Your statement is uploaded over an encrypted (HTTPS) connection and parsed on our servers, and a copy is stored — you can ask us to delete it at any time through the contact page. You never link a bank login or share credentials. Review the Privacy Policy for exactly what is stored and who processes it, or the FAQ for more detail.
Free vs paid
- Free. With no account you can preview one statement a day (up to 10 pages). A free account lets you download CSV and Excel (
.xls) for 3 statements a month, up to 10 pages each. - Plus ($29/mo). Adds TSV, JSON, QBO, QIF, and Xero exports, and raises the limits to 50 statements a month and about 50 pages per statement.
- Pro ($59/mo). Covers 200 statements a month, supports up to about 100 pages per statement, and adds client labels and batch processing for converting a folder of statements at once.
- Business ($99/mo). Everything in Pro, with 600 statements a month.
See pricing for current limits and the full feature comparison.
Related guides
- Convert a PDF bank statement to Excel
- PDF to CSV for Xero
- Browse all supported banks
- Browse all formats
Frequently Asked Questions
Is converting a PDF statement to CSV free?
Yes. CSV and Excel export are free with a free account — 3 statements a month, up to 10 pages each. Without an account you can preview the parsed transactions first. Plus, Pro, and Business raise the monthly and page limits and add formats like TSV, JSON, QBO, QIF, and Xero.
What columns does the CSV contain?
Five columns, with this header row: Date,Description,Category,Amount,Balance. Date is normally written YYYY-MM-DD, Description is joined onto one line, Category is the category we assigned, Amount is a single signed number (negative for money out, positive for money in), and Balance is filled in when the statement prints a running balance.
Can I import the CSV into pandas, a database, or a budgeting app?
Yes. CSV is the universal format: pandas.read_csv() and R read.csv() load it as a dataframe, Postgres COPY and SQLite .import ingest it directly, and apps like YNAB, QuickBooks, and Xero accept it via their CSV importers.
Is my bank statement uploaded to a server?
Yes. The PDF is uploaded over an encrypted (HTTPS) connection and parsed on our servers, and a copy is stored; you can ask us to delete it at any time through the contact page. You never link a bank login or share credentials. See the Privacy Policy for details.
Can I convert many statements at once?
Convert each statement individually on the Free plan, or use Pro batch processing to drop in a folder of statements and export them together. See the pricing page for current per-statement page limits.
Ready to convert your statement?
Free to preview. No bank login. Results in about a minute.
Convert a statement