How to import a bank statement into NetSuite (CSV template, OFX, BAI2 or PDF)
NetSuite doesn't import bank statements the way small-business software does. An import brings bank lines in for matching and reconciliation: NetSuite pairs each line with a transaction already in your books, and you reconcile the matched lines. This guide covers the formats NetSuite's default parser accepts, the exact CSV template, the step-by-step upload, what to do with a PDF statement, the error codes, and how to delete an import.
Short answer: in NetSuite, go to Transactions → Bank → Upload File. Choose the statement file (a name of up to 50 characters), select Import with default parser (CSV, OFX, QFX, BAI2, or CAMT.053), pick the bank or credit card Account, set the Character Encoding if NetSuite asks, and click Import. Then match the lines on Match Bank Data and reconcile on Reconcile Account Statement. NetSuite doesn't list PDF as a format; its help says to use a conversion tool to turn other formats into a supported one, such as OFX.
See a PDF statement turned into a file NetSuite imports
Open Utilly's fictional September 2026 checking statement (account ending 0427, 31 transactions: 11 deposits totalling 29,597.43 and 20 withdrawals totalling 28,575.27). You see every line, the balance check from 12,418.36 to 13,440.52, and the OFX and CSV downloads, all free because the data is made up.
- The ways bank data gets into NetSuite
- Which file to import
- Import a statement with the default parser
- The NetSuite bank statement CSV template
- PDF statements
- After the import: match the bank lines
- Check the import, then reconcile
- Delete an imported statement
- Import errors and what they mean
- Convert your own statement
1. The ways bank data gets into NetSuite
NetSuite's Bank Data Import help describes automatic and manual imports. These are the four routes:
| Route | What it is | Good for |
|---|---|---|
| Bank Feeds SuiteApp | Connects to supported financial institutions and imports transactions and balances daily | Ongoing activity from a bank it can connect to |
| Auto Bank Statement Import SuiteApp | Picks up statement files from your bank's server over SFTP; by default once a day between 4:00 and 7:00 AM Pacific Time | Banks that deliver statement files to an SFTP server |
| Manual import, default parser | Upload File with Import with default parser: CSV, OFX, QFX, BAI2 or CAMT.053 | Accounts without a financial institution record set up; catch-up work |
| Manual import, financial institution record | Upload File with a format profile, using a parser such as those in the Bank Statement Parsers SuiteApp | Customised layouts, MT940, several accounts in one file |
The default parsers can't be customised. Oracle's help recommends the Bank Statement Parsers SuiteApp's standard parsers unless you have no financial institution records set up. That SuiteApp has BAI2, CAMT053 (CAMT053.001.02 or .001.08), CSV, MT940 and OFX/QFX (versions 102, 103, 211 and 220) parsers, and its help says it "will not create NetSuite transactions from the imported bank statement files". Whatever the route, Oracle suggests no more than 10,000 transactions per import unless you use the Bank Feeds or AMEX integration SuiteApps. Your role needs the Import Online Banking File permission.
2. Which file to import
From Oracle's Supported File Formats for Default Parsers. Whatever you download, Oracle's advice is not to modify the downloaded statement file.
| File | What to know |
|---|---|
| OFX / QFX | Many banks offer it ("Money", "Quicken"). Select the file's character encoding when you import. No columns to arrange |
| CSV | UTF-8, and it must follow NetSuite's own template (section 4). One account per file |
| BAI2 (TXT, UTF-8) | Prior-day reporting; a file can hold several accounts. With the default parser, Oracle lists TD, Wells Fargo, US Bank, JP Morgan Chase and Bank of America Merrill Lynch. Needs the account's bank mapping fields set |
| CAMT.053.001.06 (XML, UTF-8) | ISO 20022 end-of-day statement; can hold several accounts. Also needs the bank mapping fields (the IBAN) |
| QIF | Not supported. Oracle: "Use one of the new supported formats instead" |
| MT940 | Not a default-parser format; the Bank Statement Parsers SuiteApp has an MT940 parser |
| Not listed. Convert it to OFX or CSV first (section 5) |
For BAI2 and CAMT.053, edit the bank account (Lists → Accounting → Accounts → Edit) and fill in the Bank Import Mapping subtab: the 02 record's Originator Identification and 03 record's Customer Account Number for BAI2, or the IBAN Identifier for CAMT.053. Without them, the import fails. Codes in a BAI2 file are explained in the BAI2 codes list, and CAMT tags in the CAMT.053 format.
An OFX file is the simplest choice: dates, signs and an ID for every transaction are fixed fields. These lines are from the OFX Utilly writes for the sample statement:
CHARSET:1252
<BANKACCTFROM><BANKID>999999999<ACCTID>0427<ACCTTYPE>CHECKING</BANKACCTFROM>
<STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20260901120000<TRNAMT>-6420.18<FITID>20260901E26D1A27070800<NAME>ACH DEBIT GUSTO PAYROLL 0912<MEMO>ACH DEBIT GUSTO PAYROLL 0912</STMTTRN>
<LEDGERBAL><BALAMT>13440.52<DTASOF>20260930</LEDGERBAL>
The posted date is written yyyyMMddHHmmss, the date-time layout NetSuite's OFX error message asks for. The header says CHARSET:1252, so Western (Windows 1252) is the matching encoding. Every tag is explained in sample OFX file.
3. Import a statement with the default parser
From Oracle's Importing Data Using Default Parsers:
- Download the statement from your bank in a supported format. Give the file a name of up to 50 characters, including the extension.
- Go to Transactions → Bank → Upload File (other help pages reach it through Banking Import History → Upload File). The Manual Import subtab is open.
- Click Choose File (or drag and drop) and select the file.
- Under Import Options, choose Import with default parser (CSV, OFX, QFX, BAI2, or CAMT.053). A link to download the CSV template appears.
- In the Account field, select the bank or credit card account.
- If the Character Encoding field appears (it doesn't for CAMT.053.001.06, BAI2 or CSV), pick the file's encoding: UTF-8, Western (Windows 1252), Western (ISO-8859-1), Chinese Simplified (GB18030), Japanese (Shift-JIS) or MacRoman.
- Click Import. You don't have to wait on the page; click Track your status to open Banking Import History.
A credit card statement works the same way: select the credit card account in step 5. Utilly's card statement converter writes the same files from card statement PDFs.
4. The NetSuite bank statement CSV template
A CSV is the format with the most rules. Download NetSuite's template from the Upload File page (choose the default-parser option and click Download the CSV template), so the header row matches exactly. From Oracle's Preparing CSV Files for Import, the columns must be in the first row, in this order:
| Column | Rule |
|---|---|
| Date (MM/DD/YYYY) | MM/DD/YYYY, with a leading zero on one-digit months. Don't let Excel reformat it |
| Payor/Payee Name | Up to 70 characters |
| Transaction ID | A unique bank transaction or reference ID, or the check number. Up to 90 characters |
| Transaction Type | One of, in uppercase: CREDIT, DEBIT, CHECK, PAYMENT, ACH, INTEREST, DEPOSIT, TRANSFER, FEE, OTHER |
| Amount | One column. Positive amounts are credits; negative amounts are debits and start with a minus sign or sit in parentheses. No currency symbols, and no commas as decimal separators |
| Memo (optional) | Up to 4,000 characters, with no commas, semicolons or underscores |
| NS Internal Customer ID, NS Customer Name, Invoice Number(s) (optional) | Help NetSuite match deposits to customers and invoices. Leave them empty for a plain statement |
Remove empty columns and empty rows between filled ones, opening and closing balance columns, any column the template doesn't have, other accounts, and the bank account number. In Excel, save with File → Save As → CSV UTF-8 (Comma delimited) (*.csv). A field over its character limit fails the import.
Here is the sample statement in that layout, under the template's header row. Transaction IDs are the FITIDs from the sample's OFX file; the type is CHECK, ACH, TRANSFER, DEPOSIT, FEE or INTEREST where the description says so, otherwise DEBIT or CREDIT by the sign. The first four lines:
09/01/2026,ACH DEBIT GUSTO PAYROLL 0912,20260901E26D1A27070800,ACH,-6420.18,,,,
09/01/2026,STRIPE TRANSFER ST-K2M8Q4,202609019B6B1ED70CD300,TRANSFER,3184.27,,,,
09/02/2026,CHECK 2041,20260902692F5A239AB700,CHECK,-1850.00,,,,
09/02/2026,ACH DEBIT AUSTIN ENERGY UTIL,2026090282D432D35ED500,ACH,-412.66,,,,
And the last two:
09/30/2026,MONTHLY SERVICE FEE,2026093088B3E73B4B8C00,FEE,-15.00,,,,
09/30/2026,INTEREST PAYMENT,20260930A3183A5E30D100,INTEREST,3.21,,,,
Starting from Utilly's CSV (Date,Description,Amount,Balance with ISO dates), that means: change the dates to MM/DD/YYYY, use Description as Payor/Payee Name, add a Transaction ID and a Transaction Type, keep the signed Amount, and delete Balance. If that's more editing than you want, import the OFX instead; it carries the same lines and needs none of it.
Want the whole file ready-made? The free NetSuite bank statement import template has Oracle's nine columns in order, as a filled CSV with all 31 lines, a blank CSV, and an Excel version that keeps dates as MM/DD/YYYY.
5. PDF statements
PDF isn't among the formats NetSuite's default parsers accept. Oracle's help says: "If your financial institution provides banking data in another format, use a third-party conversion tool to change the file to a supported format, and then import it." That's the usual situation for older months, closed accounts, or statements a client emailed.
Convert the PDF to OFX first. Utilly's PDF to OFX converter reads the statement, checks that the opening balance plus every transaction equals the closing balance, and writes an OFX with a unique FITID per line, plus a CSV of the same lines. Each statement becomes one file you import with the steps above. Scanned PDFs of up to 10 pages are read with OCR; save a phone photo as a PDF first. For a client who is months behind, catch-up bookkeeping from bank statements covers the order of work.
6. After the import: match the bank lines
When bank data is imported, NetSuite's Intelligent Transaction Matching runs reconciliation rules against the new lines:
- System rules are default matching rules you can't change or remove.
- User rules are your own: matching rules (which you can reorder and apply to several accounts) and auto-create rules, which create and match deposits and charges for bank accounts, or charges and refunds for credit card accounts, when a line meets the criteria.
- If a rule finds two or more possible matches, NetSuite can't choose, and you pick the right one.
Then go to Transactions → Bank → Bank Matching and Reconciliation → Match Bank Data and select the account:
- On Match Suggestions, review the suggestions and submit the matches.
- On Transactions to Match, match the lines without a suggestion by hand. From there you can also create a customer payment or bill payment for a line, or clear a general ledger transaction without an imported line.
- On Excluded Transactions, exclude lines you don't want to match.
Matched and cleared transactions are submitted for reconciliation automatically. Imported lines with a positive amount also appear on the Automated Cash Application page, which can generate customer payments and apply them to open invoices. For catch-up work, creating auto-create rules for the payees that repeat (bank fees, card processor deposits) before you import months of statements saves the most clicks.
7. Check the import, then reconcile
Before you reconcile, compare what came in with the statement. For the sample:
| Check | Sample checking 0427, September 2026 | If it's off |
|---|---|---|
| Lines imported | 31 | Fewer: look for a Failed or Partially Completed import. Twice as many: the statement went in twice |
| Deposits | 11, totalling 29,597.43 | Deposits showing as debits means the Amount signs are reversed |
| Withdrawals | 20, totalling 28,575.27 | A missing service fee or check is the usual gap |
| Net change | +1,022.16 | Must equal the closing minus the opening balance |
| Opening → closing balance | 12,418.36 → 13,440.52 | The Ending Statement Balance is 13,440.52 |
To reconcile, from Oracle's Reconciling Bank and Credit Card Statements: go to Transactions → Bank → Reconcile Account Statement, select the account, and check the Statement End Date and Ending Statement Balance. NetSuite fills the balance in from the imported statement if there is one; otherwise enter it. On the Reconcile subtab, include the matched and cleared transactions that are on the statement. NetSuite saves your work as you go. If you later change a reconciled transaction's amount, it becomes unreconciled.
When the difference won't go to zero, finding bank reconciliation discrepancies shows how to find the line, and the free bank statement balance checker confirms the statement itself adds up.
8. Delete an imported statement
From Oracle's Deleting Imported Statements, Delete Import works only when the import was successful, it was manual, and the statement is unreconciled. You can't delete failed, partially completed or automatic imports, or a statement after you reconcile it.
- Go to Transactions → Bank → Banking Import History.
- Click the plus icon next to the import to expand its details.
- Click Delete Import, then OK.
NetSuite deletes the statement with all its transactions and undoes any matches. Oracle notes that if you delete an imported transaction and import it again, NetSuite won't mark it as a duplicate, so it's safe to fix the file and re-import. NetSuite doesn't keep the statement file itself after parsing, so keep your own copy.
9. Import errors and what they mean
Open Banking Import History and expand a Failed or Partially Completed import to see the errors; for CSV and BAI2 files they often include the line number and position. These codes are from Oracle's Bank Import Error Codes reference:
| Error | What it means | What to do |
|---|---|---|
| Invalid CSV header (0010000000) | The headers don't match the template | Paste your rows under the header row of NetSuite's downloaded template |
| Invalid CSV file format (0010000100) | Not a valid template CSV | Check the headers and columns, and save as UTF-8 CSV |
| Incorrect date format (1000000200) | CSV dates aren't MM/DD/YYYY | Use 09/01/2026, not 9/1/2026 or 2026-09-01 |
| Incorrect date and time format in OFX file (1000000204) | OFX dates aren't yyyyMMdd or yyyyMMddHHmmss | Download the OFX again or convert the statement |
| Incorrect number format (1000000300) | Currency symbols, or a comma as the decimal separator | Use plain amounts like 1000000.00 |
| Invalid transaction type (1000000500) | A Transaction Type outside the list | Use ACH, CHECK, CREDIT, DEBIT, DEPOSIT, FEE, INTEREST, PAYMENT, TRANSFER or OTHER |
| Missing mandatory field (1000000401–1000000404) | A line has no amount, date, transaction type or account | Fill the column in on every row |
| Field value too long (1000000900) | A field is over its character limit | Shorten it (70 for payee, 90 for transaction ID) |
| Unclosed quotes in CSV file (1000001200) | An open quote mark | Close or remove it |
| Unmapped account identifier (1000000600) | An account in a BAI2 or CAMT file isn't mapped | Fill in the account's Bank Import Mapping subtab |
| Unexpected error (0000000000) | An issue no other code covers | For a manual import, Oracle's message says to try again |
Other things that go wrong: the same lines twice (a statement imported over dates a bank feed already brought in; delete the extra import), and a file name over 50 characters.
10. Convert your own statement
Utilly reads a bank or credit card statement PDF, checks every transaction against the opening and closing balances, and writes an OFX file that NetSuite's default parser imports, plus a CSV. PDF statements get a free preview; CSV and Excel files convert to OFX free up to 100 rows. Files are read in memory and not stored.
Get your statement into NetSuite
Pick what you're starting from.
Utilly isn't affiliated with Oracle or NetSuite. Menu names change; the steps above are from Oracle's NetSuite Applications Suite help, checked November 10, 2026, and weren't run in a live NetSuite account. Sources: Bank Data Import, Manual Bank Data Import, Importing Data Using Default Parsers, Supported File Formats for Default Parsers, Preparing CSV Files for Import, Importing Data Using a Financial Institution Record, Bank Statement Parsers SuiteApp, Bank Feeds SuiteApp, Auto Bank Statement Import SuiteApp, Editing an Account, Banking Import History, Bank Import Error Codes, Intelligent Transaction Matching, Matching Bank Data, Reconciling Bank Data, Reconciling Bank and Credit Card Statements, Deleting Imported Statements.
FAQ
How do I import a bank statement into NetSuite?
Go to Transactions > Bank > Upload File, choose the file (name up to 50 characters), select Import with default parser (CSV, OFX, QFX, BAI2, or CAMT.053), pick the bank or credit card account, set the character encoding if asked, and click Import. Then match the lines on Match Bank Data and reconcile on Reconcile Account Statement.
What file formats can NetSuite import bank statements from?
NetSuite's default parsers take CSV (UTF-8, in NetSuite's template), OFX, QFX, BAI2 (UTF-8 TXT) and CAMT.053.001.06 (UTF-8 XML). QIF isn't supported. MT940 needs the Bank Statement Parsers SuiteApp. PDF isn't listed, so convert it to OFX or CSV first.
What is the NetSuite bank statement CSV template?
The columns, in order, are Date (MM/DD/YYYY), Payor/Payee Name, Transaction ID, Transaction Type, Amount, Memo, NS Internal Customer ID, NS Customer Name and Invoice Number(s). Amount is one signed column, positive for credits. Download the template from the Upload File page so the headers match exactly, and save as CSV UTF-8.
What transaction types does the NetSuite CSV import accept?
CREDIT, DEBIT, CHECK, PAYMENT, ACH, INTEREST, DEPOSIT, TRANSFER, FEE and OTHER, in uppercase. Anything else fails with Invalid transaction type (Error 1000000500).
Can I import a PDF bank statement into NetSuite?
Not directly. PDF isn't one of the default parser formats, and Oracle's help says to use a third-party conversion tool to change other formats into a supported one. Convert the PDF to OFX, then import the OFX with the default parser.
How do I delete an imported bank statement in NetSuite?
Go to Transactions > Bank > Banking Import History, expand the import with the plus icon, click Delete Import and confirm. It works only for a successful, manual, unreconciled import, and deletes all of its transactions and undoes their matches.
What does 'Unexpected error' mean on a NetSuite bank import?
Error 0000000000 is NetSuite's code for an issue no other error code covers; for a manual import its message says to try again. Expand the import on Banking Import History to see any other errors, such as an invalid CSV header, date format or transaction type, and fix those first.
Related guides
- Free NetSuite bank statement import template (CSV, filled and blank)
- How to import a bank statement into Business Central (CSV format, setup wizard, PDF)
- Free sample OFX file (bank and credit card), explained
- BAI2 codes list: every type code, what it means, credit or debit
- camt.053 format explained: every XML element, with a real example
- Catch-up bookkeeping: getting 12 months of bank statements into QuickBooks or Xero and reconciled
Related tools
- Bank reconciliation checker: compare a bank statement to your books and list missing, duplicate and mismatched transactions.
- Receipt to CSV: turn PDF or photo receipts and invoices into CSV, Excel, or QuickBooks and Xero bill imports.