FlowParse
Wave Accounting · CSV & OFX

Bank statement to Wave

Turn any bank's PDF statement into the CSVWave's statement upload reads — or an OFX file — so transactions land in Wave without manual entry. Any bank, scanned or digital, balance-validated.

Any bank · scanned or digital · balance-validated · CSV or OFX

FlowParse
flowparse.io
See it before you upload

A real sample: bank statement (us style) — to a Wave-ready bank feed

A fictional sample document converted by the same engine you get — flip through the source PDF and every export format, or download the files themselves.

sample.pdfFictional data
Bank statement (US style) — source PDF preview page 1
.pdf .qbo .xlsx .csv .qfx .ofx .sta .xml .xml
All samples →

Get PDF statements into Wave the easy way

Wave is a favourite for freelancers and small businesses because it's free and simple — but automatic bank connections aren't available everywhere, and many people end up uploading statements by hand. Typing a month of transactions into Wave one line at a time is exactly the chore that puts people off keeping their books up to date.

FlowParse removes the typing. Upload the PDF and the AI extracts every transaction into the clean CSV Wave's statement upload expects — or an OFX bank-feed file — so you upload once and categorise. The same engine also produces .QBO and .QFX if you also use QuickBooks or Quicken.

Two ways into Wave

CSVWave's statement upload — map Date, Description, Amount once
OFXBank-feed file with a unique ID per transaction

In the file

Every transaction extracted
Signed amounts (money in / out)
Dates normalised
Balance-validated
Any bank, scanned or digital

From PDF to Wave in three steps

1 · Upload the PDF

Drop your PDF bank statement — digital or scanned, any bank, any number of pages.

2 · AI builds the file

FlowParse extracts every transaction, signs the amounts, validates balances and writes a clean CSV (or OFX).

3 · Upload to Wave

Accounting → Transactions → More → Upload transactions → choose the file and account → confirm columns → upload.

FlowParse
flowparse.io
The upload

How to upload the statement to Wave

CSV upload: in Wave go to Accounting → Transactions → More → Upload transactions, choose the CSV, pick the payment account, and confirm the date, amount and description columns. Wave imports every row.

OFX upload: Wave recommends .OFX, .QBO, .QFX or .ASO over CSV because they need no column mapping. Choose the .QBO or .OFX file in the same upload dialog.

Need the spreadsheet first? See bank statement to CSV.

FlowParse
flowparse.io
FlowParse
flowparse.io
Any bank Wave can't connect

Works with any bank's PDF

Because extraction is AI-based rather than template-based, FlowParse reads layouts it has never seen — ideal for the many banks Wave can't auto-connect:

US banks (Chase, BofA, Wells Fargo…)
Canadian banks (RBC, TD, Scotiabank…)
UK banks & neobanks (Monzo, Wise…)
Digital & scanned PDFs
Multi-page statements
Credit-card statements

Catching up a whole year? Use Smart Merge to consolidate first.

Books you can trust

Validated before it reaches Wave

A bad import quietly throws your numbers off. Before the file is built, FlowParse checks the data so what lands in Wave is complete and correct:

Opening + transactions = closing
Continuous running balance
Duplicate-row detection
Missing-row detection (totals check)
Signed amounts verified
Per-field confidence scores

See the validation engine for how the checks work, and financial data validation for the full set of rules behind them.

FlowParse
flowparse.io
FlowParse
flowparse.io
Every format

One upload, every format

The same extraction powers every export. Run more than one tool, or just want a spreadsheet? Take the same statement to the format you need without re-uploading.

CSV
OFX
Excel
.QBO
.QFX
Xero

Also export to Excel, Sage, or Xero.

Who imports statements into Wave this way

Freelancers & sole traders

Keep Wave current without typing every transaction — upload and categorise.

Side-hustle & e-commerce

Pull card and payout statements into Wave across providers.

Small-business owners

Catch up months of bookkeeping before quarter- or year-end.

Bookkeepers

Onboard Wave clients fast by importing historical PDF statements.

Banks Wave can't connect

Add transactions for any bank that isn't supported by Wave's feeds.

Multi-tool users

