ml-connector
Oracle NetSuiteLooker

Oracle NetSuite and Looker integration

Oracle NetSuite powers your finance and supply chain. Looker powers your BI dashboards. Connecting the two keeps your finance and operational data fresh in Looker so your team has real-time visibility into vendor spending, invoice status, and GL account activity. New vendors in NetSuite automatically appear in Looker, invoices flow through as they are recorded, and purchase orders keep pace with orders placed. ml-connector bridges the very different APIs and authentication models on each side, handling OAuth2 credential exchange for both systems and moving the data on a schedule you control.

How Oracle NetSuite works

Oracle NetSuite exposes vendors, purchase orders, vendor bills, vendor payments, invoices, GL accounts, items, employees, departments, and locations through SuiteTalk REST Web Services. The cloud platform authenticates with OAuth 2.0 client credentials (recommended) or legacy token-based authentication against a tenant-specific base URL. NetSuite publishes event subscriptions for supported record types such as sales orders and invoices, but many entity types including vendor detail and GL transactions require polling via SuiteQL queries. Webhook payloads carry no HMAC signature, so IP allowlist or shared secret is required for security.

How Looker works

Looker exposes queries, looks, dashboards, scheduled plans, users, groups, and content metadata through a REST API that models data from connected warehouses. The platform authenticates with OAuth 2.0 client credentials, exchanging client ID and secret for a bearer token that expires after one hour with no refresh endpoint. Looker does not natively store ERP data; instead it queries connected database warehouses and delivers modeled results via API or scheduled report delivery. Scheduled Plans drive cron-based webhooks for outbound data delivery, and the REST API supports pull-based querying for integration patterns. Webhooks carry no signature and must be secured via secret token in URL or IP allowlist.

What moves between them

Data flows from Oracle NetSuite into Looker. Vendors, GL accounts, and departments are synced daily so Looker models have current reference data. Invoices, purchase orders, and vendor bills are synced on a schedule, typically daily or weekly depending on your accounting calendar. Looker queries this data and serves it in BI dashboards, reports, and scheduled deliveries. The flow is read-only from NetSuite into Looker; ml-connector does not write back to NetSuite.

How ml-connector handles it

ml-connector stores the NetSuite OAuth2 client credentials encrypted and the Looker OAuth2 credentials encrypted, exchanging each for a fresh bearer token at sync time. NetSuite OAuth2 tokens are valid for 60 minutes, so tokens are cached and refreshed only when a call returns 401. Because NetSuite has no webhook for vendor data and GL transactions, ml-connector polls NetSuite via SuiteQL queries on your chosen schedule. Data is extracted record-by-record, mapped to Looker dimension tables and fact tables by GL account number, vendor ID, and department code, and staged in the connected warehouse. If a Looker load fails, the entire batch is replayed on the next scheduled run. NetSuite's IP allowlist or shared-secret webhook model is not used for this integration because the primary flow is pull-based; push notifications are available for supported record types if your use case changes to event-driven delivery.

A real-world example

A mid-sized distribution company runs Oracle NetSuite for ERP and finance, with a data warehouse that feeds Looker dashboards for finance, procurement, and supply chain teams. Before the integration, the finance team exported vendor and invoice data from NetSuite by hand once a week, loaded it into the warehouse manually, and Looker dashboards were stale by the time the team started analyzing spending patterns and invoice aging. With Oracle NetSuite and Looker connected, vendor master data syncs daily, invoices flow in automatically as they are recorded in NetSuite, and Looker dashboards refresh overnight. The procurement team now sees vendor performance in real time, finance can spot late invoices before they hit pay day, and the manual export and load step is gone.

What you can do

  • Extract vendors, GL accounts, departments, and employees from Oracle NetSuite daily and load them into Looker warehouse models as reference data.
  • Sync invoices, vendor bills, and purchase orders from NetSuite on a schedule tied to your accounting calendar so Looker dashboards always reflect current transaction data.
  • Map NetSuite GL accounts and vendor hierarchies into Looker dimensions so financial reports roll up correctly by account, cost center, and vendor category.
  • Authenticate with OAuth2 credentials for both NetSuite and Looker, manage token expiry and renewal, and handle rate limits with retries and exponential backoff.
  • Maintain a complete audit trail on every extracted record and replay failed batches without data loss so warehouse data stays consistent with NetSuite.

Questions

Which direction does data flow between Oracle NetSuite and Looker?
Data flows from Oracle NetSuite into Looker. Vendors, GL accounts, invoices, and purchase orders are extracted from NetSuite and loaded into the warehouse that Looker queries. The flow is read-only; ml-connector does not write back to NetSuite. This keeps Looker BI dashboards fresh without changing transactional data in your ERP.
How does the integration handle the differences in how NetSuite and Looker expose data?
Oracle NetSuite uses OAuth2 for API authentication and exposes both event subscriptions (push webhooks for some record types) and SuiteQL queries (pull-based for vendors, GL, and other entities). Looker accepts OAuth2 credentials and provides REST API endpoints for queries and metadata, with Scheduled Plans for outbound delivery. ml-connector uses OAuth2 credential exchange for both, polls NetSuite on a schedule for vendor and GL data since webhooks do not cover those records, and stages extracted data in the warehouse so Looker can model it.
What happens if a data extraction from NetSuite to Looker fails partway through?
ml-connector tracks every extracted record with a unique ID and timestamps it in the audit log. If a batch fails during the load into the warehouse, the entire batch is queued for replay on the next scheduled sync. This prevents partial updates and keeps Looker data consistent with NetSuite.

Related integrations

Connect Oracle NetSuite and Looker

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

Get started