Free converter · BAI2 → CSV

Convert BAI2 to CSV or Excel

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.

Free up to 100 rowsColumns detected automaticallyFiles deleted after 1 hour
Processed in memory, never stored
No file handy? See the result on a fictional one first:

Only have a PDF statement? Use the PDF statement converter.

Why CSV?

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.

How to convert a BAI2 file to CSV

  1. Get the BAI2 file from your bank. In commercial or treasury online banking, look for BAI2, BAI or previous-day reporting among the information-reporting exports. Some banks deliver it by SFTP to your ERP instead. The file is plain text, usually named .bai, .bai2 or .txt.
  2. Upload it above. Each 16 transaction record becomes a row. There's nothing to rename and no columns to pick.
  3. Check the preview. It says whether every account and day ties (opening ledger + transactions = closing ledger), whether the file's control totals match, and how many rows came in. Money out is negative.
  4. Save the Clean CSV. Excel, Google Sheets and Numbers open it as a table. In Excel, File → Save As → Excel Workbook (.xlsx) gives you a workbook copy.

From BAI2 records to spreadsheet columns

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 fieldCSV 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 continuationDescription, 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 referenceReference, kept in the preview and in the OFX/.QBO transaction IDs.
03 summaries 010 opening ledger and 015 closing ledgerBalance: 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 balancesNot in the CSV. Only the last 4 digits of the account are kept, as the .QBO/OFX account ID.

The BAI2 record types we read

RecordWhat it isWhat we do with it
01File header: sender, receiver, creation date, versionChecks it's BAI version 2
02Group header: as-of date and currencyDate for the group's rows; currency if the account line has none (default USD)
03Account and its summary/status amountsAccount number, currency, 010/015 ledger balances
16One transactionOne CSV row
88Continuation of the record aboveJoined onto it before reading
49 / 98 / 99Account, group and file trailers with control totals and record countsChecked; a mismatch or a missing trailer is flagged in the preview

The balance check

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 dateOpening ledgerTransactionsClosing ledger (015)Ties?
29 October 2026 (6 transactions)48,215.37+2,170.5950,385.96Yes
30 October 2026 (6 transactions)50,385.96+7,343.2357,729.19Yes

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.

Which BAI2 files work

  • BAI version 2 previous-day files from US banks, with Windows or Unix line endings, with or without the trailing slash on text records.
  • Several days in one file: the same account across groups is joined in date order. Several accounts: one tab and one CSV per account, plus a combined CSV with an Account column.
  • Current-day (intraday) BAI2 files read too, but they often have no 015 closing ledger, so the Balance column stays blank and the preview says the check is incomplete.
  • Credit type codes 100–399 and debit type codes 400–699. Detail records with other codes (loan 700s, non-monetary 890, bank-specific 900s) are left out and listed in the preview, because their direction differs by bank.
  • Not read: BAI version 1 files and BAI lockbox transmissions (the single-digit 1/5/6/9 record layout). Not written: we don't create BAI2 files, and we don't write QFX. Free up to 100 rows per file; files up to 20,000 rows.

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.

Common problems

ProblemFix
Excel shows lines like 16,475,120000,0,… with huge numbersThat'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 failsUsually 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 dateThat'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 fileThose are the European formats. Use the MT940 to CSV or CAMT.053 to CSV converter.

Other conversions

  • Loading the transactions into Xero, QuickBooks or Quicken? The same preview also downloads a Xero CSV, an OFX statement, QuickBooks .QBO or .IIF, or a Quicken .QIF. When every day ties, the OFX and .QBO use the file's currency (USD unless the file names another) and its closing ledger balance. Import steps are on CSV to Xero and CSV to OFX.
  • Importing the BAI2 file into NetSuite? NetSuite's default parser reads BAI2 directly for the banks Oracle lists, once the account's bank import mapping is set: see how to import a bank statement into NetSuite.
  • Got a European bank file instead? The MT940 to CSV converter reads SWIFT :61:/:86: statements, and the CAMT.053 to CSV converter reads ISO 20022 XML, each with the same kind of balance check.
  • Have an online-banking download? OFX / QFX to CSV, .QBO to CSV and QIF to CSV turn those into the same kind of spreadsheet.
  • Reconciling the CSV against your books? Try the bank reconciliation tool or the free balance checker.

Pricing

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.

FAQ

Questions

Is it 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.

Is my file stored?

No. Files are processed in memory and deleted after 1 hour. We never use your data for AI training.

Can I try it without uploading my own file?

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.

What is a BAI2 file?

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.

Can I open a BAI2 file in Excel?

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.

How are amounts and signs worked out?

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).

What about type codes outside 100–699?

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.

Which date does each row get?

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.

What goes in Description and Reference?

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.

Is the balance checked?

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.

My file has several accounts or several days. Does that work?

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.

Is BAI2 the same as a bank statement PDF, MT940 or camt.053?

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.

Other converters

More bookkeeping tools