BAI2 CONVERTER · RUNS IN YOUR BROWSER · NOTHING UPLOADED

Convert a BAI2 bank file to OFX, QBO, QIF or a Xero CSV

Paste or drop a BAI2 file from your bank's business portal. Its control totals and balances are checked first (opening ledger plus transactions must equal the closing ledger), then each account is written as OFX/QBO for QuickBooks and Quicken, QIF, or Xero's statement CSV — one file per account, each entry with a stable transaction ID so importing the same statement twice does not post it twice.

The file is read in this browser tab and never leaves your device. Account numbers are masked to their last four characters unless you tick the box. Independent of every bank and of the BAI. The layout is read from memory of the public BAI cash management format and import-help documents; no real bank file, bank validator or live QuickBooks, Quicken or Xero import was available when this was written.

1. Your BAI2 file

A .bai, .bai2, .txt or .csv download of previous-day or current-day reporting. Records begin 01, 02, 03, 16, 49, 98 and 99.

Choose a file or paste the text, then click Read, check and convert.

The model, and what it leaves out

Common questions

How do I convert a BAI2 file to QBO or OFX?

Paste the file or drop it onto this page, press Read, check and convert, pick the account and download OFX or QBO. In QuickBooks use Banking, then Upload transactions, and choose the file. Nothing is uploaded by this page.

How do I import a BAI2 file into QuickBooks or Xero?

Convert it here: OFX or QBO for QuickBooks and Quicken, or the Xero CSV for Xero's statement import, which takes *Date, *Amount, Payee, Description and Reference columns. Each 16 record becomes one row.

Why does a BAI2 file have no payee or posting date per transaction?

BAI2 detail records carry a type code, an amount, a bank reference, a customer reference and free text. The date is the statement as-of date in the group header, so every transaction in an account block takes that date. The payee is taken from the free text, cut to 32 characters.

How does the balance check work?

For each account it adds the signed credits and debits to the opening ledger balance (code 010) and compares the result with the closing ledger (code 015). It also checks the 49, 98 and 99 control totals and record counts. If a figure differs it says by how much.

Why a stable transaction ID?

QuickBooks and Quicken skip an entry whose FITID they already hold, which is how re-importing an overlapping statement avoids duplicates. This tool derives the ID from the entry itself, so converting the same file twice gives the same IDs, and adds a sequence number when two entries are identical.

Is it safe to put bank statement data into a web page?

The page runs in your browser, the file is read locally and nothing is uploaded; a test in the code asserts there are no network calls. Account numbers are masked in the output unless you choose otherwise. Your own policies still decide whether you may open bank data in a browser.

What does this not check?

Whether the file agrees with your bank's online statement or your books, bank-specific BAI2 variants, lockbox records, currencies with other than two decimal places, and loan or other codes outside the credit and debit ranges, which are listed but left out of the converted file.