NetSuite SuiteAnalytics Source
Connect NetSuite SuiteAnalytics as a source to sync NetSuite ERP data into your warehouse. Supaflow uses SuiteAnalytics Connect and discovers the tables visible to the role you configure.
For an overview of capabilities and use cases, see the NetSuite connector page. To run pipelines natively inside Snowflake, see Snowflake Native ETL.
Prerequisites
Before you begin, ensure you have:
- A NetSuite account with SuiteAnalytics Connect enabled
- A NetSuite role with SuiteAnalytics Connect permission and read access to the records you want to sync
- The Account ID, Service Host, and Role ID from the SuiteAnalytics Connect Driver Download page
- A NetSuite username and password for the user assigned to that role
- Network access from your Supaflow agent to the NetSuite Connect service host on port 1708
For long-running production pipelines, use a dedicated NetSuite integration user rather than an individual's login. Password expiration, required password changes, role changes, user deactivation, or repeated failed login attempts can interrupt the connection.
Supported Objects
Supaflow discovers NetSuite tables dynamically through SuiteAnalytics Connect. The exact object list depends on the data available in your NetSuite account and visible to the configured role.
| Object | Sync Mode | Description |
|---|---|---|
| Role-visible NetSuite tables | Full Refresh or Incremental | Tables exposed by SuiteAnalytics Connect to the configured role. Common examples include transactions, transaction lines, customers, vendors, items, accounts, and subsidiaries. |
| Tables with a numeric source primary key and supported last-modified cursor | Incremental | Tables are eligible for incremental sync when schema discovery finds a numeric source primary key and one of lastmodifieddate, lastmodified, or linelastmodifieddate. |
| Other readable tables | Full Refresh | Tables without the required primary key and cursor metadata can still be read as full-refresh objects. |
Not Yet Supported
The connector does not support OAuth 2.0 or token-based authentication. It uses the NetSuite username and password path for SuiteAnalytics Connect.
The connector also does not provide source-side delete capture. Incremental sync reads rows whose supported cursor advances; hard deletes in NetSuite are not emitted as delete events unless they are represented in a synced source table.
Supaflow syncs tables exposed through SuiteAnalytics Connect. It does not sync NetSuite saved searches, SuiteAnalytics datasets, SuiteAnalytics workbooks, or NetSuite reports as separate source objects unless NetSuite exposes the underlying data through a role-visible SuiteAnalytics Connect table.
Incremental Sync
Supaflow supports incremental sync for a NetSuite table only when schema discovery finds both:
- A numeric source primary key
- One of these cursor fields:
lastmodifieddate,lastmodified, orlinelastmodifieddate
Incremental reads use the last successful cursor position as the lower bound and the current pipeline cutoff time as the upper bound. This keeps each run bounded and lets Supaflow advance the cursor even when a window has no changed rows.
For large incremental tables, Supaflow reads within numeric ID ranges so a single wide table does not need to be fetched in one query. The durable cursor is still the last-modified timestamp, not the ID range.
Incremental sync depends on NetSuite advancing the supported last-modified cursor for the row. If a computed value, formula-backed value, or related record change does not update that cursor on the synced table, run a full-refresh sync for that table to capture the latest values.
Transaction Type Allowlist
The Transaction Type Allowlist setting applies only to the transaction table. Leave it blank to sync all transaction types visible to the role. Set it to a comma-separated list such as SalesOrd,CustInvc,PurchOrd when you want the transaction table limited to specific NetSuite transaction type codes.
Authentication
Supaflow authenticates to SuiteAnalytics Connect with the NetSuite username and password you provide, plus the Account ID and Role ID in the connection configuration. Oracle's SuiteAnalytics Connect authentication documentation also describes OAuth 2.0 and token-based authentication, but those methods are not exposed by this connector.
The connector is read-only. SuiteAnalytics Connect itself is read-only, and Supaflow does not write, update, or delete records in NetSuite.
Permissions
The role should have:
- SuiteAnalytics Connect permission
- Read access to every record type you want to sync
- Access to the SuiteAnalytics Connect analytics data source
SuiteAnalytics Connect follows NetSuite role-based access restrictions. If a table or field is missing from schema discovery, first check whether the configured role can access that data in NetSuite. Oracle notes that NetSuite2.com is not accessible through the Administrator role, the deprecated Full Access role, roles that require two-factor authentication, or roles that access Connect with IP restrictions. Use a custom role that can access SuiteAnalytics Connect with username and password.
The Data Warehouse Integrator role requires token-based authentication. Because this connector does not expose token-based authentication or OAuth 2.0, do not configure Supaflow with a Data Warehouse Integrator-only setup unless Supaflow support has confirmed your account path.
Configuration
In Supaflow, create a new NetSuite source with these settings:
Account ID*Your NetSuite account ID. Use the value shown under Your Configuration on the SuiteAnalytics Connect Driver Download page.
Examples: 1234567, 1234567_SB1
The SuiteAnalytics Connect service host for your account. Use the Service Host value from the Driver Download page and do not include the port.
Example: 1234567.connect.api.netsuite.com
The internal ID of the NetSuite role Supaflow should use for SuiteAnalytics Connect.
Username*The NetSuite login email for the user assigned to the role.
Password*The NetSuite password for the user.
Stored encrypted
Advanced Settings
Server Data SourceSuiteAnalytics Connect data source name.
Default: NetSuite2.com
Oracle's current SuiteAnalytics Connect data source guidance identifies NetSuite2.com as the only SuiteAnalytics Connect data source. Leave this value unchanged unless Supaflow support asks you to adjust it during troubleshooting.
Noop QueryHeartbeat query used to validate pooled NetSuite sessions.
Default: SELECT 1 FROM dual
Optional comma-separated NetSuite transaction type codes. Applies only to the transaction table.
Example: SalesOrd,CustInvc,PurchOrd
Width of each numeric ID range for range-eligible NetSuite tables.
Default: 50000
Range: 1000 to 5000000
Timeout in seconds for NetSuite range-planning queries. Data reads use Query Timeout instead.
Default: 60
Range: 0 to 3300
Timeout in seconds for a single NetSuite data query.
Default: 3300
How often Supaflow re-discovers NetSuite schema metadata before running.
Options:
- 0 -- Refresh before every pipeline execution
- -1 -- Disable automatic schema refresh
- Positive value -- Refresh interval in minutes (e.g., 60 = hourly, 1440 = daily)
Default: 60
Test & Save
After configuring the connection, click Test & Save. Supaflow verifies the SuiteAnalytics Connect connection, then runs schema discovery for the tables visible to the configured role.
Rate Limiting
NetSuite applies SuiteAnalytics Connect connection, query, and concurrency restrictions. Supaflow handles transient connection and concurrency errors with retry and backoff where the connector can classify them, but large NetSuite accounts can still take time to sync.
For large initial syncs:
- Start with the tables you need first, then add more tables after the first pipeline is stable
- Schedule heavy NetSuite syncs during off-peak hours
- Use Transaction Type Allowlist when you only need specific transaction types
- Reduce Numeric ID Chunk Width if individual range reads time out on wide or heavily filtered tables
See Oracle's SuiteAnalytics Connect service considerations for current NetSuite-side connection guidance.
Schema Evolution
Supaflow re-discovers NetSuite schema on the cadence set by Schema Refresh Interval.
- New tables appear after schema refresh when the configured role can see them
- New columns appear after schema refresh
- Removed or inaccessible fields stop populating new rows; existing destination columns remain
- Role permission changes can add or remove tables and fields from discovery
- Incremental eligibility is recalculated on schema refresh from the current primary key and cursor metadata
NetSuite2.com is the current SuiteAnalytics Connect data source. Oracle's NetSuite2.com schema follows NetSuite's release cycle, so newly exposed records and fields may appear after NetSuite upgrades your account and Supaflow refreshes schema metadata.
Troubleshooting
Authentication failed
Problem:
- Test & Save fails with a login, password, or credentials error
Solutions:
- Confirm the Username and Password match the NetSuite user assigned to the Role ID
- Sign in to NetSuite with the same user and verify the password has not expired
- Confirm the Account ID, Server Host, and Role ID match the values shown on the SuiteAnalytics Connect Driver Download page
- Use a role intended for SuiteAnalytics Connect, such as a custom integration role with the required read permissions
SuiteAnalytics Connect is not enabled
Problem:
- Test & Save reports that the Connect service is not enabled
Solutions:
- In NetSuite, go to Setup > Company > Enable Features
- On the Analytics subtab, enable SuiteAnalytics Connect
- Add SuiteAnalytics Connect permission to the role used by Supaflow
- Run Test & Save again
Tables or fields are missing
Problem:
- The source connects, but expected NetSuite tables or fields do not appear
Solutions:
- Confirm the configured role has access to the record type in NetSuite
- Confirm you are using the NetSuite2.com data source
- Confirm the configured role is not Administrator, Full Access, a role that requires two-factor authentication, or a role that uses Connect IP restrictions
- Use NetSuite's Records Catalog or SuiteAnalytics Workbook to check whether the role can see the table or field
- Set Schema Refresh Interval to 0 for the next run to force a fresh discovery
- If the field was recently added or the role was recently changed, run schema discovery again after NetSuite reflects the permission change
Incremental sync is not available for a table
Problem:
- A table appears in schema discovery, but it can only be selected as full refresh
Solutions:
- Confirm the table has a numeric source primary key in SuiteAnalytics Connect metadata
- Confirm the table has one of
lastmodifieddate,lastmodified, orlinelastmodifieddate - If either requirement is missing, use full refresh for that table
Transaction sync is too broad
Problem:
- The
transactiontable returns more transaction types than you need
Solutions:
- Set Transaction Type Allowlist to the transaction type codes you need
- Use comma-separated values with the exact casing NetSuite exposes, such as
SalesOrd,CustInvc,PurchOrd - Leave the field blank when you want all transaction types visible to the role
Query timeout or slow initial sync
Problem:
- A large NetSuite table times out or takes too long to read
Solutions:
- In Job Details, check the per-object failure to confirm which table timed out
- For the
transactiontable, use Transaction Type Allowlist if your reporting only needs specific transaction types - Reduce Numeric ID Chunk Width so each range query reads less data
- Schedule the sync during off-peak hours
- Increase Query Timeout only after narrowing scope and chunk width have been considered
Appendix: Private Agent Driver Installation
Most customers use Supaflow-hosted agents and do not need to install NetSuite drivers. This appendix applies only if you run a private or installed Supaflow agent in your own tenant.
The Supaflow Agent does not ship with the proprietary NetSuite OpenAccess JDBC driver. For private agents, download NQjc.jar from your NetSuite SuiteAnalytics Connect driver bundle and place it in the agent's mounted external libraries directory before testing the connection.
Default shared install path:
/data/supaflow-external-libs/io/supaflow/supaflow-connector-netsuite/common/jars/NQjc.jar
If your agent sets SUPAFLOW_EXTERNAL_LIBS_DIR, replace /data/supaflow-external-libs with that value. The agent checks a connector-version-specific directory first, then falls back to common/jars:
/data/supaflow-external-libs/io/supaflow/supaflow-connector-netsuite/<connector-version>/jars/NQjc.jar
Use your normal agent file-transfer or deployment process to copy NQjc.jar into the mounted external libraries directory. If Supaflow manages your private agent deployment, contact Supaflow support to install the driver on the agent volume.
Support
Need help? Contact us at support@supa-flow.io