How to Create a Custom Record Type in NetSuite
how to create a custom record in NetSuite
Also searched as
- NetSuite custom record type setup
- NetSuite custom record parent child sublist
- NetSuite customrecord script id
- NetSuite custom record vs custom segment
Short answer
Go to Customization > Lists, Records, & Fields > Record Types > New, name the record, set the script ID and access type, add custom fields on the Fields subtab, and decide who can see it on the Permissions subtab. Use a custom record when you need a new table of data with its own fields, forms and searches, not just a drop-down list.
Applies to: NetSuite (all editions with SuiteBuilder / Custom Records enabled), SuiteScript 1.0 and 2.x, SDF customrecordtype objects
Create and configure a custom record type
- 1Go to Customization > Lists, Records, & Fields > Record Types > New. Enter Name; the ID defaults to _name and the full script ID becomes customrecord_name. Set the ID deliberately now, because it is what scripts and SDF reference.
- 2Choose Access Type: Require Custom Record Entries Permission (recommended), Use Permission List, or No Permission Required. Most production records should use the entries permission so roles are granted per record type.
- 3Tick the options you need: Include Name Field, Allow Quick Add, Show ID, Allow Attachments, Allow Inline Editing, Include in Global Search, Enable Mail Merge, and Show in List.
- 4Save, then open the Fields subtab and add custom fields (free-form text, list/record, currency, checkbox, date). A list/record field pointing at Customer, Item or another custom record is how you build relationships.
- 5For a parent-child structure, create a field on the child record of type List/Record that points to the parent type and tick Record Is Parent on the child field. The child then appears as a sublist on the parent form.
- 6On the Permissions subtab, grant each role a level (View, Create, Edit, Full). On the Forms subtab, customize the entry form and set the preferred form.
- 7Create a record entry from the list under Lists > Custom or the menu you assigned, then build a saved search of type Custom Record to report on it.
When a custom record is the right tool
A custom record is a full database table inside NetSuite. It gets its own internal ID, forms, list view, search type, workflows, scripts and REST/SOAP/SuiteQL exposure. Use it when you must store structured data NetSuite has no home for: equipment registers, calibration logs, supplier audits, customer-specific pricing agreements, or integration staging rows.
If all you need is a pick list, a Custom List is lighter. If the value should classify transactions and appear in reporting like Department or Class, a Custom Segment is usually better, since it can be added to transaction lines and GL impact. Reach for a custom record when the thing has its own fields and a lifecycle.
Parent-child records and sublists
NetSuite models a one-to-many relationship through the child record's parent field. On the child custom record, add a List/Record field pointing at the parent type and check Record Is Parent. The parent form gets a sublist of children, and deleting the parent can cascade depending on the Allow Child Record Editing and delete options you chose.
Be careful with the field's Sublist Tab setting and with permissions. A user needs permission on both the parent and the child type, or the sublist renders empty and people assume the data is missing. In SuiteScript 2.x you reach children with search.create({ type: 'customrecord_child', filters: [['custrecord_parent', 'anyof', parentId]] }).
// SuiteScript 2.x: create a custom record entry
record.create({ type: 'customrecord_equipment', isDynamic: true })
.setValue({ fieldId: 'name', value: 'CNC-04' })
.setValue({ fieldId: 'custrecord_eq_location', value: 3 })
.save();-- SuiteQL against a custom record table SELECT id, name, custrecord_eq_location FROM customrecord_equipment WHERE isinactive = 'F'
Deploying and changing custom records safely
Script IDs cannot be changed freely once records, fields or scripts reference them, so treat them as an API. Keep a naming convention (customrecord_ then a functional prefix) and keep field IDs consistent (custrecord_ prefix). Avoid renaming types in production; add a new field and migrate data instead.
For anything beyond a single account, manage the type as an SDF customrecordtype object in a SuiteCloud project and deploy it from sandbox to production rather than rebuilding by hand. Fields, forms and permissions travel with the object, which prevents the common drift where production is missing a field the script expects.
Common pitfalls
- !Leaving the default script ID: scripts and SDF then depend on a name someone later wants to change, and IDs are painful to alter after data exists.
- !Using No Permission Required, which exposes the record to every role that can reach the URL or a saved search.
- !Forgetting to grant the custom record permission to integration roles, so a RESTlet or SuiteTalk call returns a permission error while the UI works for admins.
- !Building a custom record for a simple drop-down. A Custom List or Custom Segment is cheaper to maintain.
- !Adding hundreds of fields to one type, which slows forms and searches. Split into related records.
How an ERP-grounded AI assistant handles this
An AI assistant grounded in NetSuite can read the list of custom record types and fields, then answer questions such as which records reference a given customer or which roles lack permission on a type. ERPray shows the SuiteQL it ran against the customrecord table and respects role permissions, so it only returns rows that user may see. Designing the data model and permissions remains a human decision.
Frequently asked questions
Can I change a custom record's script ID later?
Technically you can edit it in some cases, but anything referencing the old ID (SuiteScript, saved searches in formulas, SDF files, integrations) breaks. Decide the ID at creation and treat it like a public API name. If you must rename, create a new type or field and migrate the data with a CSV import.
What is the difference between a custom record and a custom segment?
A custom segment classifies transactions and lines like Department or Class and flows into financial reporting. A custom record is a standalone table with its own fields and lifecycle. Use a segment for classification across transactions and a record for data that is its own entity.
How do I report on a custom record?
Create a saved search with the type Custom Record and choose your record type. You can join to related records through list/record fields. For SQL style access, SuiteQL exposes the table under its script ID, for example customrecord_equipment.
Why can't a user see the child sublist on the parent form?
Usually permissions. The role needs at least View on the child custom record type as well as the parent. Also check that the child's parent field has Record Is Parent set and that the form the user opens includes the sublist tab.
Related
How to build a workflow in NetSuite with SuiteFlow
Go to Customization > Workflow > Workflows > New, pick the record type and select Server, Client, or both as the trigger context, then build states and transitions on the workflow diagram, attaching actions (Set Field Value, Send Email, Create Record, Custom Action Script) to each state or transition. Release the workflow (top right dropdown, Testing to Released) once validated, since a workflow left in Testing only fires for the workflow owner.
How-toHow to write and run SuiteQL queries in NetSuite
SuiteQL is NetSuite's read-only SQL dialect over the underlying record tables, run either interactively from Analytics > SuiteQL Query Tool (or the older /app/suiteanalytics query page), through REST at /services/rest/query/v1/suiteql, or programmatically via the N/query module in SuiteScript 2.x. It supports standard SELECT, JOIN, WHERE, GROUP BY and window functions against table names that mostly match record type IDs (transaction, transactionline, item, customer).
How-toHow to Import CSV Data Into NetSuite Reliably
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.
AdvancedManaging NetSuite sandbox refresh alongside SDF deployments
A NetSuite sandbox refresh clones production data and customization state into the sandbox account, which means any sandbox-only changes not captured in an SDF (SuiteCloud Development Framework) project are wiped, while changes that were already deployed to production survive because they come along with the refresh. Plan refreshes around your deployment calendar, and redeploy or validate your SDF project immediately after every refresh.
Error fixFix 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 fixFix 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 ERPAI 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 ERPAI 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.