Blog · November 8, 2026

Bank statement to CSV for QuickBooks, Wave and Google Sheets

To get a PDF bank statement into bookkeeping software or a spreadsheet you need a CSV with one row per transaction and clean columns: a date, a description and an amount, ideally split into debit and credit. Bank Statement Analysis makes that file from the PDFs your bank gives you, in your browser: drop up to 24 statements, check that each one adds up, press Export CSV. Free, no account, nothing uploaded. Here is exactly what the file contains and how it fits the import formats most tools expect.

Make your CSV now

The column layout

The CSV has a header row and eight columns:

ColumnContentExample
DatePosting date, YYYY-MM-DD2026-03-14
DescriptionThe statement's wording, unchangedACH Debit Harbor Light Utilities 00412
CategoryAssigned by US merchant rules, editableUtilities
DebitMoney out, number, two decimals84.17
CreditMoney in, number, two decimals
BalanceRunning balance after the row, when the statement prints one5218.44
StatementThe PDF file the row came fromchecking-2026-03.pdf
PagePage in that PDF2

Numbers carry no currency symbol and no thousands separator, so a spreadsheet reads them as numbers rather than text. Exactly one of Debit and Credit is filled on every row. The file is UTF-8 with a byte-order mark, so Excel opens accented merchant names correctly. Descriptions that contain a comma or a quote are quoted the standard way.

Debits and credits in import formats

Bookkeeping tools accept bank transactions in one of two shapes, and most let you map your columns during import.

We have not tested the import into any particular product, and import screens change. The general rule holds across QuickBooks, Wave, Xero, FreshBooks and the rest: a CSV with a date, a description and an amount in one of the two shapes above imports, and the tool asks you which column is which. Check your product's CSV import help for the date format and sign convention it wants before you load a year of rows.

Dates

Dates are written as YYYY-MM-DD, so 2026-03-04 is March 4 and cannot be read as April 3. Spreadsheets recognise the form on open. If an import screen offers only MM/DD/YYYY, reformat the column in the spreadsheet first. Statements that print the date without a year ("03/14") get the year from the statement period.

Use the running balance as a sanity check

The Balance column is the reason to trust the rest of the file. Each row's balance equals the previous row's balance plus its credit minus its debit, so in a spreadsheet =F3-(F2+E3-D3) filled down should be zero on every row; where it is not, something is missing or has the wrong sign. The tool runs the equivalent check per statement before you export: it adds the rows from the printed opening balance, compares with the printed closing balance, and reports under the table how many statements add up, naming any that are off and by how much. A statement that fails usually has a page missing from the PDF; download it again from the bank and drop the new file. Statements without a balance column leave Balance empty; the per-statement check still runs when opening and closing totals are printed.

Twelve months in one file

Drop all the statements of a year together. The rows of every PDF go into one CSV, sorted by date, with the Statement and Page columns saying where each row came from: one import instead of twelve, and any figure traces to a file name and a page number. The Category column is filled by rules for common US merchants (groceries, fuel, utilities, subscriptions, fees, transfers and so on); change one row's category and every row from that payee follows. Keep or ignore that column as your chart of accounts dictates.

What it cannot read

Text PDFs only, the kind your bank's site lets you download. A scanned or photographed statement has no text layer and is reported as scanned rather than read. A password-protected PDF must have its password removed first; your PDF viewer can save a copy without one. A combined statement that lists two accounts in one PDF is read as one table and will not add up.

Privacy

A bank statement names every payer and payee you have. The PDF is read, categorised and written out as CSV by code running in your browser, and the download is produced by the browser itself. No statement content reaches a server. The site records a few content-free counts, such as how many files were dropped and whether the balances added up; the privacy page lists each of them.

Frequently asked

What columns does the CSV have?

Date, Description, Category, Debit, Credit, Balance, Statement, Page. Dates are YYYY-MM-DD; amounts are plain numbers with two decimals.

Can I import the CSV into QuickBooks, Wave or another bookkeeping tool?

Most tools import a CSV with a date, a description and an amount, in separate debit and credit columns or one signed column, and let you map the columns. The file fits that pattern; we have not tested any particular product's import, so check its help for the format it wants.

Can I put 12 months of statements in one CSV?

Yes, up to 24 statements, sorted by date, each row naming its statement and page.

Why is there a Balance column?

The running balance proves the file is complete: each balance must equal the previous one plus credit minus debit. The tool also checks each statement from opening to closing balance.

Is my statement uploaded to make the CSV?

No. Reading and writing happen in your browser; only content-free counts are recorded.

Open the tool The Excel export