Export .QBO/.QFX from the same upload for QuickBooks or Quicken too.

Any bank → one Wave-ready file

Upload statements from every account you track — FlowParse turns each into a clean CSV Wave imports.

FlowParse
flowparse.io

Can you upload a PDF bank statement to Wave?

No. Wave's own help centre says it plainly: Wave does not support PDF files for transaction uploads. The upload dialog accepts five kinds of file — Microsoft Money (.OFX), QuickBooks (.QBO), Quicken (.QFX), Simply Accounting (.ASO) and comma-separated values (.CSV). A PDF, and an Excel workbook saved as .XLS, are turned away; Wave's advice for an .XLS is to re-save it as a comma-delimited CSV.

That is a problem for anyone whose statements only exist as PDFs: months older than the bank's download window, accounts that have been closed, statements a client emailed you, or scans of paper statements. The transactions are there, but not in a form Wave can read. Converting the PDF into one of Wave's five formats is the step in between — and once that is done, the upload itself is the same as for a file downloaded straight from a bank.

Which file to give Wave: QBO, OFX or CSV?

Wave recommends the structured formats. Its help centre says that if your bank offers .OFX, .QBO, .QFX or .ASO, you should download one of those, because all of them are easier to import than a CSV, and calls CSV "a more complex option". The reason is that a structured file already says which field is the date, which is the amount and which is the description, while a CSV has to be mapped column by column during the upload.

FlowParse builds all of them from one upload, so you can follow Wave's advice even when your bank only gave you a PDF:

FileWhen to use it for WaveWhat FlowParse writes
.QBOFirst choice — structured, no column mappingOFX 1.0.2 with the closing balance and a transaction ID per line; card statements written as a credit-card statement
.OFXSame as QBO; use whichever you preferThe same statement in plain OFX
.QFXAccepted too; mainly for Quicken usersThe Quicken-tagged variant
.CSVWhen you want to see or edit every row in a spreadsheet firstExactly three columns — Date, Description, Amount — in the shape Wave's CSV rules ask for

If you are unsure, take the .QBO. If the upload complains, the CSV is the fallback, and the rules it has to meet are below.

Wave's CSV rules, and how the export meets each one

Wave's help article on CSV errors lists every reason an upload fails. The Wave CSV from FlowParse is built to pass each of them, but it helps to know them if you ever edit the file by hand:

Wave's ruleWhat happens if it is brokenIn the FlowParse CSV
Three or four columns: date, amount (one column, or deposits and withdrawals), description"The CSV file must contain an amount, date and description column", or Wave can't read the fileThree columns: Date, Description, Amount
If separate deposit and withdrawal columns fail, use one amount columnUpload does not go throughOne signed Amount column
Only one date column"Wave is having difficulty reading the dates"One date — the transaction date
Dates as YYYY-MM-DD or YYYY/MM/DD, never in the futureDates not recognisedYYYY-MM-DD
Amounts as numbers; minus sign or brackets for negatives; no other symbols"Wave is having difficulty reading the amounts"Plain numbers with a minus sign, no currency symbols
A description column containing words, not only numbers"Wave can't find a description"The bank's description, with any extra source columns joined into it
Column titles at the top, no rows without transactions"Wave can't find any transactions"Header on the first line, transactions only
No balance-total rowsA generic errorNo totals or balance rows
One currency per file"File contains transactions in multiple currencies"One file per statement, in that statement's currency
A short file nameWave can't read the fileA short name; rename to month-year-account.csv if you change it

What the Wave CSV looks like

Here is the same kind of month as a bank account and as a credit card, in the exact layout the export writes. The figures are invented for the example.

DateDescriptionAmountAccount type
2026-03-02CUSTOMER PAYMENT INV 10421250.00Bank — money in, positive
2026-03-05RENT MARCH-1800.00Bank — money out, negative
2026-03-09OFFICE SUPPLIES84.20Card — purchase, positive
2026-03-21PAYMENT THANK YOU-500.00Card — payment, negative

The fourth column is only here to explain the signs; the real file has three. A bank file and a card file are never mixed — each statement becomes its own file, uploaded into its own payment account in Wave.

