> For the complete documentation index, see [llms.txt](https://docs.ovaledge.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ovaledge.com/release8.2/connectors/connector-repositories/application/netsuite-crm.md).

# Netsuite CRM

This article outlines the integration with the NetSuite CRM connector, enabling streamlined metadata management through features such as crawling, sample profiling, manual lineage, and data preview. The connector extracts metadata from NetSuite CRM record types, tables, columns, custom subrecords, and hierarchical relationships, providing comprehensive visibility into CRM metadata and its structure.

The connector establishes connectivity through the NetSuite SuiteTalk REST APIs using OAuth 1.0 Token-Based Authentication (TBA). Authentication is performed using a NetSuite integration record and a dedicated service account with the required REST Web Services and SuiteQL permissions for connection validation, metadata crawling, sample profiling, data preview, and related connector operations.

<div align="left"><img src="/files/ySqaLQfYDi1DWJujnOaz" alt="" height="293" width="624"></div>

## Overview

### Connector Details

| Connector Category                                                               | RDBMS                |
| -------------------------------------------------------------------------------- | -------------------- |
| OvalEdge Release Supported                                                       | Release8.0 and later |
| <p>Connectivity</p><p>\[How the connection is established with NetSuite CRM]</p> | REST APIs            |

## Connector Features

<table data-search="false"><thead><tr><th>Feature</th><th align="center">Availability</th></tr></thead><tbody><tr><td>Crawling</td><td align="center">✅</td></tr><tr><td>Delta Crawling</td><td align="center">❌</td></tr><tr><td>Profiling</td><td align="center">❌</td></tr><tr><td>Sample Profiling</td><td align="center">✅</td></tr><tr><td>Query Sheet</td><td align="center">❌</td></tr><tr><td>Data Preview</td><td align="center">✅</td></tr><tr><td>Auto Lineage</td><td align="center">❌</td></tr><tr><td>Manual Lineage</td><td align="center">✅</td></tr><tr><td>Secure Authentication via Credential Manager</td><td align="center">✅</td></tr><tr><td>Data Quality</td><td align="center">❌</td></tr><tr><td>DAM (Data Access Management)</td><td align="center">❌</td></tr><tr><td>Bridge</td><td align="center">✅</td></tr></tbody></table>

#### Metadata Mapping

The following objects are crawled from NetSuite CRM and mapped to the corresponding UI assets.

<table data-search="false"><thead><tr><th>NetSuite CRM Object</th><th>NetSuite CRM Attribute</th><th>OvalEdge Attribute</th><th>OvalEdge Category</th><th>OvalEdge Type</th></tr></thead><tbody><tr><td>Schema</td><td>Schema Name</td><td>Schema</td><td>Databases</td><td>Schema</td></tr><tr><td>Schema</td><td>Schema Comment</td><td>Source Description</td><td>Databases</td><td>Schema</td></tr><tr><td>Table</td><td>Record Type Name</td><td>Table</td><td>Tables</td><td>Table</td></tr><tr><td>Table<br></td><td>Record Type/Table Type</td><td>Type</td><td>Tables</td><td>Table</td></tr><tr><td>Table<br></td><td>Record Description</td><td>Source Description</td><td>Descriptions</td><td>Source Description</td></tr><tr><td>Table</td><td>Object Property Name</td><td>Table</td><td>Tables</td><td>Table</td></tr><tr><td>Table</td><td>Custom Record Schema Name</td><td>Table</td><td>Tables</td><td>Table</td></tr><tr><td>Columns</td><td>Property Name (Field Key)</td><td>Column</td><td>Table Columns</td><td>-</td></tr><tr><td>Columns<br></td><td>JSON Schema Type</td><td>Column Type</td><td>Table Columns</td><td>-</td></tr><tr><td>Columns<br></td><td>Property Title</td><td>Title</td><td>Table Columns</td><td>-</td></tr><tr><td>Columns<br></td><td>Property Description</td><td>Source Description</td><td>Table Columns</td><td>-</td></tr><tr><td><br>Columns</td><td>Ordinal Position</td><td>Column Position</td><td>Table Columns</td><td>-</td></tr><tr><td><br>Columns</td><td>Length</td><td>Data Type Size</td><td>Table Columns</td><td>-</td></tr><tr><td>Relationship Column (Synthetic)</td><td>Parent Table Name</td><td>Column</td><td>Table Columns</td><td>-</td></tr><tr><td>Column Relations</td><td>Parent ↔ Child Object Table</td><td>Relationship</td><td>Relationships</td><td>-</td></tr></tbody></table>

## Set up a Connection

### Prerequisites

The prerequisites to establish a connection:

### **External Supporting Files**

{% hint style="info" %}
The required external JAR files are included as part of the OvalEdge installation artifacts. For driver installation and configuration details, refer to the [Connector Drivers Setup Guide](https://docs.ovaledge.com/release8.2/connectors/additional-requirements/connector-drivers-setup-guide?fallback=true). Please contact the OvalEdge Team for assistance related to the driver files and configuration setup.
{% endhint %}

### **Service Account User Permissions**

{% hint style="info" %}
Use a dedicated service account to establish the connection to the data source, configured with the following minimum set of permissions.
{% endhint %}

{% hint style="info" %}
👨‍💻 Who can provide these permissions? The NetSuite CRM administrator grants these permissions, as standard accounts may not have the required access to assign them independently.
{% endhint %}

<table data-search="false"><thead><tr><th>Operations</th><th>Objects</th><th>System Tables</th><th>Access Permissions</th></tr></thead><tbody><tr><td>Connection Validation</td><td>SuiteTalk REST API</td><td>OPTIONS /services/rest/*</td><td>OPTIONS (Read)</td></tr><tr><td>Connection Validation</td><td>Schema</td><td>OPTIONS /services/rest/*</td><td>OPTIONS (Read)</td></tr><tr><td>Crawling</td><td>Tables (Record Types)</td><td>GET /services/rest/record/v1/metadata-catalog</td><td>GET (Read)</td></tr><tr><td>Crawling</td><td>Table Columns</td><td>GET /services/rest/record/v1/metadata-catalog</td><td>GET (Read)</td></tr><tr><td>Crawling</td><td>Custom Subrecords</td><td>GET /services/rest/record/v1/metadata-catalog (swagger)</td><td>GET (Read)</td></tr><tr><td>Crawling</td><td>Relationships</td><td>Derived From Metadata</td><td>Read (Metadata)</td></tr><tr><td>Profiling</td><td>Tables (Sample Data)</td><td>POST /services/rest/query/v1/suiteql</td><td>POST (Read)</td></tr><tr><td>Profiling</td><td>Tables (Row Count) / Table Columns</td><td>POST /services/rest/query/v1/suiteql</td><td>POST (Read)</td></tr><tr><td>-<br></td><td>Views, Procedures, Functions, Triggers, Query Sheet, Lineage, Indexes</td><td>N/A</td><td>Not Supported</td></tr></tbody></table>

{% hint style="info" %}

* The NetSuite service account must use OAuth 1.0 Token-Based Authentication (TBA) with an Integration record that has TBA enabled. The assigned role must include REST Web Services permission to authenticate and access NetSuite REST metadata.
* Crawling metadata requires the role to have access to the target record types and their metadata definitions. Custom record metadata is retrieved through the NetSuite REST schema APIs.
* Profiling and Data Preview use SuiteQL and require SuiteAnalytics / SuiteQL permissions, along with access to the target records. Only Sample Profiling is supported.
* Relationship metadata is derived from nested REST object schemas and does not require additional API permissions. Auto Lineage, SQL Query execution, and Data Access features are not supported by this connector.
  {% endhint %}

### Connection Configuration Steps

{% hint style="info" %}
Users must have the Connector Creator role to configure a new connection.
{% endhint %}

1. Log in to OvalEdge, go to Administration > Connectors, click + **(New Connector)**, search for NetSuite CRM, and complete the required parameters.

   **Note**: Fields marked with an asterisk (\*) are mandatory for establishing a connection.

<table data-search="false"><thead><tr><th width="219.3333740234375">Field Name</th><th>Description</th></tr></thead><tbody><tr><td>Connector Type</td><td>By default, "NetSuite CRM" is displayed as the selected connector type.</td></tr><tr><td>Credential Manager*</td><td><p>Select the desired credentials manager from the drop-down list. Relevant parameters will be displayed based on the selection.</p><p>Supported Credential Managers:</p><ul><li>Database</li><li>HashiCorp</li><li>AWS Secrets Manager</li><li>Azure Key Vault</li></ul><p>For more details, click <a href="https://docs.ovaledge.com/release8.2/connectors/additional-requirements/credential-manager-configuration?fallback=true">here</a>.</p></td></tr><tr><td>Connector Name*</td><td><p>Enter a unique name for the NetSuite CRM connection              </p><p>(Example: "NetSuiteCRM_Prod").</p></td></tr><tr><td>Connector Environment</td><td><p>Select the environment (Example: PROD, STG) configured for the connector.<br></p><p>For more details, click <a href="https://docs.ovaledge.com/release8.2/connectors/introduction-to-connectors/setup-and-connectivity/prerequisites?fallback=true#connector-environment">here</a>.</p></td></tr><tr><td>Connector Description</td><td>Enter the description related to the connector.</td></tr><tr><td>Netsuite account Id*</td><td>Enter the unique NetSuite Account ID associated with the NetSuite CRM instance.</td></tr><tr><td>Client/Consumer Id*</td><td>Enter the OAuth 1.0 Consumer ID (Consumer Key) generated from the NetSuite Integration record. </td></tr><tr><td>Client/Consumer Secret*</td><td>Enter the OAuth 1.0 Consumer Secret associated with the NetSuite integration application. </td></tr><tr><td>Token Id*</td><td>Enter the Token ID generated for Token-Based Authentication (TBA) in the NetSuite account. </td></tr><tr><td>Token secret*</td><td>Enter the Token Secret generated for the Token-Based Authentication (TBA) access token in NetSuite. </td></tr><tr><td>Realm Id*</td><td>Enter the NetSuite Realm ID (Account ID) in the Account_ID format to identify the NetSuite account to connect to. </td></tr><tr><td>Plugin Server</td><td>Enter the server name when running as a plugin server.</td></tr><tr><td>Plugin Port</td><td>Enter the port number on which the plugin is running.</td></tr></tbody></table>

**Default Governance Roles**

<table data-header-hidden><thead><tr><th width="219.33331298828125"></th><th></th></tr></thead><tbody><tr><td>Default Governance Roles*</td><td>Select the appropriate users or teams for each governance role from the drop-down list. All users and teams configured in OvalEdge Security are displayed for selection.</td></tr></tbody></table>

**Admin Roles**

<table data-header-hidden><thead><tr><th width="219.3333740234375"></th><th></th></tr></thead><tbody><tr><td>Admin Roles*</td><td>Select one or more users from the dropdown list for Integration Admin and Security &#x26; Governance Admin. All users configured in OvalEdge Security are available for selection.</td></tr></tbody></table>

**No of Archive Objects**

<table data-header-hidden><thead><tr><th width="219.33331298828125"></th><th></th></tr></thead><tbody><tr><td>No Of Archive Objects*</td><td><p>This shows the number of recent metadata changes to a dataset at the source. By default, it is off. To enable it, toggle the Archive button and specify the number of objects to archive.</p><p>Example: Setting it to 4 retrieves the last four changes, displayed in the 'Version' column of the 'Metadata Changes' module.</p></td></tr></tbody></table>

**Bridge**

<table data-header-hidden><thead><tr><th width="219.33331298828125"></th><th></th></tr></thead><tbody><tr><td>Select Bridge*</td><td><p>If applicable, select the bridge from the drop-down list.</p><p>The drop-down list displays all active bridges configured in OvalEdge. These bridges enable communication between data sources and OvalEdge without altering firewall rules.</p></td></tr></tbody></table>

2. After entering all connection details, the following actions can be performed:
   1. Click Validate to verify the connection.
   2. Click Save to store the connection for future use.
   3. Click Save & Configure to apply additional settings before saving.
3. The saved connection will appear on the Connectors home page.

## Manage Connector Operations

### Crawl/Profile

{% hint style="info" %}
To perform crawl and profile operations, users must be assigned the Integration Admin role.
{% endhint %}

The **Crawl/Profile** button allows users to select one or more schemas for crawling and profiling.&#x20;

1. Navigate to the Connectors page and click **Crawl/Profile**.
2. Select the schemas to crawl.
3. The **Crawl** option is selected by default. Click the **Crawl & Profile** radio button to enable both operations.
4. Click **Run** to collect metadata from the connected source and load it into the **Data Catalog**.
5. After a successful crawl, the information appears in the **Data Catalog > Databases** tab.

The **Schedule** checkbox allows automated crawling and profiling at defined intervals, from a minute to a year.

1. Click the **Schedule** checkbox to enable the **Select Period** drop-down.
2. Select a time period for the operation from the drop-down menu.
3. Click **Schedule** to initiate metadata collection from the connected source.
4. The system will automatically execute the selected operation (**Crawl** or **Crawl & Profile**) at the scheduled time.

### Other Operations

The **Connectors page** in OvalEdge provides a centralized view of all configured connectors, including their health status.

**Managing connectors includes:**

* **Connectors Health**: Displays the current status of each connector, with a green icon for active connections and a red icon for inactive connections, helping monitor connectivity to data sources.
* **Viewing**: Click the Eye icon next to the connector name to view connector details, including Tables, Views, and Columns.&#x20;

**Nine Dots Menu Options:**

To view, edit, validate, configure, or delete connectors, click on the Nine Dots menu.

* **Edit Connector**: Update and revalidate the data source.
* **Validate Connector**: Check the integrity of the connection.
* **Settings**: Modify connector settings.
  * **Crawler**: Configure data extraction.
  * **Profiler**: Customize data profiling rules and methods.
  * **Access Instructions**: Add notes on how data can be accessed.
  * **Business Glossary Settings**: Manage term associations at the connector level.
  * **Others**: Configure notification recipients for metadata changes.
* **Delete Connector**: Remove a connector with confirmation.

For more details on connector settings, click [here](https://docs.ovaledge.com/release8.2/connectors/introduction-to-connectors/setup-and-connectivity/connector-settings?fallback=true).

### Connectivity Troubleshooting

If incorrect parameters are entered, error messages may appear. Ensure all inputs are accurate to resolve these issues. If issues persist, contact the assigned support team.

<table><thead><tr><th width="84.5555419921875">S.No.</th><th width="206.5555419921875">Error Message(s)</th><th>Error Description &#x26; Resolution</th></tr></thead><tbody><tr><td>1</td><td>HTTP 401 Unauthorized </td><td><p>Error Description:<br>The NetSuite CRM connector validation fails because the OAuth authentication request is rejected. This issue typically occurs due to an invalid OAuth signature, incorrect API credentials, or an incorrect Realm ID.</p><p><br>Resolution:</p><ul><li>Verify that the Client (Consumer) ID and Client (Consumer) Secret are correct.</li><li>Ensure that the Token ID and Token Secret are valid and have not expired or been revoked.</li><li>Confirm that the configured Realm ID matches the NetSuite account ID.</li><li>Verify that the OAuth credentials use the HMAC-SHA256 signing method supported by the connector.</li><li>Regenerate the access token if the client secret or token secret has been rotated or updated.</li><li>Retry the connection after updating the OAuth credentials and Realm ID.</li></ul></td></tr><tr><td>2</td><td>HTTP 403 Forbidden </td><td><p>Error Description:<br>The NetSuite CRM connector request is denied because the configured integration role lacks the required permissions to access the requested REST resource.</p><p><br>Resolution:</p><ul><li>Verify that the integration role has the REST Web Services permission enabled.</li><li>Ensure that the role has SuiteAnalytics Workbook and SuiteQL permissions required for profiling.</li><li>Confirm that the role has Read access to all record types selected for crawling.</li><li>Validate that the integration role has separate permissions for both Metadata Catalog and SuiteQL endpoints.</li><li>Save the updated role permissions and retry the connection or crawl operation.</li></ul></td></tr><tr><td>3</td><td>Insufficient permissions to access NetSuite CRM. Minimum SuiteTalk REST permissions are required for connection validation and metadata crawling. </td><td><p>Error Description:<br>The NetSuite CRM connector validation fails because the configured user or integration role lacks the minimum SuiteTalk REST permissions required to validate the connection, retrieve metadata, and perform profiling operations.</p><p><br>Resolution:</p><ul><li>Ensure that the configured NetSuite user or integration role has the required SuiteTalk REST permissions.</li><li>Grant read access to OPTIONS /services/rest/* for connection validation.</li><li>Grant read access to GET /services/rest/record/v1/metadata-catalog and GET /services/rest/record/v1/metadata-catalog/{recordType} for metadata crawling.</li><li>Grant access to the Swagger metadata catalog for custom subrecords, if applicable.</li><li>Grant access to POST /services/rest/query/v1/suiteql for sample profiling and row count operations.</li><li>Verify that the assigned role has access to the required record types and metadata.</li><li>Retry the connection after updating the role permissions.</li></ul></td></tr><tr><td>4</td><td>Error while retrieving profiling results: Received HTTP 400 (Bad Request) from the NetSuite CRM SuiteQL API. </td><td><p>Error Description:<br>The profiling operation fails because the SuiteQL query is invalid or the configured role lacks permission to execute SuiteQL queries. This can also occur when profiling unsupported nested object tables or custom subrecords.</p><p><br>Resolution:</p><ul><li>Verify that the configured NetSuite role has the required SuiteQL permissions.</li><li>Ensure that the table or record name used for profiling is valid and supported by SuiteQL.</li><li>Avoid profiling nested object tables and custom subrecords; instead, profile the parent record types whenever possible.</li><li>Review the NetSuite error details logged by the connector to identify the specific cause of the HTTP 400 response.</li><li>Retry the profiling operation after correcting the table selection or updating the role permissions.</li></ul></td></tr></tbody></table>

### FAQs

<details>

<summary>What credentials are required for the NetSuite CRM connector?</summary>

The NetSuite CRM connector uses OAuth 1.0 Token-Based Authentication (TBA). Configure the connection using the NetSuite Account ID, Client/Consumer ID, Client/Consumer Secret, Token ID, Token Secret, and Realm ID. All six credentials are required. Username, password, server, port, JDBC driver, and connection string fields are not applicable.

</details>

<details>

<summary>What is the difference between the NetSuite Account ID and Realm ID?</summary>

The Account ID is used to construct the SuiteTalk REST base URL, while the Realm ID is used as the OAuth realm parameter during authentication. Both values must correspond to the same NetSuite account used to create the integration and access token.

</details>

<details>

<summary>How does Test Connection work?</summary>

The Test Connection feature sends an authenticated HTTP OPTIONS request to the NetSuite CRM REST endpoint using OAuth-signed headers. A successful (2xx) response confirms the connection, while a blank or non-2xx response indicates an authentication failure and the connection test fails.

</details>

<details>

<summary>Why does the Test Connection succeed, but crawling returns no tables?</summary>

A successful test connection validates only the basic REST service endpoints. Crawling also requires access to the metadata catalog APIs. Ensure the integration role has REST Web Services and metadata catalog read permissions, and verify that Token-Based Authentication (TBA) is enabled for the NetSuite integration record.

</details>

<details>

<summary>What minimum NetSuite permissions are required?</summary>

The connector requires read-only SuiteTalk REST permissions, including access to validate the connection, retrieve metadata catalogs, access custom subrecord metadata, and execute SuiteQL queries for sample profiling and row count. No record create, update, or delete permissions are required.

</details>

<details>

<summary>How is the OvalEdge schema mapped?</summary>

The connector maps all metadata to a single hardcoded schema named "NetSuite CRM". Multiple databases or schemas are not exposed by the NetSuite CRM connector.&#x20;

</details>

<details>

<summary>What tables are discovered during crawling?</summary>

The crawler discovers standard record types from the metadata catalog, nested object-type properties as separate child tables linked to their parent record types, and custom subrecords as additional tables identified with the NETSUITE\_SUBRECORDS short text.

</details>

<details>

<summary>How are columns populated?</summary>

Columns are extracted from the metadata catalog schema properties during getRemoteTables() and stored in the globalRemoteTables cache. The getRemoteColumns() method retrieves the columns from this cache. A synthetic relationship column is also added for relationship mapping, using the table name as the column name, the string data type, and the description "Column created to show column relation."

</details>

<details>

<summary>How are relationships built?</summary>

Relationships are built by linking parent record types to their nested object tables based on the metadata catalog. Parent-child relationships are derived from the nested object structure, as NetSuite does not provide foreign key metadata.

</details>

<details>

<summary>How does sample profiling work?</summary>

The connector supports only Sample Profiling (Profile Type S). Sample data is retrieved using a SuiteQL SELECT \* query, while the row count is obtained using a SELECT COUNT(\*) query. Auto Profiling, Conditional Profiling, and Query SQL Profiling are not supported.

</details>

<details>

<summary>Is Query Sheet supported?</summary>

No. Query Sheet is not supported for this connector. The submitQuery(), getQueryResults(), and getQueryResultsRT() methods return null, and interactive SQL query execution is not available.

</details>

<details>

<summary>Are query logs, views, or procedures supported?</summary>

No. Query logs, SQL views, stored procedures, and functions are not supported. The connector does not crawl these objects from NetSuite REST metadata.

</details>

<details>

<summary>Are Auto Lineage, Data Quality, or Data Access supported?</summary>

No. Auto Lineage, Data Quality, and Data Access are not supported. These capabilities are disabled by the connector configuration.

</details>

<details>

<summary>How is this connector different from NetSuite CRM JDBC?</summary>

The NetSuite CRM connector uses the SuiteTalk REST API with OAuth Token-Based Authentication (TBA) and does not require a JDBC driver. The NetSuite CRM JDBC connector uses JDBC-based connectivity with server, port, and database configuration, and supports SQL-based profiling methods such as Auto, Conditional, Sample, and Query. Use the NetSuite CRM connector for REST-based metadata crawling and the NetSuite CRM JDBC connector for JDBC/SuiteAnalytics connectivity.

</details>

***

Copyright © 2026, OvalEdge LLC, Peachtree Corners, GA, USA.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ovaledge.com/release8.2/connectors/connector-repositories/application/netsuite-crm.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
