Integrations

ServiceNow NetSuite Integration Guide

advancedToken-Based Authentication (TBA) with OAuth 1.0 signatureNetSuite

ServiceNow NetSuite integration enables organizations to synchronize critical business data between their ITSM platform and ERP system, solving data silos that create manual work for finance, procurement, and IT teams. This integration is essential for enterprises that need unified visibility across financial transactions, vendor management, and IT service delivery. The integration supports bi-directional data flows including vendor records, purchase orders, financial transactions, and automated incident creation from NetSuite workflow triggers. Primary automation patterns include scheduled imports via Integration Hub, real-time REST API calls triggered by business rules, and webhook-based incident creation, typically managed through the Integration Hub and System Import Sets modules.

Prerequisites

  • ServiceNow Quebec release or later with Integration Hub Professional license
  • NetSuite Administrator role with SuiteScript and REST Web Services permissions
  • NetSuite RESTlets development privileges or REST API access enabled
  • ServiceNow integration_hub_action_step_executor role for technical users
  • MID Server installed and operational for outbound NetSuite API calls
  • NetSuite Token-Based Authentication (TBA) application configured
  • ServiceNow web_service_admin role for REST Message configuration

Architecture Overview

The ServiceNow NetSuite integration primarily uses custom RESTMessageV2 configurations combined with Integration Hub spokes to establish connectivity, though no official NetSuite spoke exists in the ServiceNow Store requiring custom REST integrations. Authentication is established using NetSuite Token-Based Authentication with credentials stored in ServiceNow Connection & Credential Aliases under the Connections & Credentials module. Data flows bi-directionally with outbound calls from ServiceNow to NetSuite REST APIs or custom RESTlets, while inbound data typically uses Import Set transformations triggered by scheduled jobs or webhook receivers. A MID Server is required for outbound API calls to ensure secure connectivity and proper authentication token management. NetSuite imposes rate limits of 1000 requests per hour for RESTlets and 5000 requests per hour for standard REST APIs, requiring careful throttling configuration in Integration Hub flows.

Sourdough
Chrome Extension

Sourdough: ServiceNow Monitoring and Analytics

A Chrome extension for ServiceNow Admins and Developers with essential tools, analytics, graphs and monitoring features.

Instance HealthGraphs & ChartsAPI HealthDeveloper ToolsQuick SearchInstance Switcher
Add to Chrome

Free to install. Pro $5/month after a 14-day no-card trial.
Pro requires the ServiceNow admin role. Upgrade inside the extension.

Overview
Tasks
CMDB
API
Metrics
Monitor
Internals
Instance:sourdoughdev·Version:Yokohama
Instance StateONLINE
System StatusFully Operational
Session Timeout90 minutes
Logged-In Sessions2 (20 active)
Build Nameyokohama-12-18-2024_p1
IP Address10.159.128.43
Instance HealthHealth Score: 90%
🔥 5dSourdough (Chrome Plugin)Dark Mode

Implementation Steps

1

Configure NetSuite Token-Based Authentication application

Navigate to Setup > Integration > Manage Integrations > New in NetSuite and create a new integration application. Set the Name to 'ServiceNow Integration' and ensure Token-Based Authentication is checked, along with REST Web Services and SuiteScript permissions. Copy the Consumer Key and Consumer Secret values that are generated, as these will be needed for ServiceNow credential configuration. Note the Application ID as it will be referenced in ServiceNow REST message headers for proper authentication context.

2

Create NetSuite access token for ServiceNow user

In NetSuite, navigate to Setup > Users/Roles > Access Tokens > New and create a new access token linked to your integration application. Select a NetSuite user with appropriate permissions for data access (typically Administrator or custom integration role). Save the Token ID and Token Secret values immediately as they cannot be retrieved later. Verify the token is active and associated with the correct application by testing a simple REST call using a tool like Postman before proceeding to ServiceNow configuration.

3

Create ServiceNow Connection and Credential records

