A practical field guide to creating robust NetSuite record templates, free of guesswork, errors, and late-night debugging sessions.
🛠 Template Building
Building your first ExtendInsights record template can feel overwhelming, but it does not have to be. Record templates are one of the most powerful features in ExtendInsights, letting you map, import, and update NetSuite records at scale through familiar Excel workflows. But power comes with nuance.
Whether you’re building your first template or your fiftieth, this guide walks you through the six critical things every template builder should know, from finding the right field IDs to understanding why your Excel formulas might be quietly lying to you.
📋 What’s Inside
- Finding Field IDs: The Internal Language of NetSuite
- Build Order: Header Fields Before Sublist Fields
- Custom Fields Not Showing? Check Permissions First
- Speed Up Uploads with Dropdown Internal IDs
- Excel Formulas in Templates: The Cell Format Trap
- Common NetSuite Errors (and What They Actually Mean)
Finding Field IDs: The Internal Language of NetSuite
When you’re mapping columns in an ExtendInsights template, you’re not using the label you see on a NetSuite form. You’re using the field’s internal ID, the programmatic name that NetSuite’s API actually understands. Getting this right is the foundation of every working template.
You have three reliable ways to find a field’s internal ID:
A: Click the Field Label in the NetSuite UI
With customization mode enabled, clicking directly on a field label in NetSuite reveals a popup showing the field’s internal ID. For example, clicking the Date field on a transaction record will show its internal ID as trandate. Fast, contextual, and built right in.
B: Install a Browser Extension
Extensions like NetSuite Field Explorer expose field IDs directly in the NetSuite UI as you hover over fields, with no digging required. Ideal for power users who build templates frequently.
C: Use the NetSuite Schema Browsers
NetSuite provides official reference browsers for every record type and field. Use these when you need a comprehensive view, especially for API-level integrations.
Here’s a quick reference to the most current NetSuite schema browsers you should bookmark:
| Browser | Best For | Link |
| REST API Browser (OpenAPI 3.0) | Modern REST integrations fields, types, operations, response shapes | REST API Browser → |
| SOAP Schema Browser (2025.2, latest supported) | Records, sublists, and object schemas for SOAP-based integrations | SOAP Schema Browser → |
⚠️Important Exception
For custom fields, you will use the field label name when building your template, not the internal ID. This is the one exception to the field ID rule. All standard NetSuite fields use their internal ID, but custom fields are mapped by their label as it appears in the NetSuite UI.
Build Order: Header Fields Before Sublist Fields
When structuring your template, the order in which you add fields matters, not just for readability, but for how ExtendInsights processes and validates your data against NetSuite’s record structure.
The golden rule: Always map your header and body fields first, then add your sublist (line-level) fields.
Header fields define the record itself: the customer, the date, the subsidiary, the transaction number. Sublist fields define what’s on the record: the line items, the inventory details, the expense categories. NetSuite evaluates them in this hierarchy, and so should your template.
📋Why This Matters
NetSuite often needs parent-level (header) context to correctly process dependent sublist data. Building in the right order also makes your template significantly easier to review, troubleshoot, and hand off to colleagues.
Recommended Column Order in Your Template
✅ HEADER FIELDS FIRST
→ Entity (Customer/Vendor)
→ Subsidiary
→ Date
→ Currency
→ Custom Header Fields (custbody_*)
✅ SUBLIST FIELDS SECOND
→ Item
→ Quantity
→ Rate
→ Amount
→ Custom Line Fields (custcol_*)
Custom Fields Not Showing? Check Permissions First
This is one of the most common frustrations when building templates: you know the custom field exists in NetSuite, but it simply doesn’t appear, or returns no data. Almost always, this is a permissions issue, and it comes in two flavors.
- Custom Role Missing Field Access. If your organization uses a custom NetSuite role (rather than a standard Administrator role), that role may not have explicit permission to view or edit specific custom fields. Your NetSuite Admin needs to grant access to those fields on the custom role directly.
- Field Applied to Form But Not Exposed for API. This is the sneaky one. Your NetSuite Admin may have added the custom field to the record form in the UI, meaning you can see it when you open the record in NetSuite, but never enabled it for web services / API access. These are two separate settings in NetSuite’s custom field configuration.
⚠️Admin Action Required
Ask your NetSuite Admin to navigate to Customization → Lists, Records & Fields → [Field Type] and open the custom field. There are two things to verify:
- Store Value is checked. On the main field settings page, confirm that the Store Value checkbox is enabled. Without this, the field will not retain or expose data through the API.
- The correct record type is selected under “Applies To.” On the Applies To tab, the appropriate transaction type must be checked. For example, if the field should appear on Purchase Orders or Bills, Purchase must be selected. If the wrong record type is checked, or none at all, the field will not be available on the records you are trying to update, and ExtendInsights will not be able to see it.
Speed Up Uploads with Dropdown Internal IDs
Dropdown and picklist fields in NetSuite require a value that NetSuite can map to an option. The safest, fastest way to supply that value is by using the internal ID of the option, wrapped in double brackets.
The syntax is simple:
Dropdown Value Format
[[123]]
The double brackets tell ExtendInsights to skip validation and pass the value directly to NetSuite as a raw internal ID. This means NetSuite doesn’t need to look up a matching label, which makes your uploads significantly faster, especially on large datasets with many dropdown columns.
To find the internal ID of a dropdown option, navigate to the relevant list in NetSuite. For example, to find the internal ID for a Subsidiary, go to Setup → Company → Classification → Subsidiaries and open the list of subsidiaries. The internal ID for each record will be listed there, and that is the value you wrap in the double brackets in your template.
💡Pro Tip: Use ExtendInsights Analytics
You can also use ExtendInsights Analytics to pull a raw download of internal IDs directly from a Saved Search you create in NetSuite. This is a quick and convenient way to get a full reference list of internal IDs for any record type, which you can keep on hand while building your templates.
🚀Performance Tip
Using [[123]] instead of a text label like Active reduces the number of lookups ExtendInsights needs to perform per row. For a template with 500 rows and 10 picklist columns, this can dramatically cut upload time.
Excel Formulas in Templates: The Cell Format Trap
Excel is a natural place to use formulas to prepare your data, whether concatenating values, calculating amounts, or pulling from lookup tables. But there’s a subtle formatting issue that catches almost everyone at some point: Cells formatted as “Text” will display the formula itself, not the computed result.
🔴Common Mistake
If a cell is pre-formatted as Text before you enter a formula, Excel treats the formula as a literal string, meaning your upload will contain
=VLOOKUP(A2,Sheet2!A:B,2,0)
rather than the value it’s supposed to return.
The fix is straightforward: Before entering any formulas in your template cells, change the cell format from Text to General or a specific type like Number or Date. You can do this by selecting the cells, right-clicking, choosing Format Cells, and selecting the appropriate category.
- Select your formula cells
Highlight all cells where you intend to use formulas before entering them.
- Change format to General or Number
Right-click → Format Cells → Number tab → select “General”. Avoid “Text” at all costs for formula cells.
- Enter your formula
Now type your formula. Excel will evaluate and display the computed result, which is what ExtendInsights will read during upload.
💡Reminder on Bracket Notation
The [[ID]] bracket syntax from Section 4 prevents ExtendInsights from validating a value, but it has no impact on Excel’s cell formatting behavior. Fix the cell format before you worry about anything else.
Common NetSuite Errors (and What They Actually Mean)
Even a well-built template will occasionally run into a NetSuite API error. The good news is that most errors follow predictable patterns, and once you know what to look for, troubleshooting becomes much faster.
Here are the two most common categories you’ll encounter:
🔴 Missing Required Fields
NetSuite requires certain fields to be present before a record can be saved, the same fields that would block you from saving a record manually in the UI. Common culprits include Entity, Subsidiary, Date, and Item. Check your template against the record’s required fields in the Schema Browser (look for the Required: true column). If a required field is missing from your template row, the entire row will fail.
⚠️ Dependency Not Set for API Use
This is not truly an error, but it will stop your upload if the target field is required. It means that a dependency has not been configured in NetSuite’s metadata for the field your template is trying to populate.
To resolve this, your NetSuite Admin needs to set up a Metadata Setting Record in NetSuite. Using Subsidiary on a Purchase Order as an example, the Subsidiary field depends on the Entity field being set first. If Entity is missing, NetSuite will throw the dependency error. The metadata record would be configured as follows:
- Name: Subsidiary dependency
- Applies To: PurchaseOrder
- Configuration:
- {“dependencies”: [“PurchaseOrder.entity”]}
- Target Field: PurchaseOrder.subsidiary
In this example, Entity is the source field that must be populated first. Subsidiary is the target field that depends on it. If Entity is not provided in your template row, NetSuite will return the dependency error and block the upload. Make sure your template includes Entity before Subsidiary to satisfy the dependency.
🛠 Debugging Approach
When an upload fails, start with the ExtendInsights error log to identify which rows failed and the exact error message returned by NetSuite. Cross-reference the field name in the Schema Browser to confirm it’s required or has API dependencies. In most cases, the fix is either adding a missing column to your template or asking your NetSuite Admin to adjust a field or role setting.
Putting It All Together
Building reliable ExtendInsights record templates isn’t about memorizing rules. It’s about developing good habits. Know where to find your field IDs. Build header fields first. Verify permissions before assuming a field doesn’t exist. Use internal IDs for dropdowns to keep uploads fast. Keep your Excel formatting clean. And when errors appear, read them literally. NetSuite’s error messages are usually telling you exactly what’s wrong.
With these six practices in your workflow, you’ll spend less time troubleshooting and more time doing what matters: getting data into NetSuite accurately and efficiently.
Have questions about a specific record type or template scenario? Click the chat box at the bottom of our ExtendInsights support page. We are here to help you build templates that work the first time.
Looking to try ExtendInsights for the first time? How about two weeks on us? Click here to get started.
