Skip to content

NetSuite Integration

The NetSuite integration is a read-only SuiteQL connection for customer, invoice, and order-to-cash reporting. It uses NetSuite OAuth 2.0 machine-to-machine authentication with a JWT client assertion signed by your integration certificate.

The NetSuite integration does not run through the Resplendent Sync Agent.

You need:

  • A NetSuite account ID (production or sandbox), such as 1234567 or 1234567-sb1.
  • A dedicated Integration record configured for OAuth 2.0 Client Credentials (Machine to Machine).
  • A certificate uploaded to that integration, plus the matching private key (PEM).
  • A NetSuite role with read access to the Datasets you plan to sync.
  • The Client ID and Certificate ID from NetSuite.

The integration never creates, updates, or deletes records in NetSuite.

Grant the integration role only the SuiteQL/record permissions needed for the Datasets you plan to sync.

Dataset Required for connection? Source
Customers Yes (connection test) customer
Contacts No contact
Customer Contact Roles No CustomerContactRole
Customer Addresses No customerAddressbook
Items No item
Invoices No invoice
Invoice Lines No transactionline filtered to invoices
Sales Orders No salesorder
Sales Order Lines No transactionline filtered to sales orders
Item Fulfillments No transaction (type = 'ItemShip')
Transaction Links No NextTransactionLineLink
Transaction Statuses No TransactionStatus

Missing permission for an optional Dataset does not break the connection. Resplendent shows a warning on the affected Dataset instead.

Custom fields returned by SuiteQL (custentity_*, custbody_*, custitem_*, custcol_*) are discovered automatically. Table requirements supply human-readable column aliases for discovered SuiteQL fields (curated labels for core columns, plus automatic Title Case labels for glued identifiers and custom fields). Each Dataset pre-selects a small curated default column set; you can still include any other discovered column.

Create the NetSuite integration credentials

Section titled “Create the NetSuite integration credentials”
  1. In NetSuite, create or select a dedicated Integration for Resplendent.
  2. Enable OAuth 2.0 Client Credentials (Machine to Machine).
  3. Generate or upload a certificate and download/retain the private key PEM.
  4. Assign a read-only role with access to the records listed above.
  5. Copy the Client ID, Certificate ID, and Account ID.
  1. In Resplendent Data, go to Settings → Integrations.
  2. Find NetSuite and select Connect.
  3. Enter:
    • Account ID: your NetSuite account id (sandbox IDs often end in -sb1).
    • Client ID: the OAuth 2.0 integration client id.
    • Certificate ID: the certificate id used as the JWT kid.
    • Private key (PEM): paste or upload the matching private key.
  4. Test and save the connection.
  5. Select the Datasets and columns you want to sync.

The connection test mints an access token and runs a tiny Customers SuiteQL read. A successful test proves authentication works and the role can read core customer data.

Resplendent syncs typed Datasets rather than one giant Transactions dump:

  • Customers, Contacts, Customer Contact Roles, and Customer Addresses for customer master data.
  • Items for product/SKU context.
  • Invoices and Invoice Lines for AR reporting.
  • Sales Orders, Sales Order Lines, and Item Fulfillments for order-to-cash flow.
  • Transaction Links for relationships such as order-to-invoice and invoice-to-payment links.
  • Transaction Statuses for readable status labels.

Payments and credit memos are not included in the initial release. They can be added later when your NetSuite role exposes those SuiteQL record types.

  • Customers uses a rolling full scan: each scheduled tick walks the next SuiteQL pages by id instead of lastmodifieddate. Pages per tick come from table size, cycle length, and cadence so a complete pass can finish in the configured window (default 60 minutes at a 1-minute cadence). When a cycle finishes, unseen customer rows are pruned from the warehouse. Customers do not use a nightly wipe.
  • Other incremental Datasets use NetSuite lastmodifieddate / linelastmodifieddate watermarks.
  • Dataset preview for Item Fulfillments reads header columns from transaction (type = 'ItemShip') and only looks back 90 days, so production accounts do not time out sorting the full fulfillment history.
  • Large histories resume through bounded SuiteQL pages using keyset cursors. NetSuite rejects REST offset values above 3000, so Resplendent does not paginate deep history with large offsets.
  • Nightly resync keeps link, role, and status-style Datasets convergent when hard deletes are not safely detectable.