VouchRow

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
statement.pdf statement.csv
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
Balanced · every row checked before this CSV file was written

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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 work

Running balance check

RowAmountBalance
  • 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.

PresetColumnsUse it for
Full (default)Date, Description, Payee, Reference, Debit, Credit, Amount, Balance, Type, ReconciliationSpreadsheets, review, Wave, Zoho Books, FreshBooks, anything with on-screen mapping
XeroDate, Amount, Payee, Description, Reference, Cheque NumberXero's statement import, which matches these header names
QuickBooksDate, Description, AmountQuickBooks Online's three-column bank upload
CSV presets

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.

SymptomLikely causeFix
"Invalid date" on some rows onlyDay-first dates read as month-first: anything after the 12th fails and the rest import on the wrong dateUse ISO dates, or set the importer's date format to match the file
Columns shifted from one row onwardsAn unquoted comma in a descriptionUse a properly quoted CSV, as written here
Deposits shown as withdrawalsSign convention reversed, or debit/credit columns mapped the wrong wayMap the single signed Amount column instead
Totals off by a whole transactionA row lost at a page break during conversionCheck the reconciliation before importing; the statement total will not tie
Same month imported twiceCSV has no transaction ID, so most importers can't detect repeatsCheck 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 exportConverted from the PDF here
History availableLimited to the bank's download windowAny statement you have as a PDF
Closed accountsOften no longer downloadableWorks from the statements you kept
Scanned or client-supplied statementsNot applicableSupported, with OCR
Column layoutThe bank's own, needs mappingPreset for Xero or QuickBooks Online
Ties to the statement balancesNot shownChecked row by row and against totals
Running balance columnSometimes omittedIncluded where the statement prints one

Who uses it

Who converts statements to CSV

01

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.

02

Bookkeepers onboarding a client

Months of PDF statements become import-ready CSVs that already tie to each statement's closing balance.

03

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.

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.