ml-connector
Oracle NetSuiteTableau

Oracle NetSuite and Tableau integration

Oracle NetSuite holds your financial transactions, customer orders, and inventory levels. Tableau turns that data into dashboards your business runs on. Connecting them keeps your BI dashboards current without manual export and re-import cycles. Financial reports, sales analysis, and inventory visibility all pull live from NetSuite through Tableau, updated on a schedule tied to your accounting close or business rhythm. ml-connector handles the very different APIs on each side and moves the data reliably, even when deployments differ between Tableau Cloud and Tableau Server.

How Oracle NetSuite works

Oracle NetSuite exposes financial records, transactions, inventory items, customers, vendors, and general ledger accounts through REST APIs (SuiteTalk). Authentication uses OAuth 2.0 client credentials with a certificate (recommended) or deprecated token-based authentication. A base URL includes the customer's account ID. Data is accessed via REST queries (SuiteQL for bulk reads and historical data) or event subscriptions (webhooks for real-time record changes on supported types like sales orders, invoices, and inventory items). Event subscription payloads do not include HMAC signatures, so security relies on IP allowlisting and a shared secret. OAuth tokens expire every 60 minutes with no refresh token in machine-to-machine mode.

How Tableau works

Tableau operates as both a SaaS offering (Tableau Cloud) and a self-hosted deployment (Tableau Server), each with slightly different API endpoints and behavior. The REST API supports personal access tokens (PAT) exchanged for a session token valid for 240 minutes by default, or Connected App JWT authentication. The API is site-scoped, requiring a site ID in the request path. Tableau supports webhooks for 24 event types including data source refreshes and workbook updates, with no signature verification. Data sources and views are read-only objects that can be queried but not directly modified; instead, extract refreshes push new data into published sources.

What moves between them

The primary flow runs from Oracle NetSuite into Tableau. ml-connector polls NetSuite on a daily or weekly schedule using SuiteQL to retrieve sales orders, invoices, revenue by customer, and inventory levels, then publishes refreshed data to Tableau data sources. As new records are created or modified in NetSuite (via Event Subscriptions where supported), ml-connector can optionally trigger Tableau data source extracts to refresh, keeping dashboards current. NetSuite serves as the source of truth; Tableau is a read-only analytics layer, so ml-connector never writes back to NetSuite.

How ml-connector handles it

ml-connector stores both credential sets encrypted and uses OAuth client credentials with a certificate to authenticate to NetSuite, refreshing the 60-minute bearer token before expiry. To Tableau, it exchanges a personal access token for a session token on each connect. For polling NetSuite, ml-connector constructs SuiteQL queries scoped to the customer's account ID, retrieving financial and inventory data in bulk. It then transforms the result set to match the schema of a Tableau data source (mapping NetSuite dimensions like account, customer, and item to Tableau columns), and publishes the refreshed extract. For event-driven refreshes, ml-connector receives NetSuite Event Subscriptions (without signatures) and validates the payload with a shared secret. Because Tableau Cloud and Server have different API endpoints and deployment models, ml-connector auto-detects the deployment type from the configured URL and adjusts the API path accordingly. Session tokens expire, so ml-connector caches and rotates them, and it retries Tableau refresh calls if a data source is temporarily locked. Every extract publish carries audit metadata (user, timestamp, record count, query used) so any future misalignment can be debugged.

A real-world example

A mid-market B2B software company runs Oracle NetSuite for order-to-cash, invoicing, and general ledger operations. The finance and sales leadership team relies on Tableau dashboards built on NetSuite data (monthly recurring revenue, customer aging, inventory turnover, and regional sales trends) to run weekly business reviews. Before the integration, a finance team member manually exported NetSuite reports every Friday afternoon, transformed the CSV in Excel, and uploaded the dataset to Tableau, a process that took two hours and was often missed if priorities shifted. The dashboards were always stale by Monday morning. With NetSuite and Tableau connected, financial data publishes to Tableau on Friday evening after close procedures complete, so dashboards refresh automatically and contain Friday night's final numbers. The manual export step is gone, and the team runs Monday reviews with current data.

What you can do

  • Poll Oracle NetSuite on a schedule for sales orders, invoices, revenue, and inventory data using SuiteQL.
  • Publish refreshed data sources to Tableau Cloud or Tableau Server without manual export or re-import.
  • Authenticate NetSuite with OAuth client credentials and certificate, and Tableau with personal access tokens.
  • Map NetSuite accounts, customers, items, and departments to Tableau dimensions and metrics.
  • Trigger Tableau data source extract refreshes when NetSuite Event Subscriptions fire, keeping dashboards current.

Questions

Does ml-connector work with both Tableau Cloud and Tableau Server?
Yes. ml-connector detects the deployment type from your configured Tableau URL and adjusts the API path accordingly. Tableau Cloud and Server have different scheduling models and API behaviors, and ml-connector handles both transparently. Your personal access token works on either deployment as long as it is configured correctly for that instance.
How does the integration handle NetSuite's 60-minute OAuth token expiry?
ml-connector refreshes the OAuth bearer token before expiry by tracking its creation time. The integration does not use a refresh token (NetSuite M2M does not issue one), so it re-authenticates using the stored OAuth client credentials and certificate before the token times out, ensuring no API calls fail due to token age.
Can ml-connector write data back into NetSuite from Tableau?
No. Tableau is a read-only analytics layer; ml-connector pulls data from NetSuite into Tableau but never writes back. NetSuite remains the source of truth for all transactional and master data. If you need to push changes from Tableau to NetSuite, that flow would be handled by a separate integration in the opposite direction.

Related integrations

Connect Oracle NetSuite and Tableau

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started