How-toOracle NetSuiteCSV Import / Import Assistant

How to Import CSV Data Into NetSuite Reliably

Question
NetSuite CSV import tips and best practices

Also searched as

  • how to do CSV import in NetSuite without errors
  • NetSuite import assistant field mapping
  • NetSuite CSV import update existing records
  • NetSuite bulk import journal entries CSV

Short answer

NetSuite's CSV Import Assistant, under Setup > Import/Export > Import CSV Records, maps spreadsheet columns to record fields, matches existing records by internal ID or a chosen field, and can create, update, or upsert in a single run. The most reliable imports use a saved import map, reference records by internal ID where possible, and stage the file with a header row that exactly matches expected column types.

Applies to: NetSuite CSV Import Assistant, all editions, standard and custom record types

How to run a clean CSV import

  1. 1Go to Setup > Import/Export > Import CSV Records and choose the record type (or Custom Record, or Transaction type such as Journal Entry).
  2. 2Select the import behavior: Add (create new only), Update (existing only, matched by a key field), or Add or Update (upsert).
  3. 3For Update or upsert, choose the match field carefully; Internal ID is the most reliable match, external ID or a unique custom field are next best, and Name is the riskiest because names are rarely unique.
  4. 4In the field mapping step, map every required field explicitly; do not rely on NetSuite's auto-match for fields with similar but not identical column headers.
  5. 5For list/record fields (customer, item, subsidiary, location), reference the exact value as it appears in NetSuite, or better, the internal ID in a dedicated column to avoid ambiguous text matches.
  6. 6For transactions with line items (journal entries, sales orders), use the multi-line CSV format where each line item is a separate row sharing the same transaction-level key column, and check Multiple Line Items on the import.
  7. 7Run the import first against a small test batch (5-10 rows) and check Setup > Import/Export > View CSV Import Status for row-level error detail before running the full file.
  8. 8Save the mapping as an Import Map for repeat imports of the same file structure, under the mapping step's Save option.

Choosing the right match field

Add or Update imports rely on a match field to decide whether a row updates an existing record or creates a new one. Internal ID is unambiguous but requires you to already know NetSuite's internal ID for each row, usually from a prior export. External ID is the best option for integrations feeding data from another system, since you control the value and it is guaranteed unique per record type.

Matching on Name or another text field is common for quick one-off imports but breaks silently when two records share a name; NetSuite will either error on ambiguous match or update the wrong record depending on settings, so avoid it for anything touching financial data.

Multi-line transaction imports

Journal entries, sales orders, and other transactions with line items import as multiple CSV rows per transaction, where header fields (date, memo, subsidiary) repeat identically on every line and line-specific fields (account, amount, item) vary per row. NetSuite groups rows into one transaction when the header fields match and Multiple Line Items is checked on the import.

A common failure is a debit/credit journal entry import where the total does not balance because of a rounding difference or a missing offset line; the import fails the whole transaction with an out-of-balance error rather than partially posting it.

External ID,Date,Account,Debit,Credit,Memo
JE-1001,1/15/2026,Cash,1000.00,,Jan reclass
JE-1001,1/15/2026,AR,,1000.00,Jan reclass

Handling list, select, and reference fields

Fields that point to another record (customer, item, employee, class, department, location) match by display value unless you provide an internal ID column instead, which is more reliable when values contain punctuation, are subsidiary-specific, or could collide with another record's name.

For custom list/record fields, the CSV value must exactly match the list option's display value including case and spacing; a trailing space or a renamed list value that the file still references by the old text will cause a silent skip or an unmatched-value error on that row.

Diagnosing failed rows

Setup > Import/Export > View CSV Import Status shows a per-row status with a downloadable error file listing the exact reason for each failed row, such as a missing required field, an unmatched reference value, or a permission restriction on the record type.

Large imports (tens of thousands of rows) queue as background jobs; check status periodically rather than assuming completion, since NetSuite processes CSV imports in batches and a mid-file error does not necessarily stop later rows from processing.

Common pitfalls

  • !Matching Add or Update imports on Name instead of internal ID or external ID, risking updates to the wrong record when names collide.
  • !Leaving list/reference field values as free text that does not exactly match NetSuite's stored display value, causing silent row failures.
  • !Not checking Multiple Line Items on multi-row transaction imports, which causes each CSV row to become a separate single-line transaction instead of one multi-line transaction.
  • !Importing without a small test batch first, then having to clean up hundreds of bad records after a full-file run.
  • !Assuming CSV import respects the same field-level validation and workflow triggers as manual entry; some User Event script logic and workflow actions behave differently or are skipped depending on script deployment context settings.
  • !Ignoring the import log's row-level errors and only checking the summary count, missing partial failures in a large file.

