SheetStatement
Accounting software

Import a Bank Statement into NetSuite: CSV Guide

Prepare a clean CSV from PDF bank statements, import it into NetSuite for matching and reconciliation, and fix the format errors that block uploads.

SheetStatement Team11 min read

On this page

TL;DR NetSuite can bring in bank and credit card activity either through an automatic connection or by importing a statement file, and then lets you match those lines to transactions already in the ledger before reconciling. When you have to import manually, the file is the hard part. Build one row per transaction with a date in a single consistent format, a clear description, and a signed amount (or separate debit and credit columns, depending on what your import setup expects). Check that opening balance plus all rows equals the closing balance before you upload. Import one account and one period at a time, then match and reconcile. Most failed imports come down to dates, signs, stray header rows or a mismatch between the file and the import format configured for that account.

NetSuite is used by many mid-sized companies, and plenty of teams rely on automatic bank feeds. But manual statement imports are still common: a bank that doesn't connect, a new subsidiary, a historic period before the feed started, a credit card account, or a feed that broke for a few weeks. In those situations someone ends up holding a stack of PDF statements and needing a file NetSuite will accept.

This guide explains how statement imports fit into NetSuite's matching and reconciliation workflow, how to prepare a CSV from PDF statements, a worked example, and how to troubleshoot the errors that come up most. NetSuite is highly configurable and its screens vary by version, role and the features your administrator has enabled, so we describe the process generally rather than giving exact menu paths. Your administrator or implementation partner can confirm the details for your account.

How bank imports work in NetSuite

In current versions, NetSuite's banking features generally follow a three-stage flow:

  1. Get bank data in. Either through an automatic connection to the bank, or by importing a statement file for a specific account.
  2. Match. NetSuite compares the imported bank lines with transactions already recorded in the ledger, such as payments, deposits, checks and journal entries, and suggests matches based on rules. You confirm matches, create missing transactions, or exclude lines.
  3. Reconcile. Once lines are matched, you reconcile the account against the statement's closing balance.

Manual imports typically rely on a configuration that tells NetSuite how to read the file for that account: which columns hold the date, amount and description, what date format to expect, and so on. Depending on your setup, NetSuite may support several file types, commonly including CSV, and in many cases bank formats such as OFX, QFX, BAI2 or CAMT.053. If the file doesn't match that configuration, the import fails or produces nonsense.

That's the key insight: the import isn't a generic upload. It's a file read through a format definition. Your job is to produce a file that matches the definition every time.

Before you start

Gather the following:

  • The PDF statements for the account and period, with every page.
  • The opening and closing balance for each statement.
  • The account's import configuration. Ask whoever administers NetSuite which format is set up for this account, which columns it expects, and the date format. If there's a sample file that imported successfully before, get it. It's the best template you'll find.
  • The last date already in NetSuite for this account, from the bank feed or a previous import, so you don't import duplicates.

If you're doing this for a company with subsidiaries, confirm which subsidiary and which GL bank account the statement belongs to. Importing into the wrong account is easy to do and tedious to undo.

Step 1: convert the PDF statement to rows

You need one row per transaction, nothing else.

  • Copy and paste works for very short statements but tends to merge columns and drop signs.
  • Power Query in Excel for Windows can extract PDF tables. See our Power Query bank statement guide.
  • SheetStatement converts the PDF to rows with signed amounts and checks the balances before you export to CSV. The free plan includes 3 pages a month; Starter ($9), Pro ($19) and Business ($39) monthly plans cover higher volumes.

A typical CSV layout for a bank statement import:

Date Payee/Description Transaction Type Amount Reference

Some configurations expect separate Debit and Credit columns rather than a single signed Amount. Some want a transaction ID column, which helps NetSuite avoid duplicates and helps you trace lines later. Match whatever your configuration expects. If you have a choice, a single signed amount column (deposits positive, withdrawals negative) is the simplest and least error-prone.

Step 2: prove the file is complete

Before you upload anything, run a balance check in Excel:

=ROUND(Opening + SUM(D2:D500) - Closing, 2)

It must return zero. If it doesn't, the file is missing a line, has a duplicated line or has a sign error, and importing it will only move that problem into NetSuite, where it's harder to find. Our guide to finding reconciliation discrepancies explains how to read the difference.

Step 3: clean the file

A few details matter a lot to a strict importer.

