Skip to Content

NetSuite

Sync data from your warehouse to Oracle NetSuite records via the SuiteTalk REST API. Keep your NetSuite customers, contacts, vendors, and custom records up to date with your latest customer data.

Prerequisites

  • An Oracle NetSuite account with SuiteTalk REST Web Services enabled
  • An integration record configured for Token-Based Authentication (TBA)
  • Access tokens (token ID and token secret) generated for the integration
  • A role with permissions to create and edit the target record types

Authentication

NetSuite uses Token-Based Authentication (TBA), which is Oracle’s recommended method for server-to-server integrations.

Setting Up TBA in NetSuite

  1. Navigate to Setup → Company → Enable Features → SuiteCloud and enable:
    • Client SuiteScript
    • Server SuiteScript
    • SuiteTalk (Web Services)
    • REST Web Services
    • Token-Based Authentication
  2. Navigate to Setup → Integration → Manage Integrations → New and create an integration record:
    • Enable Token-Based Authentication
    • Save the Consumer Key and Consumer Secret (shown only once)
  3. Navigate to Setup → Users/Roles → Access Tokens → New and create an access token:
    • Select the application (integration record) from step 2
    • Select a user and role with appropriate permissions
    • Save the Token ID and Token Secret (shown only once)
  4. Enter these four values in the Zeotap connection form

Configuration

FieldTypeRequiredDescription
Account IDTextYesYour NetSuite account ID. For sandbox accounts, append _SB1 (e.g., 1234567_SB1).
Max Concurrent RequestsNumberNoMaximum parallel API requests (1—10). Default: 5. Lower values reduce rate limiting risk.

Credentials

FieldTypeRequiredDescription
Consumer KeyTextYesFrom your NetSuite integration record.
Consumer SecretPasswordYesFrom your NetSuite integration record. Stored encrypted.
Token IDTextYesAccess token ID generated for this integration.
Token SecretPasswordYesAccess token secret generated for this integration. Stored encrypted.

Target Settings

FieldTypeRequiredDescription
Record TypeSelectYesThe NetSuite record type to sync data to (Customer, Contact, Vendor, etc.).
Custom Record Type IDTextConditionalInternal ID of the custom record type. Required when Record Type is Custom Record.

Available Record Types

Record TypeAPI ValueDescription
CustomercustomerCustomer records (companies and individuals)
ContactcontactContact persons associated with customers
VendorvendorVendor/supplier records
EmployeeemployeeEmployee records
PartnerpartnerPartner records
LeadleadLead records
ProspectprospectProspect records
Sales OrdersalesOrderSales order transactions
InvoiceinvoiceInvoice transactions
OpportunityopportunitySales opportunity records
Support CasesupportCaseCustomer support cases
Custom RecordcustomRecordAny custom record type defined in your account

Supported Operations

Sync Modes

ModeSupportedDescription
UpsertYesCreates new records or updates existing ones matched by External ID
InsertYesCreates new records only
UpdateYesUpdates existing records matched by Internal ID or External ID
Mirror

Audience Sync Modes

NetSuite does not support audience sync modes. Use standard sync modes with field mapping.

Features

  • Field Mapping: Yes — map source columns to NetSuite record fields
  • Schema Introspection: No — configure field mappings manually using NetSuite field IDs

Required Field Mappings

FieldDescriptionAlternatives
External IDUsed to match records for upsert operations. Must map to a field marked as “External ID” in NetSuite.Internal ID (internalId)

Common Destination Fields

These fields are pre-populated in the field mapping dropdown for convenience:

FieldTypeDescription
internalIdstringNetSuite internal record ID. Read-only on insert.
externalIdstringExternal identifier for upsert matching.
companyNamestringCompany or organization name.
emailstringPrimary email address.
firstNamestringContact first name.
lastNamestringContact last name.
phonestringPrimary phone number.
entityIdstringHuman-readable record identifier.
subsidiarystringSubsidiary internal ID (required for OneWorld accounts).
entityStatusstringRecord status internal ID.
commentsstringFree-text comments or notes.
categorystringRecord category internal ID.

Rate Limits

NetSuite enforces concurrency-based governance limits rather than per-second rate limits:

  • Concurrency limit: Depends on your NetSuite license tier (typically 5—25 concurrent requests)
  • Record-level locking: Concurrent updates to the same record will fail; Zeotap serializes writes to avoid this
  • Governance units: SuiteScript governance units do not apply to REST API calls, but large batch sizes may trigger timeouts

If you encounter rate limiting errors, reduce the Max Concurrent Requests setting.

Troubleshooting

Authentication failed (401)

Verify that:

  • Token-Based Authentication is enabled in Setup → Company → Enable Features → SuiteCloud
  • The integration record has TBA enabled
  • The consumer key, consumer secret, token ID, and token secret are correct
  • The access token has not been revoked

Invalid account ID

The account ID is shown in Setup → Company → Company Information. For sandbox accounts, append _SB1 (e.g., 1234567_SB1). Do not include the company name.

Record not found on update

Updates require a valid internalId or externalId. Verify the mapped identifier field contains values that exist in NetSuite.

Subsidiary is required (OneWorld)

NetSuite OneWorld accounts require a subsidiary on most record types. Map the subsidiary field to the internal ID of the target subsidiary.

Custom record type not found

When using custom records, the Custom Record Type ID must be the internal ID (e.g., customrecord_mytype), not the display label. Find this in Customization → Lists, Records, & Fields → Record Types.

Permission denied

The role associated with the access token must have:

  • Lists → Record Type: Create, Edit (for insert/upsert)
  • Setup → REST Web Services: Full
  • Setup → Log in using Access Tokens: Full
Last updated on