If you open the CSV in Excel to check it, save it again as CSV (comma delimited), not as a workbook. Excel sometimes reformats dates on opening; if they no longer read as YYYY-MM-DD when you save, Wave will not recognise them.

When your bank gives you Excel instead of PDF

Some banks offer a statement download as an Excel workbook. Wave will not take it as it is: an .XLS file has to be re-saved as a comma-delimited CSV, and even then a bank's workbook usually has more columns than Wave allows — balance, reference, category, value date — plus a header block and a totals row that Wave rejects.

You can trim it by hand: keep one date column, one amount column and one description column, delete everything else, make sure the titles are on the first row, remove any balance or total rows, and save as CSV. Or upload the workbook to FlowParse — Excel and CSV files are read the same way as PDFs — and download the Wave CSV or the .QBO with the extra columns folded into the description and the balance check already done.

Step by step: uploading the file to Wave

These are Wave's own steps, in the order its help centre gives them. The statement goes into a payment account, so if the bank or card account does not exist in Wave yet, add it first under the Chart of Accounts.

  • In Wave, on the left-side menu, open Accounting → Transactions.
  • Click More at the top right and choose Upload transactions.
  • Under Statement, click Choose File and pick the .QBO, .OFX or .CSV file.
  • In Payment Account, choose the account the transactions belong to. The statement must be in that account's currency; if the file carries no currency codes, Wave uses the account's currency.
  • Click Upload. For a CSV, Wave then asks you to confirm the date column, the amount column and the description column — with only one of each in the file, it selects them for you.
  • Check the highlighted columns on the Confirm import page and click Upload my statement. The transactions appear on the Transactions page after a few moments.

With a .QBO or .OFX file the column steps fall away, which is exactly why Wave prefers those formats.

If Wave can't read the .QBO or .OFX file

Structured files rarely fail, but when they do Wave's message is "Wave needs you to make a small change to your file so we can read it". Wave's help centre traces this to the encoding line at the top of the file, and the fix takes a minute:

  • Open the .QBO or .OFX file in any plain text editor (Notepad, TextEdit in plain-text mode).
  • Near the top you will find a line reading ENCODING:USASCII or ENCODING:UTF-8.
  • If it says USASCII, change it to UTF-8; if it says UTF-8, change it to USASCII. That is Wave's own instruction.
  • Save the file and upload it again.

The files FlowParse writes start with ENCODING:USASCII, so the change, if you ever need it, is to UTF-8. If the structured file still will not go in, the CSV from the same conversion is the fallback.

Credit card statements: the sign is reversed

This is the detail that trips most people up. For a bank account, money out is negative. For a credit card, Wave's rule is the other way round: when uploading credit card transactions, purchases must be a positive amount and payments must be negative. Upload a card CSV signed like a bank account, and every purchase arrives as a payment.

The Wave CSV from FlowParse applies Wave's card rule automatically whenever the statement is a credit card statement — whether the card issuer printed purchases as positive or negative — and leaves bank statements signed the bank way. The .QBO export avoids the question altogether, because it is written as a credit-card statement that says what each line is.

Wave also asks which date to use. For a bank statement it suggests the transaction date; for a card statement, the posting date — when the bank took the money from the card. The FlowParse export carries one date per line, the one the statement prints for the transaction.

Dates on US, Canadian and UK statements

Wave wants dates as year-month-day, and that is what the export writes. The hard part is reading the statement correctly in the first place: a US statement prints 03/04 for March 4, a UK or Canadian statement often prints the same characters for 3 April. Get that wrong and every transaction lands in the wrong month.

FlowParse decides the order from the whole date column, not one date at a time. A column containing 03/25 can only be month-first, because there is no 25th month; once one date proves the order, it applies to every row. When every day in the column is 12 or lower, the statement itself cannot prove the order, and the converter falls back to reading those dates day-first. That is right for a UK statement and wrong for a short US one. So if a statement covers only the first twelve days of a month, check the dates in the preview before you download — it takes seconds and saves a month of misfiled transactions in Wave.

Statements in more than one currency

