When you become a NetSuite power user, you quickly learn that practically every NetSuite record has an Internal ID. The Internal ID is a unique integer number that is typically called the Table’s Primary Key. That integer never changes for the life of the record. It is often only visible in the URL as you work with the system.
Exposing the NetSuite Internal ID
In order to expose the NetSuite Internal ID, two switches must be activated:
- Enable at least one SuiteScript Service: as Administrator, go to Setup –> Company –> Enable Features. See image.

- Activate show internal ID: This is a user preference. Enable it by going to Home –> Set Preferences –> General Tab –> Set Defaults –> Show Internal IDs. One common confusion point is not performing the previous step. If your account has never had SuiteScript activated, you won’t be able to see this feature. See image.

View Field Names and Internal IDs
Once the switches are activated, you now can see internal NetSuite information:
- View field IDs: click on the label of any form field to reveal the underlying field ID name for that element. See image.

- Lists will now reveal Internal IDs: as you run searches and lists, the internal ID will automatically be exposed for you. See image.

Use Internal IDs for Export and Imports
One important use of Internal IDs is to use them for subsequent imports to act as an update. This way, NetSuite knows exactly which records you are referring to when you are attempting to bulk update the system. The trick is to export data first from a saved search. Be sure to include the Internal ID and keep the header field name information. Then, after you update your exported data, import it back through the CSV import utility. NetSuite will see the Internal ID and suggest you use that as a key to update the main system.


