Update Existing Inventory Items from a CSV File in NetSuite

Update existing NetSuite inventory items with the Import Assistant: key the CSV by Internal ID, choose Update, leave Overwrite Missing Fields off, then check the job and the items.

The quick answer

Build a CSV file with an Internal ID column and one column for each field you want to change. Go to Setup > Import/Export > Import CSV Records, choose Items as the Import Type and Inventory Item as the Record Type, select the file, and pick Update under Data Handling. Leave Overwrite Missing Fields unchecked unless empty cells should clear fields. Map Internal ID to Item : Internal ID, name the map and click Save & Run. Then read the Message on the Job Status page and open a couple of items to check the values.

The screenshots show sample data. The company, person, items and prices are fictional. Use your own records and values when following the steps.

Before you start

You need existing inventory items, a role that can run CSV imports, edit those items for their subsidiaries and see the Class list, and the Internal ID of every item in the file. The example is a OneWorld account with two inventory items under the parent subsidiary Fairhaven Hardware Supply: HB-120 Hex Bolt Assortment (Internal ID 2101) and WN-060 Wing Nut Pack (Internal ID 2102). The Class value has to be an existing, active class that the importing role can see.

An item's Internal ID is shown in Primary Information at the top of the record when Show Internal IDs is on in your preferences. You can also add Internal ID to a list view, a saved search or an export, or read the id= value in the record's address. Internal IDs belong to one account, so use the ones from the account you are updating. Keep them as plain numbers when you save the file. Spreadsheet software can reformat them.

Before a large update, export the items so the old values can be restored. An export is not automatically a complete rollback file, so include Internal ID and every field you would need to put back. Run one or two rows as a test first. Menu paths, labels and fields vary with your role, release, features and custom forms. If Setup > Import/Export is not in your menus, search for Import CSV Records.

01. Check the items before the update

Go to Lists > Accounting > Items. HB-120 Hex Bolt Assortment and WN-060 Wing Nut Pack both have an empty Sales Description. The columns depend on your list view, and a view can label this one differently.

Both items start with an empty Sales Description.

Open HB-120. In Primary Information, Internal ID reads 2101 and Include Children is cleared. Under Classification, Class is empty. On the Purchasing/Inventory subtab, Purchase Price under Item/Cost Detail is empty.

HB-120 before the import: Include Children cleared, no Class and no Purchase Price.

Go back and open WN-060. Internal ID reads 2102, and Include Children, Class and Purchase Price start in the same state.

WN-060 starts in the same state.

02. Read the update file

item-updates.csv has five columns: Internal ID, Include Children, Sales Description, Purchase Price and Class. The HB-120 row is 2101, T, Zinc-plated hex bolt assortment 120 pc, 10, with no Class. The WN-060 row is 2102, no Include Children value, Stainless wing nut pack 60 pc, 15 and Hardware.

The Internal ID column tells the import which item each row belongs to. Every other column carries a new value. Check box fields take T to check and F to clear. An empty cell is not the same as F: with Overwrite Missing Fields unchecked, it leaves the field as it was.

The update file: one row per item, keyed by Internal ID.

03. Start the import

Go to Setup > Import/Export > Import CSV Records. In Import Type, choose Items, and in Record Type, choose Inventory Item. Click Select, choose item-updates.csv and click Next.

The Record Type has to match the items in the file. Inventory items, assemblies, non-inventory items and other item types are different record types in the assistant, and a row whose Internal ID belongs to an item of another type is expected to fail instead of being converted. Do not assume that an Inventory Item import can update every item subtype. Keep one item type in each file, and test any other combination first.

Import Type Items, Record Type Inventory Item and the file selected.

04. Choose Update

On Import Options, select Update under Data Handling. The items already exist, so Add is the wrong setting. Add creates records, and a row for an item that already exists is not an update.

Click Advanced Options. Overwrite Missing Fields is unchecked here, as it was when the page opened. The page describes it as clearing NetSuite fields mapped to CSV fields that do not contain data, so leave it unchecked and an empty cell leaves its field alone. Check its state in your own account before you continue. Leave Overwrite Sublists unchecked as well. It replaces whole sublists with the file's rows, and nothing in this file maps a sublist.

Run Server SuiteScript and trigger WorkFlows is checked here, so user event scripts and workflows that apply to these items can run during the import and change fields or reject records. The Custom Form can change which fields are available or required, so review it before a production import. Click Next.

Update is selected, and Overwrite Missing Fields stays unchecked.

05. Check the field mapping

Field Mapping can propose pairs for columns whose headers match field names. Here it lists Class, Purchase Price, Internal ID, Include Children and Sales Description, each mapped to the Item field of the same name. Do not rely on the proposal. Check every pair. Internal ID has to map to Item : Internal ID, the key that tells the import which item each row updates.

For a list field such as Class, open the mapping options and check that the reference type, such as Name, Internal ID or External ID, matches what the file holds. Hardware resolves only when it matches an active class that the importing role can use and that applies to the item's subsidiary.