Navigate to Connections & Credentials > Connections > New and create a Connection record with Name 'NetSuite REST API' and Connection URL pointing to your NetSuite domain (https://[account].suitetalk.api.netsuite.com). Create a new Credential with Type 'Custom' and add four fields: consumer_key, consumer_secret, token_id, and token_secret using the values from steps 1 and 2. Associate this credential with your connection record and test connectivity using the Test Connection feature to verify authentication is working properly.

4

Create REST Message for NetSuite API integration

Navigate to System Web Services > Outbound > REST Message and create a new REST Message named 'NetSuite Integration'. Set the Endpoint to your NetSuite SuiteTalk REST API base URL and configure the Default REST Endpoint with proper authentication headers. Add HTTP methods for GET, POST, PUT operations that will be used for vendor, purchase order, and financial record synchronization. Configure the Authentication tab to reference your NetSuite credential record and set up proper OAuth 1.0 signature generation for each HTTP method.

ServiceNow Script
var rm = new sn_ws.RESTMessageV2('NetSuite Integration', 'GET Vendor Records');
rm.setEndpoint('https://[account].suitetalk.api.netsuite.com/rest/platform/v1/record/vendor');
rm.setAuthenticationProfile('oauth1', 'netsuite_credentials');
rm.setRequestHeader('Content-Type', 'application/json');
var response = rm.execute();
var responseBody = response.getBody();
gs.log('NetSuite Response: ' + responseBody);
5

Configure Import Set tables for NetSuite data synchronization

Navigate to System Import Sets > Import Set Tables and create import set tables for each NetSuite record type you want to sync: u_netsuite_vendors, u_netsuite_purchase_orders, and u_netsuite_transactions. Define columns that map to NetSuite field structures including internal IDs, external IDs, and relevant business data fields. Create corresponding Transform Maps under System Import Sets > Transform Maps to map imported data to ServiceNow tables like [vendor_table], [sc_req_item], or custom financial tracking tables. Configure field mapping, coalescing rules, and data transformation logic to handle NetSuite-specific data formats and business rules.

ServiceNow Script
var gr = new GlideRecord('u_netsuite_vendors');
gr.initialize();
gr.netsuite_id = source.netsuite_vendor_id;
gr.vendor_name = source.companyname;
gr.email = source.email;
gr.phone = source.phone;
gr.status = source.entitystatus;
if (gr.insert()) {
  gs.log('Vendor created with sys_id: ' + gr.sys_id);
}
6

Build Integration Hub flow for scheduled NetSuite synchronization

Navigate to Process Automation > Flow Designer and create a new flow named 'NetSuite Data Sync'. Add a Schedule trigger to run the integration at regular intervals (typically every 15-30 minutes for financial data). Include REST steps that call your NetSuite REST Message to retrieve updated records, followed by Import Set operations to load data into ServiceNow staging tables. Configure error handling with notification steps to alert administrators when synchronization fails, and implement logging to track successful record counts and processing times for monitoring purposes.

ServiceNow Script
// In a Script step within Integration Hub flow
var restCall = new sn_ws.RESTMessageV2('NetSuite Integration', 'GET Vendor Records');
restCall.setStringParameterNoEscape('lastModified', fd_data.lookup.last_sync_time);
var response = restCall.execute();
if (response.getStatusCode() == 200) {
  var vendors = JSON.parse(response.getBody());
  fd_data.lookup.vendor_count = vendors.items.length;
  fd_data.lookup.vendor_data = response.getBody();
} else {
  fd_data.lookup.error_message = 'NetSuite API call failed: ' + response.getStatusCode();
}
7

Create webhook endpoint for NetSuite incident creation

Navigate to System Web Services > Scripted Web Services > Scripted REST APIs and create a new API named 'NetSuite Webhooks'. Create a POST resource '/incident' that accepts JSON payloads from NetSuite workflow actions when errors or alerts need to create ServiceNow incidents. Configure the script to parse NetSuite payload data, validate required fields, and create incident records with appropriate categorization and assignment. Implement authentication using API keys or basic authentication to secure the webhook endpoint and prevent unauthorized incident creation from external sources.

ServiceNow Script
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
  var payload = JSON.parse(request.body.data);
  var incident = new GlideRecord('incident');
  incident.initialize();
  incident.short_description = 'NetSuite Alert: ' + payload.subject;
  incident.description = payload.description + '\nNetSuite Record ID: ' + payload.record_id;
  incident.category = 'Software';
  incident.subcategory = 'ERP';
  incident.priority = payload.priority || '3';
  incident.caller_id = payload.user_id || 'netsuite_integration_user';
  var incidentId = incident.insert();
  response.setStatus(201);
  response.setBody({incident_number: incident.number, sys_id: incidentId});
})(request, response);
8