Dates. Use one format for every row, matching the configuration. If your bank uses day/month/year and your configuration expects month/day/year, convert the dates before export. Check for text dates by sorting the column: real dates sort chronologically, text dates sort alphabetically. Our guide to fixing bank statement dates in Excel has formulas for each case.

Amounts. Plain numbers only: no currency symbols, no thousands separators, a dot as the decimal separator unless your setup says otherwise. Negative numbers as -125.00, not (125.00). If the statement uses parentheses, see converting parentheses to negative numbers.

Descriptions. Keep them, and keep any reference numbers. NetSuite's matching rules can use descriptions and references to suggest matches, so cleaner text means better suggestions. Remove line breaks inside cells; they can split a row in two when the CSV is read.

Header and footer junk. Remove page headers, "balance brought forward" lines, subtotals and blank rows. Only transactions should remain, under a single header row.

Encoding and delimiters. Save as CSV with UTF-8 encoding if possible. If descriptions contain commas, make sure your export wraps them in quotes. Excel usually does this automatically.

Step 4: import one account and one period

Import a single statement for a single account first. Once it works, you can do the rest in sequence. After the import:

  • Check the number of imported lines against the number of rows in your file.
  • Check the total of imported amounts against your file.
  • Look at a few lines to confirm signs: a deposit should increase the bank balance.

If anything looks off, stop and fix the file before importing more. It's much easier to delete one bad import than to untangle five.

Step 5: match and reconcile

With the lines in, move to matching. NetSuite will typically propose matches between bank lines and existing transactions. For each line:

  • Confirm correct suggested matches.
  • Find and match manually where NetSuite didn't find the transaction, for example when a single deposit covers several customer payments.
  • Create a transaction for genuine bank items that aren't in the books yet, such as bank fees or interest.
  • Exclude lines that shouldn't be matched, but sparingly, and with a note explaining why.

Then reconcile against the statement closing balance. If the reconciliation doesn't balance and your file passed the balance check, the issue is in the books rather than the import: an unrecorded transaction, a transaction recorded in the wrong account, or an earlier period that wasn't reconciled. Our guide to when the opening balance doesn't match the bank statement covers that situation.

Worked example

An illustrative statement for an operating account. All figures are made up.

Opening balance: $58,400.00. Closing balance: $61,262.35.

Date Description Amount
09/02/2026 Customer remittance INV-2041 12,500.00
09/03/2026 ACH payroll -18,750.00
09/08/2026 Wire in – Customer B 9,800.00
09/12/2026 Vendor payment – Hosting -2,316.40
09/15/2026 Card settlement deposit 3,654.25
09/22/2026 Customer remittance INV-2050 8,000.00
09/28/2026 Monthly service fee -25.50
09/30/2026 Interest 0.00

Notice the zero-value interest line. Remove it before export. Zero-amount rows serve no purpose, and some importers reject them.

Sum of the remaining amounts: 12,500.00 − 18,750.00 + 9,800.00 − 2,316.40 + 3,654.25 + 8,000.00 − 25.50 = 12,862.35.

Check: 58,400.00 + 12,862.35 − 61,262.35 = 10,000.00. Not zero.

A round $10,000 difference with no matching row suggests a missing line. Looking at the PDF again, page 2 had a $10,000 outgoing transfer to a savings account on 09/18 that the conversion missed because it sat right under a page header. Add it:

| 09/18/2026 | Transfer to savings | -10,000.00 |

New sum: 2,862.35. Check: 58,400.00 + 2,862.35 − 61,262.35 = 0.00. Now the file is ready.

After import, matching shows that the $12,500 and $8,000 remittances match customer payments, the payroll matches a journal entry, the hosting payment matches a vendor bill payment, and the $10,000 transfer matches a transfer to the savings account. The $25.50 fee has no ledger transaction, so you create one, coded to bank charges. The card settlement deposit of $3,654.25 needs a closer look: it may represent several days of card sales net of processing fees, so you may need to match it to more than one deposit and record the fee.

That last situation is common. See reconciling Stripe payouts for the same pattern with a payment processor.

Catching up on historic periods

A common reason for manual imports is a gap: the bank feed was set up in June, but the company went live on NetSuite in January, or a feed stopped syncing for six weeks and nobody noticed until month-end.