The import supplies the columns you map. Costs, stock and any other field the file does not map are not supplied by the file, although scripts, workflows and sourcing can still set other values. Item : Purchase Price is the item's own purchase price, shown on the Purchasing/Inventory subtab. It is separate from a vendor-specific price on the Vendors sublist. Click Next.

All five columns map to Item fields, with Internal ID mapped to Item : Internal ID.

06. Save the map and run the import

Enter Inventory Item Update as the Import Map Name and click Save & Run. Saving the map lets you reuse it for the next update.

Name the map, then click Save & Run.

A Finished page confirms that the CSV import was saved and that its job is in process, and it links to Import Job Status.

The Finished page links to the job status.

Click Import Job Status, or go to Setup > Import/Export > View CSV Import Status. In this account the job is named Inventory Item - item-updates.csv, followed by your email address. When Status reads Complete at 100.0%, read the Message. In this walkthrough it reads 2 of 2 records imported successfully, which is an example. Read the Message and the CSV Response in your own account. A job can partly succeed. Rows that save stay saved when other rows fail, so check the successful count and the CSV Response rather than treating the import as all or nothing.

The job is Complete and reports 2 of 2 records imported successfully.

07. Confirm the changes on the items

A saved count says rows were written. It does not say each value is the one you meant, so open the items. Go back to Lists > Accounting > Items. Sales Description now reads Zinc-plated hex bolt assortment 120 pc for HB-120 and Stainless wing nut pack 60 pc for WN-060.

Sales Description is filled in on both items.

Open HB-120. Include Children is checked and Purchase Price reads 10.00. Class is still empty, because its cell in the file was empty.

HB-120: Include Children is checked and Purchase Price is 10.00. Class is still empty.

Both items belong to the parent subsidiary, Fairhaven Hardware Supply. In a OneWorld account, Include Children can extend an item's availability to that subsidiary's children, here Fairhaven Canada. It does not replace the item's Subsidiary, and the exact result depends on the item's subsidiary assignments. Changing Sales Description changes the item record only. Descriptions already copied onto past transactions do not change.

Open WN-060. Class reads Hardware and Purchase Price reads 15.00. Include Children is still cleared, because its cell was empty.

WN-060: Class is Hardware and Purchase Price is 15.00. Include Children is still cleared.

Check the result

  1. Job Status shows the job as Complete at 100.0% with the Message you expect.
  2. The Items list shows the new Sales Description on both items.
  3. HB-120 has Include Children checked and Purchase Price 10.00, and its Class is still empty.
  4. WN-060 has Class Hardware and Purchase Price 15.00, and Include Children is still cleared.

Common questions

What is the difference between Add and Update when importing items?

Add tries to create new records. It does not mean update the record if the ID already exists, and a row for an item that already exists can fail. Update targets existing records through a mapped identifier, and a row whose identifier does not resolve to a record fails. Choose Update on the Import Options step when the items are already in NetSuite.

Which column should identify the items in an update file?

Internal ID is the safest key when it comes from the account you are updating, because item names and numbers can repeat or be edited. External ID also identifies a record when it is already filled in and mapped as the key. Matching on Item Name/Number is possible, but it depends on exact, unambiguous names, so prefer Internal ID or a controlled External ID for a production update. Map the column to the key field on the Item, here Item : Internal ID.

Does a blank cell in my CSV clear the field on the item?

Not while Overwrite Missing Fields is unchecked. An empty cell in a mapped column then leaves the field as it was. With the option checked, an empty cell can clear the mapped field, subject to the field's own rules. A column you leave out of the file or do not map is not written either way. Check the option's state in your account, and leave it unchecked unless clearing blanks is the point of the import.

How do I check or clear a check box such as Include Children from a CSV file?

In the example, T checks the box and F clears it. Do not use an empty cell to turn a box off. With Overwrite Missing Fields unchecked, an empty cell leaves the box as it is, so a checked box stays checked. Test one row first, and test any other spelling of the value before you use it.

Does updating Purchase Price from a CSV change the item's cost or inventory value?

Item : Purchase Price is the item's own purchase price. Updating it does not post a transaction, and by itself it does not change quantity on hand, average cost or the value of posted inventory. Purchasing, planning and costing processes that read the price can still behave differently depending on your features and costing method. It is also separate from the vendor-specific price on the Vendors sublist.

Can one file update different item types?

Keep one item type in each file. The Record Type chosen in the Import Assistant controls what the import can update. A row whose Internal ID belongs to an item of another type is expected to fail instead of being converted, and an Inventory Item import is not guaranteed to cover every item subtype, so test any other combination first.

Why did my item import fail instead of updating the items?

Check that Data Handling is set to Update, that the Record Type matches the item type, and that the Internal ID column is mapped to Item : Internal ID and holds IDs from this account. Also check that the role can see the item's subsidiary, that any Class value resolves under the reference type you mapped, and that scripts or the custom form are not rejecting the record. Then open the CSV Response on the Job Status page to see the error for each failed row.

How do I check that the item import worked?

Open Job Status and read the Message and the CSV Response, then open a few of the items and compare their fields with the file. The Message reports how many rows were saved. It does not prove each value is the one you intended, and scripts or workflows that run on save can change more than the file does.