Convert a BAI2 bank file (.bai, .bai2, .txt) to a clean CSV for Excel or Google Sheets: amounts in dollars, signed by type code, balance checked against the ledger. Free up to 100 rows.
Only have a PDF statement? Use the PDF statement converter.
BAI2 is the cash-management reporting format US banks send to treasury and ERP systems: comma-separated records ending in a slash, with an 03 line of account balances, one 16 line per transaction with a three-digit type code and an amount in cents, 88 lines that continue the line above, and 49/98/99 trailers with control totals. Excel shows it as one column of numbers. Utilly reads every 16 detail into a row, puts the decimal point back, signs it from the type code (100–399 in, 400–699 out), joins the 88 text, and checks opening ledger + transactions = closing ledger for every account and day in the file.
.bai, .bai2 or .txt.16 transaction record becomes a row. There's nothing to rename and no columns to pick.The first transaction in our sample BAI2 file (a made-up US business operating account), under its group header:
02,EXAMPLESUP,999999999,1,261029,2400,USD,2/
03,0975312468,USD,010,4821537,,,015,5038596,,,040,4821537,,/
88,045,4854571,,,100,1009025,2,,400,791966,4,/
16,165,325000,0,000412,,ACH CREDIT NORTHWIND RETAIL INV 10422
is this row in the CSV:
Date,Description,Amount,Balance
2026-10-29,ACH CREDIT NORTHWIND RETAIL INV 10422,3250.00,51465.37
A paid check with no text, and a payroll debit whose text runs onto an 88 line:
16,475,120000,0,000415,1043,/
16,455,218466,0,000416,,ACH DEBIT GUSTO PAYROLL 102926
88,PPD ID 9999999999 EXAMPLE SUPPLY CO
2026-10-29,Check 1043,-1200.00,57105.62
2026-10-29,ACH DEBIT GUSTO PAYROLL 102926 PPD ID 9999999999 EXAMPLE SUPPLY CO,-2184.66,54920.96
| BAI2 field | CSV column |
|---|---|
As-of date on the 02 group header (261029, YYMMDD) | Date, written 2026-10-29, for every transaction in that group. 16 records have no date of their own. |
16 amount in cents (325000) and type code (165) | Amount with the decimal point put back: 3250.00. Type codes 100–399 are credits (positive); 400–699 are debits (negative). Every code and its name is on the BAI2 codes list. |
Funds type (0, 1, 2, Z, or S/V/D with extra availability fields) | Not a column. We read past the availability fields so the references and text land in the right place. |
16 text, plus any 88 continuation | Description, as one line. With no text, the type's name (Lockbox Deposit, Outgoing Money Transfer…), or Check and the check number. |
Customer reference (the check number on 475), else bank reference | Reference, kept in the preview and in the OFX/.QBO transaction IDs. |
03 summaries 010 opening ledger and 015 closing ledger | Balance: a running balance from each day's opening ledger, filled in only when the day ties. |
Sender and receiver IDs, the full account number, 040/045 available balances | Not in the CSV. Only the last 4 digits of the account are kept, as the .QBO/OFX account ID. |
| Record | What it is | What we do with it |
|---|---|---|
01 | File header: sender, receiver, creation date, version | Checks it's BAI version 2 |
02 | Group header: as-of date and currency | Date for the group's rows; currency if the account line has none (default USD) |
03 | Account and its summary/status amounts | Account number, currency, 010/015 ledger balances |
16 | One transaction | One CSV row |
88 | Continuation of the record above | Joined onto it before reading |
49 / 98 / 99 | Account, group and file trailers with control totals and record counts | Checked; a mismatch or a missing trailer is flagged in the preview |
A previous-day BAI2 file usually carries its own proof for each account and day: the opening ledger (010) and the closing ledger (015) on the 03 line. We add up the 16 transactions in between and compare. For the sample file:
| As-of date | Opening ledger | Transactions | Closing ledger (015) | Ties? |
|---|---|---|---|---|
| 29 October 2026 (6 transactions) | 48,215.37 | +2,170.59 | 50,385.96 | Yes |
| 30 October 2026 (6 transactions) | 50,385.96 | +7,343.23 | 57,729.19 | Yes |
The 49 account trailer adds every amount on the account's 03 and 16 records and counts its records; 98 and 99 do the same for the group and the whole file. When those don't match, or a day doesn't tie, the preview says so and the Balance column stays blank, so a cut-off transmission shows up before you import it.
015 closing ledger, so the Balance column stays blank and the preview says the check is incomplete.This is the bank's cash-management report for treasury systems, not the monthly PDF statement. For a PDF, use the bank statement PDF to CSV converter.
| Problem | Fix |
|---|---|
Excel shows lines like 16,475,120000,0,… with huge numbers | That's the raw BAI2 file, with amounts in cents. Convert it here and open the .csv instead. |
| "No transaction detail (16) records found" | The file is summary-only (balances, no transactions), or covers a day with no activity. Ask your bank for a previous-day file with transaction detail. |
| The balance check fails | Usually a cut-off transmission, or detail records with a bank-specific type code we left out (the preview lists them). Download the file again; if a complete file still fails, ask the bank what the listed codes mean. |
| Every row on a day has the same date | That's how BAI2 works: transactions carry the group's as-of date. A previous-day file for the 29th lists the 29th's activity. |
| "BAI version 1 file" | Ask your bank's treasury team to switch the export to BAI2 (version 2). |
| It's an MT940 or camt.053 file | Those are the European formats. Use the MT940 to CSV or CAMT.053 to CSV converter. |
:61:/:86: statements, and the CAMT.053 to CSV converter reads ISO 20022 XML, each with the same kind of balance check.Free for files up to 100 transactions, which covers a typical month of activity. Larger files (a year of catch-up, a client's full history) use 1 credit from the same $9 pack of 5 as our PDF statement converter, or unlimited on Pro at $19/month. The preview is always free.
Yes for files up to 100 transactions: no sign-up, no watermark. Bigger files (multi-month catch-up work) use 1 credit from the same $9 / 5-credit pack as our PDF converter, and the preview is always free.
No. Files are processed in memory and deleted after 1 hour. We never use your data for AI training.
Yes. Click a sample button under the upload box. It opens a made-up export from a fictional bank in the same preview your own file gets, and every format is free to download, so you can test an import in a test or backup company file first. Don't import a sample into your real books.
A bank cash-management report in the BAI2 format (the Cash Management Balance Reporting Specification, version 2), which US banks send to treasury, ERP and accounting systems, usually as a previous-day file every morning. It's plain text: an 01 file header, an 02 group per as-of date, an 03 record per account with balance summaries, one 16 record per transaction, 88 continuation records, and 49, 98 and 99 trailers with control totals. Banks name it .bai, .bai2 or .txt.
Only as text. Excel shows lines such as 16,475,120000,0,000415,1043 in one column, with amounts in cents and no dates on the transaction lines. Convert it here and open the CSV instead: one row per transaction with the group's as-of date, the amount in dollars and a running balance, ready to sort, filter or Save As .xlsx.
BAI2 amounts have no decimal point: 120000 is 1,200.00 in a two-decimal currency such as USD. The sign comes from the three-digit type code: 100 to 399 are credits (money in, positive), 400 to 699 are debits (money out, negative).
Loan codes (700s), non-monetary records (890) and bank-specific codes in the 900s mean different things at different banks, so we don't guess their direction. Those detail records are left out, the preview lists their codes, and the balance check shows the gap if they moved money. Ask your bank what the code means, then add the row by hand.
The as-of date on the 02 group header. BAI2 16 records don't carry their own posting date, so every transaction in a group gets that day. A value date on a funds type V record is an availability date, not the posting date, so it isn't used.
Description is the 16 record's text, with any 88 continuation joined on. When a bank sends no text (often on paid checks), it's the type code's name, or Check plus the check number. Reference is the customer reference (the check number on a paid check), else the bank reference.
Yes. For every account in every group we add the transactions to the 010 opening ledger and compare the result with the 015 closing ledger, and the preview says whether each one ties. When they all tie, the CSV gets a running Balance column. We also check the 49, 98 and 99 control totals and record counts, which catch a cut-off file.
Yes. The same account across several groups (one per as-of date) is joined in date order, so a week of previous-day files pasted together becomes one CSV. Each different account gets its own tab in the preview, its own CSV and a combined CSV with an Account column. One credit covers the whole file.
No. A BAI2 file is a US bank's machine-readable balance and transaction report for treasury systems, not the PDF statement you get each month. MT940 and camt.053 are the European SWIFT and ISO 20022 equivalents; use the MT940 to CSV or CAMT.053 to CSV converters for those. We read BAI version 2 only, not version 1 files or BAI lockbox transmissions, and we don't write BAI2.
Free converter →
Free converter →
Free converter →
Free converter →
Free converter →
Free converter →