Oracle NetSuite and Snowflake integration
Oracle NetSuite runs order-to-cash and procure-to-pay. Snowflake stores and queries enterprise data for reporting, analytics, and reconciliation. Connecting the two gives finance teams a single source of truth for transaction history and GL balances without manual exports or re-entry. New sales orders, invoices, vendor bills, and GL postings flow from NetSuite into Snowflake automatically and land in tables ready for reporting dashboards, cost analysis, and audit workflows.
What moves between them
The main flow runs from Oracle NetSuite into Snowflake. Purchase orders, vendor bills, invoices, and sales orders push from NetSuite via Event Subscriptions to ml-connector, which routes them into Snowflake transaction tables. General ledger accounts and dimensions (departments, locations, classifications) are synced on a daily schedule via SuiteQL polling to keep the warehouse GL reference data current. Line items are mapped to Snowflake GL dimension tables so finance teams can roll up costs by department or location in reporting queries.
How ml-connector handles it
ml-connector authenticates to Oracle NetSuite using OAuth 2.0 Client Credentials, refreshing the token every 59 minutes since M2M tokens do not have a refresh token endpoint. It ingests Event Subscription webhooks from NetSuite for transaction changes and routes them into Snowflake tables, preserving the original timestamps and record metadata. For records not available via webhooks, it polls SuiteQL on a daily cadence (configurable per flow) to backfill historical data and reference entities like GL accounts and dimensions. On the Snowflake side, ml-connector uses Key Pair Authentication with JWT and the SQL API to upsert records into warehouse tables, handling async 202 responses with polling and partition-based pagination for large result sets. NetSuite Event Subscriptions do not include HMAC signatures, so ml-connector validates webhook authenticity using an IP allowlist and a shared secret in the callback URL. Snowflake Streams (if configured) mark synced rows as consumed on read, so ml-connector tracks watermarks separately to avoid duplicate ingestion on retries.
A real-world example
A mid-market software-as-a-service company runs Oracle NetSuite for order management and accounting, and uses Snowflake for analytics and business intelligence. Before integration, the finance team exported vendor invoices and purchase order data from NetSuite to CSV weekly and loaded it into Snowflake manually for monthly cost center reconciliation and vendor spend analysis. Sync latency meant reports were always one week behind, and invoice corrections in NetSuite would not update Snowflake for another export cycle. With Oracle NetSuite and Snowflake connected, invoice and purchase order events flow in seconds via webhooks, Snowflake tables are always current with NetSuite, and month-end cost rollups and vendor spend queries run on live data without manual intervention.
What you can do
- Push sales orders, invoices, and vendor bills from Oracle NetSuite into Snowflake transaction tables via Event Subscriptions webhooks.
- Poll SuiteQL for general ledger accounts, departments, and other GL dimensions to keep Snowflake reference data synchronized on a daily schedule.
- Map Oracle NetSuite GL accounts to Snowflake dimension tables so costs roll up by cost center, location, or department for reporting and analytics.
- Refresh OAuth tokens automatically and handle Snowflake asynchronous SQL queries, pagination, and change data capture via Streams.
- Validate NetSuite webhook authenticity using IP allowlist and shared secret, with a full audit trail on every record loaded into Snowflake.
Questions
- Which direction does data move between Oracle NetSuite and Snowflake?
- The main flow is from Oracle NetSuite into Snowflake. Transactional records like invoices, purchase orders, and vendor bills push from NetSuite via Event Subscriptions webhooks. General ledger reference data like chart of accounts and dimensions are polled daily via SuiteQL. Snowflake is a data warehouse, not an ERP, so data does not flow back from Snowflake to NetSuite.
- Does ml-connector use Event Subscriptions webhooks or SuiteQL polling?
- Both. ml-connector ingests NetSuite Event Subscriptions for transactional changes--invoices, sales orders, vendor bills--as they occur. For records not covered by webhooks and for bulk historical data, it polls SuiteQL on a daily schedule. This hybrid approach minimizes latency for critical transactions while ensuring reference data like GL accounts stays synchronized.
- How does ml-connector authenticate to Oracle NetSuite and Snowflake?
- ml-connector authenticates to Oracle NetSuite using OAuth 2.0 Client Credentials, which requires the integration app client ID and secret. It refreshes the token every 59 minutes since M2M tokens are valid for 60 minutes with no refresh token endpoint. On the Snowflake side, it uses Key Pair Authentication with an RSA private key and JWT to connect to the SQL API and load records into warehouse tables.
Related integrations
More Oracle NetSuite integrations
Other systems that connect to Snowflake
Connect Oracle NetSuite and Snowflake
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started