Configure NetSuite SuiteScript for ServiceNow integration

In NetSuite, create a SuiteScript 2.0 script to handle outbound calls to ServiceNow when specific business events occur (purchase order approvals, vendor changes, financial exceptions). Navigate to Customization > Scripting > Scripts > New and create User Event or Scheduled scripts that use N/https module to call ServiceNow REST APIs or webhooks. Deploy the script with appropriate execution contexts and governance settings to ensure reliable data transmission. Test the bi-directional integration by creating test records in both systems and verifying data synchronization occurs within expected timeframes and error handling works correctly.

ServiceNow Script
// NetSuite SuiteScript 2.0 example for calling ServiceNow
define(['N/https', 'N/log'], function(https, log) {
  function callServiceNow(recordData) {
    var options = {
      url: 'https://yourinstance.service-now.com/api/now/table/incident',
      method: https.Method.POST,
      headers: {
        'Authorization': 'Basic ' + encode.convert({
          string: 'username:password',
          inputEncoding: encode.Encoding.UTF_8,
          outputEncoding: encode.Encoding.BASE_64
        }),
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(recordData)
    };
    var response = https.request(options);
    log.debug('ServiceNow Response', response.body);
  }
  return {callServiceNow: callServiceNow};
});

Common Use Cases

Automated vendor record synchronization

ServiceNow automatically imports new and updated vendor records from NetSuite to maintain consistent supplier information across both systems. This integration triggers when vendors are created or modified in NetSuite, synchronizing company details, contact information, payment terms, and status to ServiceNow vendor tables or custom applications. The business value includes eliminating duplicate vendor entry, ensuring procurement teams have current vendor data for purchase requisitions, and maintaining audit trails for vendor changes across both platforms.

Purchase order approval workflow integration

When purchase orders are approved in ServiceNow's procurement process, the integration automatically creates corresponding purchase orders in NetSuite with proper accounting codes, department assignments, and approval workflows. This bi-directional sync ensures purchase orders initiated through ServiceNow catalog requests flow seamlessly to NetSuite for financial processing and vendor management. The integration reduces manual data entry, prevents purchase order discrepancies, and provides unified visibility into procurement status across both IT and finance teams.

Financial transaction incident creation

NetSuite workflow actions automatically create ServiceNow incidents when financial exceptions occur, such as failed payment processing, budget overruns, or accounting integration errors. The webhook-based integration passes detailed transaction information, error codes, and business context to create properly categorized incidents assigned to appropriate support teams. This automation ensures financial issues receive immediate IT attention, reduces resolution time for critical business processes, and provides audit trails linking financial exceptions to IT service management activities.

Asset and configuration item synchronization

Hardware and software assets purchased through NetSuite automatically sync to ServiceNow CMDB as configuration items with proper relationships to purchase orders, vendors, and financial records. The integration maps NetSuite item records, serial numbers, and asset details to ServiceNow asset management tables while maintaining links to original purchase documentation. This creates comprehensive asset lifecycle visibility from procurement through deployment, enabling better IT asset management, accurate depreciation tracking, and improved compliance reporting across both financial and IT management systems.

Real-time budget and cost center validation

ServiceNow catalog requests validate available budget and cost center codes in real-time by querying NetSuite financial data before allowing request submission. The integration calls NetSuite REST APIs to verify department budgets, project codes, and account balances during the ServiceNow request process, preventing over-budget purchases and ensuring proper financial coding. This proactive validation reduces purchase order rejections, improves budget compliance, and provides requesters with immediate feedback on spending limits and available funds.

Troubleshooting

401 Unauthorized error when calling NetSuite REST APIs

Check the OAuth 1.0 signature generation in your REST Message configuration by navigating to System Logs > System Log > Outbound HTTP Requests to view detailed authentication headers. Verify your NetSuite Token-Based Authentication credentials are still active in NetSuite under Setup > Users/Roles > Access Tokens, as tokens can expire or be deactivated. Ensure the ServiceNow system time is synchronized with NetSuite servers, as OAuth timestamp validation can fail with significant time drift. Test authentication manually using a REST client with the same credentials to isolate whether the issue is with ServiceNow configuration or NetSuite token validity.

NetSuite rate limit exceeded errors during bulk synchronization

Implement proper throttling in your Integration Hub flows by adding Wait steps between REST API calls to stay within NetSuite's 1000 requests per hour limit for RESTlets. Navigate to Integration Hub > Executions to monitor flow performance and identify high-frequency API calls that trigger rate limiting. Configure your synchronization flows to process records in smaller batches (25-50 records per execution) and use scheduled triggers with appropriate intervals rather than real-time processing. Consider upgrading to NetSuite SuiteCloud Plus for higher API limits if your business requires more frequent synchronization intervals.

Import Set transform maps failing with NetSuite data type mismatches

Review Transform Map logs under System Import Sets > Import Set Tables > [table] > Transform History to identify specific field mapping errors and data type conversion issues. NetSuite often returns numeric values as strings and date fields in ISO format that require transformation using ServiceNow's GlideDateTime functions in transform scripts. Add data validation and cleansing logic in transform map scripts to handle NetSuite's dynamic field structures, null values, and nested JSON objects that don't directly map to ServiceNow field types. Test transform maps with sample NetSuite data in a development instance before deploying to production to catch data format inconsistencies early.

Webhook incidents created with incomplete or missing NetSuite context

Validate the JSON payload structure in your Scripted REST API by adding logging statements to capture complete request data before processing NetSuite webhook calls. Navigate to System Logs > System Log > REST to review webhook request logs and identify missing or malformed data fields from NetSuite workflow actions. Modify your NetSuite SuiteScript workflow actions to include all required incident fields like priority mapping, assignment group logic, and proper user identification rather than relying on ServiceNow defaults. Implement payload validation and error responses in your webhook endpoint to provide feedback to NetSuite when required data is missing or invalid.

ServiceNow to NetSuite synchronization creates duplicate records

Configure proper coalescing fields in your NetSuite REST calls and ServiceNow transform maps using NetSuite internal IDs or external ID fields to prevent duplicate record creation. Review your Integration Hub flow logic to implement 'upsert' patterns that check for existing records before creating new ones, using NetSuite's externalId parameter in REST API calls. Add unique constraints and business rules in ServiceNow to prevent duplicate vendor or purchase order records from being processed multiple times. Monitor Integration Hub execution logs to identify failed upsert operations and implement retry logic with proper record identification to maintain data consistency between systems.

MID Server connectivity issues preventing NetSuite API calls

Verify MID Server configuration under MID Server > Servers and ensure the server has outbound HTTPS connectivity to NetSuite domains including *.suitetalk.api.netsuite.com and your specific account URLs. Check MID Server logs for SSL certificate validation errors or firewall blocking that prevents API authentication, and ensure corporate proxy settings are properly configured if required. Test connectivity using the MID Server's built-in network utilities and verify DNS resolution for NetSuite endpoints from the MID Server host system. Update MID Server capabilities and restart the service if REST Message configurations are not being recognized or executed properly.

Pro Tips

  • Implement field-level change detection in your NetSuite synchronization flows by storing hash values or timestamps of synchronized records to avoid unnecessary API calls and processing overhead. Use ServiceNow's GlideChecksum API to generate hash values of critical fields and compare them during sync operations, significantly reducing NetSuite API consumption while maintaining data accuracy.
  • Configure ServiceNow Business Rules with 'async' execution to handle NetSuite API calls that could timeout or delay user transactions, especially for real-time validations like budget checks. Use Event queues and scheduled jobs for non-critical NetSuite synchronization to maintain ServiceNow performance while ensuring eventual data consistency across both systems.
  • Leverage NetSuite's SuiteQL for complex data queries instead of multiple REST API calls when synchronizing large datasets, as SuiteQL can join multiple record types and filter data server-side. This reduces API call consumption and improves synchronization performance while providing more flexible data retrieval options for ServiceNow integration requirements.
  • Implement comprehensive error handling with exponential backoff retry logic in Integration Hub flows to handle NetSuite's temporary service unavailability or maintenance windows gracefully. Store failed synchronization attempts in custom ServiceNow tables with retry counters and error details to enable manual reprocessing and maintain audit trails of integration failures.
  • Use ServiceNow's Connection Alias feature with multiple NetSuite credentials for load balancing and failover scenarios, especially in high-volume integration environments. Configure round-robin credential selection or primary/secondary patterns to distribute API calls across multiple NetSuite integration applications and avoid hitting single-token rate limits.
  • Create custom ServiceNow reports and dashboards to monitor NetSuite integration health including API response times, success rates, and data synchronization lag times. Use Performance Analytics or custom metrics to track integration KPIs and identify performance trends that could indicate configuration issues or capacity constraints requiring attention.

Known Limitations

  • NetSuite's REST API rate limits are strictly enforced at 1000 requests per hour for RESTlets and 5000 for standard REST APIs, requiring careful throttling and batch processing strategies that may introduce synchronization delays of 15-30 minutes for large datasets. SuiteCloud Plus subscriptions increase these limits but add significant licensing costs that must be factored into integration planning and budget considerations.
  • NetSuite's Token-Based Authentication requires periodic token renewal and careful credential management, as tokens can expire without notice or be revoked by NetSuite administrators, causing integration failures until manual intervention occurs. ServiceNow cannot automatically refresh these tokens, requiring operational processes to monitor and update credentials proactively to maintain integration stability.
  • Complex NetSuite custom fields and record types may not have direct ServiceNow equivalents, requiring extensive custom scripting and transform logic that increases maintenance overhead and upgrade complexity. NetSuite's flexible schema allows unlimited customization that can create data synchronization challenges when business users modify fields without considering ServiceNow integration impacts.
  • Real-time bi-directional synchronization is limited by both platforms' API performance and transaction processing speeds, typically achieving near real-time sync within 5-10 minutes rather than instantaneous updates. Critical business processes requiring immediate data consistency may need workflow design adjustments to accommodate integration latency and potential temporary data inconsistencies.
  • NetSuite's SuiteScript execution limits and governance restrictions can affect complex integration logic, particularly for large-scale data transformations or real-time webhook processing that may timeout or exceed script execution quotas. These limitations require careful script optimization and may necessitate breaking complex integrations into smaller, more manageable components.

Frequently Asked Questions

Can ServiceNow automatically create NetSuite purchase orders from catalog requests without manual approval workflows?

Yes, ServiceNow can automatically create NetSuite purchase orders using Integration Hub flows triggered by catalog request approvals or fulfillment tasks. Configure a flow that monitors requested item states and calls NetSuite REST APIs to create purchase orders with proper vendor, item, and accounting information. However, most organizations implement approval gates in ServiceNow before NetSuite creation to maintain financial controls and ensure proper budget validation. The integration can pass approval history and authorized personnel information to NetSuite for audit trail purposes while automating the purchase order creation process.

How do I handle NetSuite custom fields and record types that don't exist in standard ServiceNow tables?

Create custom ServiceNow tables or extend existing tables with custom fields to accommodate NetSuite-specific data structures that don't map to standard ServiceNow schema. Use Import Set staging tables as intermediary storage for NetSuite data, then apply transform maps with custom scripting to map complex or nested NetSuite fields to appropriate ServiceNow records. For NetSuite custom record types, consider creating corresponding custom applications in ServiceNow or leveraging existing modules like Custom Table to store the data. Document field mappings carefully and implement data validation to ensure custom fields maintain data integrity across both systems.

What's the recommended approach for handling NetSuite multi-subsidiary configurations in ServiceNow integration?

Configure separate ServiceNow Connection records for each NetSuite subsidiary with subsidiary-specific credentials and endpoints, or use a single connection with subsidiary ID parameters in REST API calls. Create subsidiary-specific Integration Hub flows or use conditional logic within flows to route data based on NetSuite subsidiary context passed in API responses. Map NetSuite subsidiaries to ServiceNow companies, business units, or custom subsidiary tables to maintain organizational structure alignment. Implement proper access controls in ServiceNow to ensure users only see data from their authorized subsidiaries, mirroring NetSuite's role-based subsidiary restrictions for consistent security models.

Can the integration handle NetSuite approval workflows and replicate approval chains in ServiceNow?

ServiceNow can receive NetSuite approval status updates through webhook integration and mirror approval states in corresponding ServiceNow records like purchase requisitions or vendor requests. However, replicating complete NetSuite approval chains requires custom ServiceNow workflow design that maps NetSuite approver roles to ServiceNow users and groups. Configure NetSuite SuiteScript to send approval transition events to ServiceNow REST endpoints, updating approval status and triggering corresponding ServiceNow workflow actions. For complex approval scenarios, consider maintaining approval processing in one system (typically ServiceNow for IT-related approvals, NetSuite for financial approvals) and synchronizing final approval status rather than duplicating entire approval workflows across both platforms.

How do I monitor and troubleshoot NetSuite integration performance issues in production?

Use ServiceNow's Integration Hub execution logs and Performance Analytics to monitor integration flow performance, API response times, and success rates over time. Configure custom ServiceNow dashboards displaying NetSuite integration metrics like records processed per hour, error rates by integration type, and API quota consumption tracking. Set up Event Management alerts for integration failures, rate limit exceeded conditions, and unusual processing delays that could indicate NetSuite performance issues. Implement custom logging in Integration Hub flows and transform maps to capture detailed timing and throughput metrics, enabling proactive identification of performance bottlenecks before they impact business operations.

What security considerations are important for ServiceNow NetSuite integration in enterprise environments?

Store NetSuite credentials using ServiceNow's Connection & Credential framework with proper ACL restrictions and avoid hardcoding authentication details in scripts or configuration records. Configure MID Server with dedicated service accounts and network segmentation to isolate NetSuite API traffic from general ServiceNow operations. Implement proper SSL/TLS validation and certificate management for all NetSuite API calls to prevent man-in-the-middle attacks or credential interception. Use ServiceNow's encryption contexts for sensitive data fields synchronized from NetSuite, particularly financial information or vendor payment details. Regular credential rotation policies should be established for NetSuite tokens and ServiceNow integration user accounts to maintain security compliance requirements.

Does ServiceNow offer a pre-built NetSuite spoke or connector in Integration Hub?

Currently, ServiceNow does not provide an official NetSuite spoke in the Integration Hub Store, requiring custom REST Message and Integration Hub flow development for NetSuite connectivity. However, ServiceNow partners and community developers have created unofficial NetSuite integration accelerators and templates available through ServiceNow Share or partner channels. The absence of an official spoke means organizations must build and maintain custom integration components using RESTMessageV2, custom table structures, and Integration Hub flows. This approach provides maximum flexibility for NetSuite customizations but requires more development and maintenance effort compared to official spoke implementations for platforms like Salesforce or Microsoft applications.

Test Your Knowledge

Quick 3-question quiz — see how your ServiceNow skills stack up.

Question 1 of 3Performance

A list view on a table with millions of records is slow. Best fix?

Select an answer to continue