For a catch-up, work in order, oldest period first:

  1. List every statement in the gap with its opening and closing balance. Confirm each closing balance equals the next opening balance. A break in that chain means a statement is missing.
  2. Convert and check each statement individually. Don't combine months into one file until each one passes its own balance check.
  3. Trim the boundary. For the last statement in the gap, remove any transactions on or after the first date the feed covers. Boundary days are where duplicates come from, so check that date carefully in both sources.
  4. Import month by month, matching and reconciling each before moving to the next. Reconciling January before importing February means a problem in January can't leak into later months.

If the gap is long, the work is mostly mechanical. Our guide to catch-up bookkeeping with months of bank statements covers how to batch it efficiently.

Subsidiaries and foreign currency accounts

In OneWorld accounts with several subsidiaries, each bank account belongs to a specific subsidiary and has a specific currency. A few practical points:

  • One file per bank account. Never combine statements from two accounts, even if they belong to the same subsidiary and the same bank.
  • Amounts in the account's currency. A euro account's file should contain euro amounts, exactly as the statement shows them. NetSuite handles translation to the subsidiary's base currency through its exchange rate settings; don't pre-convert amounts in Excel.
  • Watch the date format by country. Statements from banks in different countries often use different date formats. If one person prepares files for US and European accounts, a date check before each export saves a lot of rework.
  • Intercompany transfers. A transfer from a US account to a European account appears on two statements in two currencies. Each side is matched in its own account; the exchange difference is handled in the books, not in the import file.

If your company uses intercompany automation or specific matching rules for transfers, your administrator can tell you how those lines are expected to match.

Credit card accounts

Card statements can be imported in the same way into a credit card account, but be careful with signs. For a card, a purchase increases what you owe, and a payment reduces it. Whether your file should show purchases as positive or negative depends on the configuration, so test with a small file first. Our credit card reconciliation guide explains the conventions.

Troubleshooting import errors

"Invalid date" or rows skipped. The date format in the file doesn't match the configuration, or some dates are text. Convert every date to the expected format and re-export.

Amounts imported with the wrong sign. Your file uses the opposite convention to the configuration. Multiply the Amount column by −1, or swap the Debit and Credit columns, and re-import.

Every amount is zero or blank. Amounts are stored as text, contain currency symbols, or use a comma as the decimal separator. Clean them to plain numbers.

Duplicate lines after import. The file overlaps a period already brought in by the bank feed or a previous import. Delete the duplicate import, trim the file to the missing dates, and import again. Our guide to removing duplicate bank transactions helps with cleaning the file.

The file is rejected outright. Check for extra header rows, merged cells, a different column order than the configuration expects, or a file saved in a non-CSV format. Compare your file side by side with a sample that imported successfully.

Matching suggestions are poor. Descriptions may be truncated or missing references. Keep the full description and any reference numbers from the statement.

Building a repeatable process

If you import statements every month, standardise:

  1. A fixed CSV template with exactly the columns your configuration expects.
  2. A balance check tab that must show zero before export.
  3. A file naming convention: entity-account-YYYY-MM.csv.
  4. A log of what period was imported, by whom, and the line count and total.

This fits naturally into your month-end close checklist.

Turn bank statement PDFs into a NetSuite-ready CSV

Upload your statements to SheetStatement, confirm the balance check, and export a clean CSV you can map to your NetSuite import format. Start with 3 free pages a month.

FAQ

Can NetSuite import bank statements from a PDF?

Generally not directly. NetSuite imports structured files such as CSV, and often bank formats like OFX or BAI2 depending on setup. Convert PDFs to CSV first.

What columns does NetSuite need for a CSV bank import?

At minimum a date, an amount (or debit and credit columns) and a description, read through the import configuration for that account. Ask your administrator for the exact layout, or use a sample that worked before.

Why are my amounts imported with the wrong sign?

Your file's sign convention is the opposite of what the configuration expects. Flip the sign or swap debit and credit columns, then re-import.

How do I avoid duplicating transactions from the bank feed?

Find the earliest date the feed brought in and import only transactions before it. Check line counts and totals after each import.

Should I import every statement at once?

No. Import one account and one period, confirm counts, totals and signs, then continue. It makes mistakes much easier to undo.

Can I import credit card statements too?

Usually yes, into a credit card account, but test the sign convention with a small file first.

Is it safe to upload bank statements to a converter?

Review the provider's policy before uploading. SheetStatement describes how it handles files on its security page.

How much does SheetStatement cost?

The free plan includes 3 pages a month. Starter is $9 a month, Pro is $19 and Business is $39.

Related articles

Convert your first statement free

3 pages a month on the free plan. No credit card.