You open a query tool, run SQL against CustomRecordCustomField, and NetSuite rejects the record name—or the Records Catalog search returns nothing useful.
That usually means the analytics schema available to the current role and channel does not expose the record the way a blog post or another account does. This guide is a diagnosis checklist. For a successful-path walkthrough once the record is visible, see How to Query NetSuite Custom Record Fields With SuiteQL.
First principle: the catalog is contextual
Oracle’s Records Catalog is not a static global schema. What you see depends on:
- Account configuration and enabled features
- The signed-in role’s permissions
- The selected channel (use SuiteScript and REST Query API for SuiteQL /
N/query) - Customisation present in the account
CustomRecordCustomField is therefore a useful search term, not a guarantee. The same is true of related type metadata such as CustomRecordType.
Checklist when the record seems missing
1. Confirm the channel
In Setup → Records Catalog, select the SuiteScript and REST Query API channel before searching.
A record visible under another interface or browser is not automatically available to SuiteQL under the same identifier. Background: How to Find SuiteQL Table and Field Names.
2. Confirm the permission to open the catalog
The role needs Records Catalog access. If the menu item is absent, fix the role rather than debugging SQL.
3. Search more than one way
Try:
- Exact text
CustomRecordCustomField - Broader text such as
custom record field - Global Field Search on a known
custrecord_...script ID
Global field search often finds the analytical record that exposes a field even when the record’s display name is unfamiliar.
4. Enable Show Unavailable Items
Turn on Show Unavailable Items. The catalog may then reveal that the record or field exists but is blocked by permission or feature constraints in the current context.
5. Compare roles
Open the catalog as Administrator and as the integration or script role. Metadata records commonly appear for one role and not the other.
Reproduce the SuiteQL under the same role the production script will use. A query that works in an ad-hoc Administrator session can still fail when scheduled under a restricted role.
6. Confirm you are not looking at the wrong schema reference
| Reference | Use for |
|---|---|
| Records Catalog (SuiteScript and REST Query API) | SuiteQL, N/query, REST query analytics |
| Records Browser | SuiteScript record APIs and related references |
| SOAP Schema Browser | SuiteTalk SOAP |
| SuiteCloud / SDF XML | Project object definitions |
Finding customrecordcustomfield inside imported XML does not prove the SuiteQL record is available. See SuiteQL Metadata vs SuiteCloud XML for Custom Records.
Checklist when the record appears but the query fails
Unknown identifier for the record
Re-copy the analytical script ID from the catalog. Case and exact spelling matter. Do not substitute the SDF element name or a UI label.
Unknown identifier for a column
The record can be available while individual columns are not. Start with the smallest column set your catalog confirms—often identity fields only:
SELECT
field_definition.id
FROM
CustomRecordCustomField field_definition
WHERE
ROWNUM <= 10
Add scriptid, labels and type fields one at a time using catalog IDs. Column intents: CustomRecordCustomField SuiteQL column reference.
Join to CustomRecordType fails
Confirm CustomRecordType (or the catalog’s type-metadata record) separately, then confirm the join or foreign-key field. Do not invent join names: How to Join CustomRecordCustomField to CustomRecordType.
Query returns definitions but not “data”
That is expected. Metadata rows describe fields; instance values live on customrecord_... tables. If the business question is about stored values, change the target record rather than forcing more columns onto the metadata query.
False leads to avoid
- Copying SQL from another account without re-validating every identifier
- Using Saved Search join names in SuiteQL
- Assuming SuiteScript
recordmodule field IDs match analytics field IDs - Treating absence in one role as absence for the whole account
- Concluding the feature is “not in NetSuite” because one channel does not list it
Workarounds when analytics metadata stays unavailable
If field-definition SuiteQL remains unavailable under the required role:
- Widen role access for the integration identity if policy allows, then re-check the catalog.
- Use SuiteCloud object import to capture definitions in XML for project documentation: SuiteCloud: Import a Custom Record and Its Custom Fields.
- Document from the UI for a one-off inventory when automation is blocked.
- Query instance tables only when the real need is operational data, not a definition inventory.
None of these workarounds make an unsupported analytics record suddenly valid in SuiteQL. They change the tool to match the available surface.
Minimal reproduction for support or internal tickets
Capture non-sensitive facts only:
Channel: SuiteScript and REST Query API
Role: (role name, not credentials)
Search terms tried: CustomRecordCustomField, custrecord_example_status
Show Unavailable Items: on/off result
Error text: (exact message)
Works as Administrator: yes/no
Avoid pasting client identifiers, production payloads or secrets.
After the record becomes available
Return to the progressive query pattern in the pillar guide, then:
- Select verified columns only
- Join types only through catalog-documented relationships
- Page large exports: SuiteQL Result Limits and Pagination Explained
- Build dictionaries carefully: Export a NetSuite Custom-Field Data Dictionary With SuiteScript
The reliable fix is almost always schema discovery under the real execution context—not a more elaborate SQL statement against a record that is not there.