PDF to CSV with import presets
Bank statement PDF to CSV
Convert a PDF statement to a CSV that imports without a fight. Pick a preset for Xero or QuickBooks Online, or take the full file with every column and the reconciliation result.
- Xero and QuickBooks Online presets
- UTF-8 with RFC 4180 quoting
- Unambiguous ISO dates by default
- Checked against the running balance
Date,Description,Debit,Credit,Balance2026-03-02,ACH DEPOSIT STRIPE PAYOUT,,4210.00,16690.552026-03-03,POS AMAZON MKTPLACE,86.43,,16604.122026-03-05,CHECK #1042,1250.00,,15354.122026-03-08,ZELLE FROM J MORALES,,640.00,15994.12
The short answer
Converting a bank statement PDF to CSV
To convert a bank statement PDF to CSV, upload the PDF, review the extracted transactions, and export the CSV preset that matches your software: Xero, QuickBooks Online's three-column layout, or the full file with every column. Each preset writes the column names and order that importer looks for, so there's little or nothing to remap.
CSV is the most widely accepted import format there is, and also the easiest to get subtly wrong. A description containing a comma shifts every column after it. A date like 03/04/2026 is read as March or April depending on the importing software's region. An amount with a thousands separator can arrive as text. None of these fail loudly; they import and are wrong.
The CSVs written here avoid all three: fields are quoted to RFC 4180, dates default to year-month-day, and amounts are plain signed decimals. The rows have already been checked against the statement's running balance and totals, so what you import adds up to what the bank printed.
Step by step
PDF to CSV, then into your software
- 1Upload and reviewSign in, upload the PDF statement (digital, scanned or password-protected) and look over any row flagged by the running-balance check. Each row links to its highlighted line on the PDF.
- 2Choose the presetXero CSV for Xero. QuickBooks CSV for QuickBooks Online. The full CSV for spreadsheets, Wave, Zoho Books, FreshBooks or anything that maps columns on screen.
- 3Import into XeroAccounting → Bank accounts → choose the account → Import a statement. Browse to the file, confirm Xero has matched the columns, check the date format it's assuming, and import.
- 4Or import into QuickBooks OnlineTransactions → Bank transactions → Link account → Upload from file. Choose the file and the account, map Date, Description and Amount, then review the rows in the For review tab before adding them.
- 5ReconcileBecause the rows already tie to the statement's opening and closing balance, reconciliation in your software should match on the first pass. If it doesn't, the usual cause is an overlap with transactions the bank feed already brought in.
Why it works
A CSV built for importers
Presets, not just "a CSV"
Each accounting package wants its own columns in its own order. Choose the target and the headers match what its importer expects.
Commas and quotes are safe
Descriptions with commas, quotes or line breaks are quoted and escaped to RFC 4180, so one awkward merchant name can't shift every column.
Dates that can't be misread
YYYY-MM-DD by default, the only order no importer confuses. The statement's own date order is settled once before writing.
UTF-8 throughout
Accented names, non-Latin scripts and currency symbols survive intact, unlike in formats limited to older character sets.
Reconciliation travels with it
The full CSV includes a Reconciliation column and closes with a summary of the checks, so a reviewer can see what was verified.
Checked before export
A misread digit is caught on its own row
Every conversion is tested against the statement: the running balance on every row, page subtotals, opening plus movement against closing, the printed credit and debit totals, and the transaction count. When a number does not add up, VouchRow names the row and highlights the line it came from on the PDF.
Arithmetic only: it verifies amounts, balances and totals, not descriptions or dates, and two errors that cancel out would pass. The source-line link covers the rest.
How the checks workRunning balance check
- POS AMAZON MKTPLACE−86.4316,604.12
- CHECK #1042−1,250.0015,354.12
- ZELLE FROM J MORALES+640.0015,994.12
Every row agrees with the balance printed beside it.
Presets
The bank statement CSV layouts, column by column
All the presets come from the same reviewed transactions. They differ only in which columns are written and in what order.
| Preset | Columns | Use it for |
|---|---|---|
| Full (default) | Date, Description, Payee, Reference, Debit, Credit, Amount, Balance, Type, Reconciliation | Spreadsheets, review, Wave, Zoho Books, FreshBooks, anything with on-screen mapping |
| Xero | Date, Amount, Payee, Description, Reference, Cheque Number | Xero's statement import, which matches these header names |
| QuickBooks | Date, Description, Amount | QuickBooks Online's three-column bank upload |
How the amount columns work
The Amount column is a single signed value: negative for money out, positive for money in. That's the convention Xero, QuickBooks Online and MYOB expect, and getting it backwards is the most common reason an imported statement shows every deposit as a withdrawal.
The full preset also writes Debit and Credit as separate positive columns, for packages and reviewers who prefer them. Amounts have no thousands separators and no currency symbols, just a decimal point, so no importer can read them as text.
At the end of the full CSV, after a blank line, two lines starting with # summarise the reconciliation and its scope. If an importer complains about them, use the Xero or QuickBooks preset, which contain transactions only.
Troubleshooting
Common CSV import errors and how to fix them
Most CSV import failures come down to a handful of causes.
| Symptom | Likely cause | Fix |
|---|---|---|
| "Invalid date" on some rows only | Day-first dates read as month-first: anything after the 12th fails and the rest import on the wrong date | Use ISO dates, or set the importer's date format to match the file |
| Columns shifted from one row onwards | An unquoted comma in a description | Use a properly quoted CSV, as written here |
| Deposits shown as withdrawals | Sign convention reversed, or debit/credit columns mapped the wrong way | Map the single signed Amount column instead |
| Totals off by a whole transaction | A row lost at a page break during conversion | Check the reconciliation before importing; the statement total will not tie |
| Same month imported twice | CSV has no transaction ID, so most importers can't detect repeats | Check the date range first, or use QBO, QFX or OFX |
Duplicates
What a CSV can't do: duplicate detection
A CSV row has no unique transaction ID. When you import the same period twice, or import a month that overlaps what the bank feed already pulled in, most software has no reliable way to tell that two identical-looking rows are the same transaction rather than two coffees on the same day.
If duplicates are a risk (catch-up work, partial months, shared files), use a format that carries IDs. QBO for QuickBooks, QFX for Quicken and OFX for Xero, Sage and MYOB all write a FITID for every transaction. Those IDs are built from the transaction itself, so a re-import is recognised.
When to use something else
CSV, or a different format?
CSV is the right choice when you want to see and adjust the rows, when your software maps columns on screen, or when nothing else is accepted (FreshBooks' manual import is CSV). For a spreadsheet, take Excel instead: amounts stay numeric whatever your computer's regional settings.
For Xero, OFX is a reasonable alternative to the Xero CSV if you'd rather skip the mapping step. For QuickBooks, QBO is better when you have your bank's Intuit bank ID. For Tally, CSV isn't Tally's import route at all; use Tally XML.
Side by side
Your bank's CSV export vs converting the PDF
If your bank offers a CSV download, start there. Here is when the PDF route is the better one.
| Bank's own CSV export | Converted from the PDF here | |
|---|---|---|
| History available | Limited to the bank's download window | Any statement you have as a PDF |
| Closed accounts | Often no longer downloadable | Works from the statements you kept |
| Scanned or client-supplied statements | Not applicable | Supported, with OCR |
| Column layout | The bank's own, needs mapping | Preset for Xero or QuickBooks Online |
| Ties to the statement balances | Not shown | Checked row by row and against totals |
| Running balance column | Sometimes omitted | Included where the statement prints one |
Who uses it
Who converts statements to CSV
Xero users in the UK, Australia and New Zealand
Xero's native PDF import is limited to US and Canadian organisations. Everywhere else, a converted CSV or OFX file is how PDF-only history gets in.
Bookkeepers onboarding a client
Months of PDF statements become import-ready CSVs that already tie to each statement's closing balance.
Anyone with an accounting package that maps columns
Wave, Zoho Books and FreshBooks all take CSV. The full preset gives them every column to map from.
FAQ
Bank statement PDF to CSV: questions
How do I convert a bank statement PDF to CSV?
Upload the PDF, review the rows (anything that breaks the running balance is flagged), and export one of the CSV presets: Xero, QuickBooks Online or the full file. The download is UTF-8 with properly quoted fields.
Which CSV layouts do you produce?
A full one with every column and the reconciliation result, a Xero bank-statement layout (Date, Amount, Payee, Description, Reference, Cheque Number), and the three-column Date, Description, Amount layout QuickBooks Online accepts.
Which date format is used?
ISO (YYYY-MM-DD) by default, because it's the only order no importer can misread. Day-first and month-first are available where an importer insists on them.
Will a description with a comma break the file?
No. Fields containing commas, quotes or line breaks are quoted and escaped according to RFC 4180. Unquoted commas are the most common way a hand-made CSV corrupts a whole import.
What is a CSV bank statement?
A plain-text file with one transaction per line and fields separated by commas, usually date, description and amount, sometimes with a balance. Most accounting software can import one, but CSV has no standard layout, which is why each importer asks you to map columns.
How do I import the CSV into Xero?
Accounting → Bank accounts → choose the account → Import a statement, then select the file. With the Xero preset the columns line up with Xero's own names. Check the date format Xero assumes before you confirm.
Does QuickBooks Online accept a CSV bank statement?
Yes, in three-column (Date, Description, Amount) or four-column (separate credit and debit) form, through Transactions → Bank transactions → Link account → Upload from file. CSV skips QuickBooks' duplicate detection, so check the date range before importing.
Can I convert a scanned statement to CSV?
Yes. Scanned pages are read with OCR and checked the same way as digital ones. Scans convert one statement at a time.
Keep going
Related guides and converters
Related formats
Software
Get an import-ready CSV from any PDF statement
Create an account, upload a statement and export the preset your software expects. Starter is $15 a month for 300 pages, and CSV is included on every paid plan.