Bank Statement Converter

Convert CSV and text-based PDF bank statements into clean files for QuickBooks, Xero or standard accounting workflows. Your statement stays in your browser.

Accepted: CSV, TXT or text-based PDF bank statements. Your file is processed locally in this browser and is never uploaded.

Conversion preview

Verify dates, signs, row count and totals against the original statement before importing.

What this tool does

Convert a bank statement — CSV or a text-based PDF, including password-protected PDFs unlocked entirely in your browser — into a clean file ready for QuickBooks Online, Xero, or a standard Debit/Credit or signed-amount CSV. CSV and PDF each keep their own parser internally, but both feed one shared normalized transaction model so every export format works the same way regardless of source. Converting to Zoho Books? Use the dedicated Zoho Books CSV Formatter.

  • CSV and text-based PDF input, including password-protected PDFs
  • Automatic headerless-CSV and column-role detection with manual correction
  • Signed amount, separate Debit/Credit, Dr/Cr-suffix, and Amount-plus-Type layouts all supported
  • Six export presets: Standard Debit/Credit, Standard Signed Amount, QuickBooks (3 and 4 column), Xero, and an All-Data preservation export
  • Every source row is always included — rows that can't be confidently separated are kept and marked "Needs checking" instead of being skipped, excluded or silently guessed
  • Running-balance reconciliation where a balance column is available (informational only — never hides or removes a row)

How to use it

  1. Upload your statement (CSV or PDF).
  2. Enter the PDF password if asked — used only in your browser.
  3. Confirm the detected columns and amount structure, correcting anything that looks wrong.
  4. Choose an export format and, if relevant, an output date format.
  5. Check the summary — total rows, ready rows, rows needing checking, totals and date range.
  6. Download. The platform-ready export always includes every row; download the All-Data export too if you want every original field preserved.
Privacy: Your file — and, for a password-protected PDF, the password itself — is never sent to any server. Parsing, PDF text extraction and password unlocking all happen locally in this browser.

Questions about the Bank Statement Converter

Will this work with my bank's PDF statement?

Only for text-based PDFs where the statement text can be selected or copied — not scanned/image-only PDFs, which are detected and rejected with a clear message. Layout recognition varies by bank and is not guaranteed for every statement design; rows the tool isn't confident about are marked "Needs checking" rather than guessed.

Are these official QuickBooks or Xero integrations?

No. These are compatibility presets built from each platform's own published import documentation (see PLATFORM-IMPORT-FORMATS.md in this project) — neither platform certifies or endorses this tool, and column requirements can vary by account type, region or plan.

Where did the Zoho Books export go?

Zoho Books' three layouts (Double Column, Amount and Type, Signed Amount) moved to their own dedicated Zoho Books CSV Formatter, which shares the exact same parsing and export logic as this tool.

What happens to a row that can't be confidently converted?

It is never dropped and never guessed. Its original data is kept, Status is set to "Needs checking", and its untouched original amount/text is preserved — the row still appears in every export, including the platform-ready one.

What is the All-Data export for?

It always contains every source row with every normalized field — Debit, Credit, signed Amount, Balance, transaction type, status, the original value and the original row/source position — so nothing is ever lost even if a platform-specific export can't represent a row perfectly.

Is my PDF password safe?

Yes. It is used only in your browser to unlock the file locally (via a bundled copy of PDF.js, not a server or third-party service) and is discarded immediately afterward — it is never transmitted, logged, or stored.