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.
Result
Accounts
| Account | As of | Currency | Opening | Closing | Entries |
|---|
Entries
| Line | Type | Bank ref | Text | Amount |
|---|
Download for one account
QBO is the same OFX content with the extension QuickBooks Online and Desktop look for; QuickBooks Desktop may also need its bank-specific header, which a converter cannot know.
The model, and what it leaves out
- BAI2 structure: 01 file header, 02 group header (carries the as-of date), 03 account with its balance codes, 16 transaction detail with 88 continuations, 49 account trailer, 98 group trailer, 99 file trailer. Amounts are whole cents.
- Sign: detail amounts are unsigned in BAI2; the type code decides. Codes 100 to 399 are credits (positive in the output) and 400 to 699 debits (negative). Other codes, such as 700s loan activity, are listed but left out of the converted file rather than guessed at.
- Dates: BAI2 detail records carry no date of their own, so every entry in an account block takes the group's as-of date.
- Balance check: opening ledger (010) plus signed transactions must equal the closing ledger (015). Control totals and record counts in the 49, 98 and 99 trailers are checked too; banks differ on what the 49 total includes, so four common conventions are accepted and the matching one is named.
- Output: one OFX 1.02, QIF or Xero CSV file per account, because importers take one account per file. Each entry's transaction ID is a hash of account, date, type, amount, references and text plus a sequence number for identical entries, so the same file always yields the same IDs. Names are cut to 32 characters and folded to ASCII. The closing ledger balance is written as LEDGERBAL.
- Not checked: that the file matches your bank's online statement or your books, bank-specific variants, lockbox records, currencies with other than two decimal places, and anything that needs the bank's own records.
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.