Wave imports one currency per file, into an account in that currency. A file with transactions in several currencies fails with a multiple-currency error, and Wave's fix is to upload a separate file for each currency. A currency symbol in the amounts does not change the currency either: Wave always uses the currency of the payment account you choose.

If your provider gives you one statement per currency balance, convert each statement on its own: FlowParse exports every statement as a separate file. Then upload each file into a Wave account in the matching currency, so the amounts are recorded in the currency they were actually paid in.

Catching up months of statements

The most common reason to convert statements for Wave is a backlog: a new Wave user moving over mid-year, a bookkeeper taking on a client who has not entered anything for months, or a business whose bank connection stopped for a while. In each case the statements exist, but only as PDFs.

  • Collect every statement for the period, for each account, in order.
  • Convert them; check that each statement passed the balance check before you download it.
  • Make sure each statement's opening balance equals the previous one's closing balance — a gap means a statement is missing.
  • Upload them oldest first, each into the right payment account.
  • Keep a note of which periods have been uploaded for which account, so nothing goes in twice.

If you want one file for the whole backlog instead of one per month, Smart Merge combines several statements of the same account into one, checks the balance chain across them, sorts by date and flags transactions that appear in two files. It does not delete those duplicates — it shows them to you to decide.

A monthly routine for Wave

Once the backlog is in, keeping Wave current from statements is a short monthly job. A routine that avoids the usual mistakes:

  • When each month's statement arrives, convert it the same week — before the next one comes and the order gets muddled.
  • Look at the balance check first. A statement that does not reconcile has a misread or missing line, and that is far easier to fix before upload than after.
  • Check that this month's opening balance equals last month's closing balance in Wave. If it does not, a month is missing or was uploaded twice.
  • Upload into the right payment account; bank and card statements go into different accounts with different sign rules.
  • Categorise the new transactions in Wave while the month is still fresh.

Done this way, Wave's account balance after the upload should match the closing balance printed on the statement. When it does, you know nothing was dropped and nothing went in twice.

Bank connection or file upload?

If your bank connects to Wave, a connection is the simplest way to bring in new transactions, and Wave itself points to Wave Connect when a CSV cannot be read. A file upload is for what a connection does not cover: periods before the connection was set up, closed accounts, banks that are not available, and gaps when a connection stopped. Most businesses end up using both — the connection for the day-to-day, files for the history.

When you combine them, take care where they overlap. If the connection has already brought in a month, do not upload that month's statement as well.

What is checked before the file reaches Wave

Wave imports what the file says. If a line was misread on the way from PDF to file, that mistake goes straight into your books, so the statement is checked first, using only figures the bank printed.

  • Running balance: every row's balance is tested against the previous balance plus that transaction.
  • Statement totals: opening balance plus credits minus debits must equal the printed closing balance, within two cents.
  • Rows repeated at page breaks are removed, and a genuinely repeated transaction is kept.
  • If a check fails, the report shows the gap and the row where the chain breaks, and you can correct the value before downloading.

A statement that prints no balances cannot check itself; the report says so instead of claiming it passed. These checks are described in full on the financial data validation page.

Who converts statements for Wave

Wave is used mostly by freelancers, sole traders and small businesses, and by the bookkeepers who look after them. The people who end up converting statements tend to be in one of three situations. A business switching to Wave from a spreadsheet or another program, with a year of history to bring across. A bookkeeper whose client hands over a folder of PDF statements at year-end instead of a bank login. And a business with an account Wave cannot connect to — a small credit union, a foreign bank, a card from a store — whose transactions would otherwise be typed in by hand.

In all three, the work is the same: get the statements into one of Wave's five formats, make sure nothing was misread or dropped on the way, and upload each one into the right account.

What this doesn't do

FlowParse does not connect to Wave and does not post anything into it. It produces a file, and you upload that file in Wave. It also does not categorise transactions for Wave — that happens in Wave after the import, the same as for any other upload. And it cannot make Wave accept a PDF: the conversion is what turns the PDF into one of the formats Wave reads.

Frequently asked questions

FlowParse
flowparse.io

Stop typing transactions into Wave

Convert any bank's PDF statement to a Wave-ready CSV (or OFX) and upload it in one go — every transaction, balance-validated.