Writing / Netsuite

Why CustomRecordCustomField Is Missing in SuiteQL

Diagnose why CustomRecordCustomField does not appear or query in SuiteQL: Records Catalog channel, role permissions, features and common false leads.

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 record module 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:

  1. Widen role access for the integration identity if policy allows, then re-check the catalog.
  2. Use SuiteCloud object import to capture definitions in XML for project documentation: SuiteCloud: Import a Custom Record and Its Custom Fields.
  3. Document from the UI for a one-off inventory when automation is blocked.
  4. 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:

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.