Connect NetSuite: pull orders in, sync customers, invoices and products
Find your Account ID in NetSuite, paste a ready OAuth2 access token with the rest_webservices scope into Integration, test, map, activate — sales orders flow in, and customers, invoices and products sync both ways.
The NetSuite connector connects your Oracle NetSuite ERP through the SuiteTalk REST Record service. It pulls sales orders, customers, invoices and products from NetSuite, and pushes customers, invoices and products back to NetSuite. It cannot read or push inventory quantities, so use it for orders and for customer, invoice and product records — not for stock quantity sync.
Prerequisites#
- A NetSuite account, and a sign-in that can open Setup → Company → Company Information to read the Account ID.
- A role with REST Web Services permission: the token you use must carry the rest_webservices scope, and its role must be able to read customer records — the connection test reads one customer.
- A ready OAuth2 access token, obtained through a NetSuite integration record via the client credentials or authorization code flow. Have the finished token in hand before you start the wizard.
- Know which account you are connecting: a sandbox Account ID looks like 1234567_SB1, with the _SB1 suffix.
Get your credentials#
- Find the Account ID: in NetSuite, go to Setup → Company → Company Information and copy the Account ID shown there, exactly as written — for a sandbox account that includes the _SB1 suffix, e.g. 1234567_SB1.
- Get the OAuth2 access token: the token must carry the rest_webservices scope and is obtained from a NetSuite integration record through the client credentials or authorization code flow. Integration does not open a NetSuite sign-in window for you — you paste a token that has already been issued.
- Check the role behind the token: it needs REST Web Services permission and permission to read customer records, or the connection test will fail with MISSING_SCOPE (403).
Fill it into Integration#
- Open Integration → Connector Marketplace → NetSuite → New connection.
- account_id — required. Fill it into the Account ID field: the Account ID from NetSuite → Setup → Company → Company Information, copied character for character, including the _SB1 suffix on a sandbox account (e.g. 1234567_SB1).
- token — required. Fill it into the OAuth2 access token field: paste the full OAuth2 access token that carries the rest_webservices scope (its value typically begins with eyJ). There is no separate field for a Client ID or Client Secret. The token is stored encrypted and never echoed back.
Test the connection#
Click Test connection. If account_id is empty, the test stops with MISSING_ACCOUNT_ID; if token is empty, it stops with MISSING_TOKEN — in both cases no request is sent. Otherwise the test sends your token as a Bearer token on one read-only probe: it reads the customer list with a limit of 1 from https://{account_id}.suitetalk.api.netsuite.com/services/rest/record/v1/customer (12-second timeout). A 200 reply means the test passed and the result shows your account_id. A 401 reply comes back as INVALID_TOKEN and a 403 reply as MISSING_SCOPE — see the FAQ for what to fix in each case; any other failure is reported as CONNECTION_FAILED.
Mapping / pick a template#
Pick the NetSuite standard template. It maps sales orders — including each order’s line details, which the connector reads order by order — plus customers, invoices and products (NetSuite inventory items) between NetSuite and the standard documents. Before activating, check the mapping preview for the fields you rely on, and make sure each NetSuite product is paired to the right product on this side. Inventory quantities are not part of this mapping: this connection does not read or push stock quantities, so do not map quantity-on-hand fields expecting them to sync.
Activate#
After activation, Integration pulls new sales orders, customers, invoices and products from NetSuite on the schedule you set, and pushes customer, invoice and product updates back to NetSuite. Inventory quantities do not flow in either direction through this connection. Watch the first few documents in Runs / Logs before trusting it unattended, and when your OAuth2 token expires, replace it with a newly issued one and test again.
FAQ#
Test stops with MISSING_ACCOUNT_ID or MISSING_TOKEN
One of the two required fields is empty, so the test stops before sending any request to NetSuite.
Fill in both fields: account_id from NetSuite → Setup → Company → Company Information, and token with the full OAuth2 access token. Save, then test again.
Test fails with INVALID_TOKEN (401)
NetSuite rejected the token: it is invalid or expired, it was pasted incompletely, or what you pasted is a Token-Based Authentication (TBA) credential rather than an OAuth2 access token.
Get a fresh OAuth2 access token with the rest_webservices scope from your NetSuite integration record, paste it in full into the token field, save, and test again. Remember that TBA credentials cannot be used with this connection.
Test fails with MISSING_SCOPE (403)
The token reached NetSuite but is not allowed to do what the test does: it is missing the rest_webservices scope, or the role behind it has no permission to read customer records — and the test probe reads customers.
Ask your NetSuite administrator to check the scope on the integration record and the role’s customer permission. If the scope changes, issue a new token, paste it into the connection, save, and test again.
Test fails with CONNECTION_FAILED
The probe reached NetSuite but got a reply other than success, 401 or 403. A common cause is an account_id that does not match the account the token belongs to — the probe address is built from your account_id, so one wrong character sends it to the wrong place.
Re-copy account_id from NetSuite → Setup → Company → Company Information, character for character — including the _SB1 suffix if this is a sandbox account — and confirm the token was issued for that same account. Save and test again.
Where do I fill in the Client ID and Client Secret?
Nowhere in this connection — it has no Client ID or Client Secret field. It takes the finished OAuth2 access token itself: the client credentials or authorization code exchange happens on the NetSuite integration record side to produce that token, and you paste the resulting token into the token field here.
That is also why there is no token refresh flow here: the token you paste is the finished credential. If it expires, run the exchange again on the NetSuite side with the same Client ID and Client Secret, then paste the new token into this connection and test again.
Can this connection sync inventory quantities?
No. This connection cannot read inventory quantities from NetSuite and cannot push inventory quantities to NetSuite. Use it for sales orders, customers, invoices and products, and keep stock quantities in the system that manages them today.
Product records themselves do move both ways — names, SKUs and the other product fields sync with NetSuite. What never travels is the quantity number: a synced product does not carry its on-hand count with it.