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:
CustomRecordCustomFieldcustom 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.
Related symptoms and quick checks
| 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.