I am trying to use Internal IDs when running a customized general ledger. Any advice?
Hello Scott,
I am not sure I understand your request. If you turn on the switch, the internal ID will generally show up on all Saved Searches. You may need tomanually pull in the internal ID on reports.
[…] Showing NetSuite Internal IDs and Field Names […]
Can Internal Id’s be exposed for Netsuite UI reporting? Are they available to be used in a generated report? What kind of data type are they stored as (varchar – 100, integer, ?)
Thanks.
Yes, Internal ID is another column type and can be exposed via Saved Search and sometimes in NetSuite reporting. It is of type Integer.
[…] companyInformation: this elements allows you to access the Company Information located under Setup, Company Information. For example, companyInformation.addressText will supply you your address defined globally. To get the field names, click the field label after you have activated Show Field IDs. […]
[…] Showing NetSuite Internal IDs and Field Names […]
[…] Showing NetSuite Internal IDs and Field Names […]
[…] Showing NetSuite Internal IDs and Field Names […]
Hi Marty, I trying to develop an application to be published in netsuite. I have many questions since I’m new on netSuite. The company that I work for offers refunds returns on late shipments. So we want to develop an application that will stablish a connection between our main application and netsuite. How can I start?
Hi Lorenzo,
That question is quite broad and not easily answered in this post. Software development in the NetSuite environment, in my experience taking a number of new but seasoned programmers through the platform, takes some time to become productive Sometimes, we create major applications on the platform. When we do, we take a structured development approach. Other times, when enhancements are localized, we can use Workflow or a bit of Script (UserEvents, Client Scripts, or others) to get the job done.
Have you had the NetSuite provided SuiteCloud training? That is a good place to start. Many times, a new developer can learn faster if an experienced NetSuite developer builds the first application and then assists the new programmer.
We really enjoy producing applications in the NetSuite platform. We hope you will too. Good luck!
Marty
[…] is fine and dandy, but it demands much hunt and pecking to get field names. Sometimes, field names are not so obvious especially as you start to traverse NetSuite sublists. […]
We are trying to get a listing of all the transactions hitting the general ledger for a year so that we can perform a roll forward testing of accounts from beginning balances to ending balances. Also, we need the debit and credit for every entry to balance. We want to include on the report the user who created the entry as well as who approved the entry. In addition, we need all account numbers and account names to show properly, not something like “Archive2 Accounts Payable”.
We have been trying to customize the “Transactional Detail” report to pull the data we need, but we have not been successful. Can you show us how to pull the data we need? Also, can you let us know the specific database table names that house all the general ledger data, trial balance data, and user data? Thanks a lot in advance!
Hi James,
The output you are seeking to gather is available via a Saved Search. You will need to use a “Transaction” type and will not want any date criteria because you need the beginning balance. Basically, to get balances, you will need to use the Summarize result feature to roll up information based on Account number. Check out this article which will offer guidance:
https://blog.prolecto.com/2014/11/05/produce-netsuite-balance-sheet-amounts-via-saved-search/
Perhaps one of our consultants can assist you? We offer professional support services to help NetSuite companies get more out of their NetSuite investment.
Marty
Hi Marty,
great site. I have a workflow script tied to invoices. Unfortunately I need the internalID of the invoice to solve my problem. I noticed the internalID of the invoices are given in the URL, however the script does not have access to it. And there is no internalID field in the invoice page.
Is there someway to get the internalID of my invoices without doing a search? Perhaps a parameter that gets passed to my script?
thanks
Hi Tim,
Whenever I am stuck in workflows, I go to workflow action scripts because I get full control in the SuiteScript environment. Once you are there, you can use the nlapiGetNewRecord() to return all necessary data, including the id, for the record currently in the workflow. Does that make sense?
Marty
In a transaction search, internal ids are not unique. Is there a unique identifier for transaction records?
Hi Patrick,
I am not sure what you are saying. Might you mean what is referenced in this article?
https://blog.prolecto.com/2014/03/24/netsuite-transaction-type-internal-id-numbers/
Marty
Hi Marty,
Thanks for your reply.
I was referring to how transactions can have one “main line” record and several other records, all with the same “internal ID”. Am I missing something obvious here?
Hi Patrick,
Sounds like you are using a Saved Search to lookup a transaction. The transaction search brings both the header and the lines down based on the Main Line switch. There are no internal IDs for lines. Only the header. The trick in understanding the saved search on transactions is to know if the column you care about is line or header based. If it is header based, then you will always see duplicates when looking at line data.
Marty
Hi Marty,
I have my internal ID showing on the list and reports now. And I am trying to search inventory item by type in internal ID but it doesn’t work. Is there anyway I can connect the search criteria to internal IDs? Thanks.
Hi Yao,
Yes, I search with internal ID all the time. But when using the UI to produce Joins, most of the time you need to work the join fields at the bottom of the field list. The ones with the “…” at the suffix.
Can you offer up more specifics?
Marty
[…] you need to know the internal field ID of the element you wish to modify. See this article on how to view internal field IDs in the NetSuite application. With that information in hand, you need to issue the following […]
Hi Mary,
I am trying to retrieve the “Line Unique Key” for Invoice Line items to identify each line items of an invoice transaction individually. While this shows up in Saved search as a possible option, I am unable to pull this field into the Invoice Form; I am also unable to tell which Internal ID this is mapped to, to expose to APIs that will retrieve this information from NetSuite.
Any pointers on how to work this around? Appreciate your inputs.
Thanks!
Ramya
Hello Ramya,
Yes, you need to careful with that field. It seems that is only available via saved search. I would have to double check assumptions. But on more than one occasion, we have generated our own unique line keys to pass around to help us connect transactions. For example, we wanted to make sure we were looking at the related item fulfillment line that was produced by the “created from” sales order.
These days, we are using our Content Rendering Engine (CRE) tool to help connect lines and transactions together and we are finding that we can use the item as a key to line reference in multiple arrays.
Marty
Hi Marty,
I am working with a saved import my colleague has developed which works for her user profile, however failed to import when I use this same saved import. All the import mapping is identical, and the goal is to import a single JE which reoccurs each month. The error I am receiving says the “primary name field was not mapped or is empty.” Any idea on what is happening here?
Thanks,
Ryan
Are you able to enter the data manually for that entity? Be sure that you are selected the data type on the column you are seeking to import. It is the little pencil on the left side of the import column name.
Marty
Where can i see the name of the field when i get it in restlet? I’m using “Formula (text)” and “Formula (numric)” and can’t find their “real” names
Dan,
There are a bunch of assumptions in your question that don’t necessary apply to this article. But here is some thinking:
Restlets are coded up by you. Hence, you should know what you are trying to get at because you are in control.
This type of question usually relates to saved searches. Hence, the field name to reference in the search is formulatext or formulanumeric (or the like)
You can instead reference formulatext values by using the column array mechanism as this will avoid the name collisions when you have more than one like kind formula field in a saved search.
NetSuite SuiteScript 2.0 allows you to interrogate the Saved Search column metadata which can reveal to you the underlying formula and references in the formula field.
I hope this helps.
Marty
Marty,
I have started to learn Netsuite and did some sample codes. While adding those Script into Netsuite, we need to specify a field called “ID”. What is the use of that? And also I can see ID field under “Deployment” Tab. Could you explain what is that ID fields?
The ID in the script references are used when you need to directly reference a script. Look at the syntax for a producing a scheduled script via the API and then you will realize why we need to name our scripts and their related deployments.
Marty
Marty, I am new to NetSuite but stumbled across your articles and have enjoyed them greatly. Can you tell me how I can monitor the line item field “ITEM” in a Sales Order and trigger a script when the field value changes? I can easily accomplish this with a ‘header field’ such as CUSTOMER (entity) or MEMO (memo) when the name value is altered.
Hi Michael,
We have found that the NetSuite mechanism of using Saved Searches for triggering emails or alerts when field values changes is unreliable. I so much want it to work but we gave up years ago. The key to make this work is to use a scheduled Systems Notes search that looks for the situation you care about. At worst, we can write beforesubmit logic on transaction updates to find deltas and then produce the notifications as needed.
Marty
Hi Marty,
Was wondering if there is a way to get the internal_ids or if they exist for line item buttons, Specifically the “Remove” button. Trying to remove this button when the form is in EDIT mode.
Peter,
That may require some DHTML which is not SuiteScript approved. Take matters into your own hands. Use right click on the browser, inspect the element to get the name, and then inject some JavaScript. See this article for how to get some JavaScript down to the client.
Best.
Marty
Hi, How can we disable or hide a workflow action button using an user event
Your questions is a bit funny to me so I think I misunderstand what you are asking. Generally, modify the the workflow to affect that workflow behavior.
hi sir,i have invoice internal id but how can i get invoice pdf file using web services
Hello Brus,
You question is off-topic from the article. Your request can be solved but it is a complex endeavor. I recommend you reach me via https://www.prolecto.com/services/innovations/
Hi,
have you ever added values programatically to assignee list ?
Hello Quisko. This question is off topic from the article. I am not sure I understand what you mean by “assignee” list. I recommend you send me direct message at http://www.prolecto.com/services/innovations/
Hi Marty,
I have done this in the past for normal NetSuite environments, but I now have a client on One World and the screens are all different. Any idea where I can find the setting to display the fields in the One World UI?
Hi Robert,
The screens should all look similar if you are using the “classic” center. I have never seen a difference with One World vs. Non-One World accounts to activate the showing of internal IDs.
Marty
Hi Marty,
I’m trying to add a “back order Qty” field on my Invoice using Advanced PDF/html templates in NetSuite. I cannot find that field on the add fields button. Can you help?
Thanks
Kath
Hello Kathy,
You question is off-topic from this article. I recommend you reach me via https://www.prolecto.com/services/innovations/ for a direct conversation.
Marty
I’m trying to find the field internal ids for the companyinformation configuration object. It’s not in the records browser.
Specifically, I’m looking for the shipping and return address addressee and attention fields.
Hello Rob,
Here is all the fields available. Perhaps you need to parse the “shippingaddress_text” field.
[“_eml_nkey_”,”_multibtnstate_”,”addrlanguage”,”basecurrency”,”companyid”,”companyname”,”country”,”customersurl”,”customwhence”,”defaultaddrbook”,”defaultaddressee”,”displaylogointernally”,”dropdownstate”,”edition”,”email”,”employerid”,”entryformquerystring”,”externalid”,”fax”,”fiscalcalendar”,”fiscalmonth”,”forcompany”,”formlogo”,”freeformstatepref”,”haschildren”,”hiddenzip”,”id”,”iselimination”,”isinactive”,”legalname”,”mainaddress2_set”,”mainaddress_key”,”mainaddress_text”,”mainaddress_type”,”name”,”nsapict”,”nsapifc”,”nsapilc”,”nsapili”,”nsapipd”,”nsapipi”,”nsapips”,”nsapirc”,”nsapisr”,”nsapivd”,”nsapivf”,”nsapivi”,”nsapivl”,”nsbrowserenv”,”origbinactive”,”origparent”,”pagelogo””parent”,”prevparent”,”returnaddress2_set”,”returnaddress_key”,”returnaddress_text”,”returnaddress_type”,”selectedtab”,”sessioncountry”,”shippingaddress2_set”,”shippingaddress_key”,”shippingaddress_text”,”shippingaddress_type”,”showdropdownstateinitially”,”showsubsidiaryname”,”state”,”state1taxnumber”,”taxfiscalcalendar”,”taxid”,”timezone”,”traninternalprefix”,”tranprefix”,”type”,”url”,”wffc”,”wfinstances”,”wfpi”,”wfps”,”wfsr”,”wfvf”,”whence”,]
Hi Marty,
I’m working on Inventory adjustment transaction updates. I will need to adjust the cost of the inventory using a CSV import. I created a saved search that will list down all the inventory per line with Inventory details (Bin number, Lot/serial number) All is good except for 1 ID. The internal ID for the inventory detail. I’ve used up all internal ID field I could find but no luck.
Hi Kathy,
Your message is a bit off topic. If you want, contact me at https://www.prolecto.com/services/netsuite-care/ and we can setup a conversation.
Marty
Hi,
We are experiencing an issue with netsuite not recognizing the entity “Name” being uploaded via a csv JE upload process. We have some customer and vendor names that are similar so sometimes the values picked by netsuite are not the right entities. Besides using Internal Id is there another way to let Netsuite know through the csv upload that the entity name being entered is a customer or vendor?
Thanks for your input.
I find that using internal IDs is much more reliable. I tend to think in these database terms all the time and I am generally nervous when we don’t have internal IDs in CSV imports (that’s just me). I suspect you are doing this but are you careful to change the options to make sure the name is being used for reference in the upload?
Thanks Marty for the reply. The team is currently using Name so the upload has ‘Name’ reference selected. We discussed about using internal ID and accounting pushed back on the idea as there is more room for error without seeing the actual name of the customer/vendor being used. For the short term we decided to rename some of the vendor names that are similar to customer names with a ‘(vendor)’ prefix at the end.
How can I show the internal ID of the component line in the BOM revisions when using advanced BOMs? I’m not talking about the internal ID of the component item. I’m talking about the internal ID of the component line itself. I need to show the internal ID on the form so I can do one line component substitutions/replacements easily by mapping to that particular component line.
Hi Nora,
It doesn’t appear you can do this out of the box. But our Query Renderer Tool can get this going for you. See this article:
https://blog.prolecto.com/2022/08/13/get-license-free-tools-to-link-netsuite-saved-search-sql-to-extend-data-reach/
We effectively can create another tab that will render the BOM revision with any data you need.
Marty