How an ERP-grounded AI assistant handles this

ERPray, working against your NetSuite account's actual field definitions and list values, can pre-validate a CSV file before you run the import, flagging rows with reference values that will not match, required fields left blank, or journal entry batches that will fail the balance check, catching the errors that normally only surface after the import job finishes.

Frequently asked questions

What is the difference between internal ID and external ID for matching?

Internal ID is NetSuite's own auto-assigned numeric identifier, only known after a record exists in NetSuite. External ID is a value you assign, ideal for integrations where the source system's own ID drives repeat imports without needing to look up NetSuite's internal ID first.

Can CSV import trigger workflows and scripts?

It depends on the script or workflow's deployment context settings; a User Event script or workflow set to run only on the User Interface context will not fire during CSV import, while one set to All Contexts or explicitly including CSV Import will.

How large can a single CSV import file be?

NetSuite supports files up to a configured row and size limit that varies by account, typically tens of thousands of rows; very large datasets are usually better split into multiple files or handled via SuiteScript/CSV import via SuiteTalk for more control and error handling.

Why did my journal entry import fail with an out-of-balance error?

All rows sharing the same transaction key (usually external ID) must sum debits equal to credits per subsidiary. A missing offset line, a rounding mismatch, or a currency conversion difference will trip this validation and reject the whole transaction.

Related

How-to

How to Customize NetSuite Advanced PDF/HTML Templates

NetSuite Advanced PDF/HTML templates use FreeMarker markup inside an XML-for-PDF or HTML wrapper, edited under Customization > Forms > Advanced PDF/HTML Templates. You reference transaction body fields with ${record.fieldid}, loop line items with a list directive over record.item, and control layout with standard XSL-FO style tags in the barcode/pdf namespace.

How-to

How to run intercompany transactions in NetSuite (OneWorld)

Enable the Intercompany Framework and Automated Intercompany Management features (Setup > Company > Enable Features > Company), then create an Intercompany Sales Order or Purchase Order between two subsidiaries in the same NetSuite account; NetSuite auto-generates the matching intercompany transaction on the counterparty subsidiary and posts the elimination journal entries during period close if Advanced Intercompany Journal Entries is also enabled.

How-to

How to use formula fields in a NetSuite saved search

In the saved search Results tab, add a column, set Field to "Formula (Text)", "Formula (Numeric)", "Formula (Date)" or "Formula (Currency)", then type an Oracle SQL expression into the Formula box using curly braces around field IDs, e.g. {trandate} or {item.custitem_weight}. Formula fields can also go on the Criteria tab so you can filter on the calculated value itself.

Advanced

Working with NetSuite's SuiteTalk REST Web Services API

SuiteTalk REST exposes NetSuite records at https://ACCOUNTID.suitetalk.api.netsuite.com/services/rest/record/v1/{recordType}/{id} and ad hoc SQL-like queries at /services/rest/query/v1/suiteql, both authenticated with TBA or OAuth 2.0. It returns JSON, paginates large result sets with limit/offset and a hasMore flag, and needs expandSubResources or a specific fields query to pull sublist and related data efficiently.

Error fix

Fix NetSuite SSS_USAGE_LIMIT_EXCEEDED Error

SSS_USAGE_LIMIT_EXCEEDED fires when a SuiteScript execution consumes all the governance units (usage points) allotted to its script type before it finishes. Fix it by checking runtime.getCurrentScript().getRemainingUsage() before expensive calls, yielding or rescheduling in Scheduled scripts, and moving heavy record-count work into Map/Reduce, which yields automatically across stages.

Error fix

Fix NetSuite INVALID_FLD_VALUE Error

INVALID_FLD_VALUE means NetSuite rejected a value you tried to set on a field because it does not match the field's expected type, list option, or reference record. Fix it by confirming the internal ID or text value actually exists on that field's source list and matches the field's value type (text versus list versus record reference) before setting it.

AI for ERP

AI for NetSuite, Beyond the Built-In Text Tools

NetSuite's built-in AI covers text generation, not grounded answers on your own data. See how a private LLM over SuiteQL adds real Q&A and controls.

AI for ERP

AI agents for NetSuite manufacturing operations

AI agents for NetSuite manufacturing: WIP tracking, routing exceptions, and work order status grounded in SuiteQL, with human approval on anything that writes back.

Stuck on Oracle NetSuite?

Talk to engineers who work inside Oracle NetSuite every week, and who build private AI that answers these questions from your own ERP data.