Writing / Netsuite

Why CustomRecordCustomField Is Missing From SuiteQL

Diagnose a missing CustomRecordCustomField (or similar) SuiteQL record: role, channel, features, Show Unavailable Items and the difference between UI fields and analytics metadata.

You open SuiteQL, type something like CustomRecordCustomField, and NetSuite responds with an unknown identifier—or the Records Catalog search returns nothing. That does not prove the account has no custom-record fields. It usually means the analytical metadata record is not available in the current context.

This troubleshooting note supports How to Query NetSuite Custom Record Fields With SuiteQL. It does not claim that CustomRecordCustomField exists in every account, role or channel.

First: separate three failures

What failed What it usually means
Catalog has no field-definition record Role, channel, feature or product surface—not “SQL is wrong”
Catalog has the record but a column is unknown You used a UI label or another account’s field ID
Metadata query works but you see no business values You queried definitions; instance data lives on customrecord_...

Confirm which case you are in before rewriting large queries.

Diagnosis checklist

Work in this order. Stop when the catalog shows the record under the execution role.

1. Use the Records Catalog, not memory

Open Setup → Records Catalog. SuiteQL identifiers come from here for the SuiteScript / REST query surface—not from saved-search field choosers, SOAP schemas or another account’s blog post.

You need the Records Catalog permission on the role you use for discovery.

2. Select the correct channel

Choose the SuiteScript and REST Query API channel when the consumer is SuiteQL, N/query, or REST query.

Other channels describe other product surfaces. A record visible elsewhere can be absent here.

3. Search more than one string

Try:

  • CustomRecordCustomField
  • custom record field
  • A known field script ID such as custrecord_example_status
  • A known type script ID such as customrecord_example (for type metadata)

Global Field Search often finds the definition record when the exact analytical name differs from the community nickname.

4. Enable Show Unavailable Items

If the record or field exists but is blocked, the catalog can show it as unavailable. That points to permission or feature constraints rather than a typo.

5. Switch to the production execution role

Administrator success does not prove an integration role can see the same analytics record. Sign into the catalog as the role that will run the script or connector, or have that role open the catalog directly.

Re-test the minimal probe under that role after any permission change.

6. Confirm custom records and analytics features

Custom records must be usable in the account, and the analytics path you use must be licensed/enabled as required by your NetSuite contract and setup. Feature and analytics availability are account-specific; treat “it worked in the sandbox” as a hint, not a guarantee for production.

7. Do not confuse SDF XML with SuiteQL

Finding <customrecordcustomfield> inside an imported object definition proves the field exists for deployment. It does not prove a SuiteQL metadata record is exposed. See SuiteQL Metadata vs SuiteCloud XML for Custom Records and SuiteCloud import.

Minimal probe once the record appears

Only after the catalog lists the analytical script ID and a few fields:

SELECT
    field_definition.id,
    field_definition.scriptid,
    field_definition.label
FROM
    CustomRecordCustomField field_definition
WHERE
    ROWNUM <= 20
ORDER BY
    field_definition.scriptid

Replace every identifier with catalog values. If this fails, the last assumption about record or column ID is wrong—return to the catalog rather than adding joins.

Progressive column guidance: CustomRecordCustomField SuiteQL Column Reference.

When the record never appears

You still have options that do not require inventing SuiteQL metadata:

  • Discover instance field IDs from the custom-record table in the catalog (customrecord_... fields) for data queries.
  • Use SuiteCloud object import for a full definition snapshot in XML.
  • Use SuiteScript record/form APIs for runtime introspection where appropriate.
  • Export what is available family-by-family (data dictionary export).

Do not force a FROM CustomRecordCustomField query if the catalog never lists that record for the execution role and channel.

Symptom Quick check
Unknown record in SuiteQL Catalog search under same role and channel
Record visible to admin only Permissions / role restrictions; unavailable items
Field script ID known, record name unknown Global Field Search on the script ID
Join to type fails Type record and join may also be unavailable—join note
Empty result set (not an error) Filters, inactive-style flags, or genuinely no accessible rows—not the same as missing record
Works in one account Features, bundles, role packages and channel configuration differ

General unknown-identifier habits: How to Find SuiteQL Table and Field Names.

What not to conclude

  • “Custom fields are broken” — usually analytics visibility, not field storage.
  • “The community table name is mandatory” — only catalog IDs are contracts for your account.
  • “Metadata missing means instance query is impossible” — you can still query customrecord_... columns the catalog exposes on the instance record.
  • “XML import failed because SuiteQL failed” — different systems.