
Why NetSuite data ends up in Snowflake
NetSuite has reporting tools. Saved searches, SuiteAnalytics workbooks, financial reports, custom KPI dashboards — Oracle has invested heavily in making NetSuite a self-contained reporting platform. For a lot of companies, these tools are genuinely sufficient. If your reporting needs are "show me open sales orders by rep" or "what's my AR aging look like," stay in NetSuite. Don't add infrastructure you don't need.
But there's a ceiling.
Saved searches choke on complex joins across more than a few record types. SuiteAnalytics workbooks improve on this, but they still operate within the boundaries of the NetSuite data model. You can't pull in Google Analytics sessions, Zendesk tickets, or Shopify clickstream data alongside your NetSuite financials. And if you want to run statistical models, build cohort analyses, or do anything that requires processing millions of rows with custom logic, NetSuite's reporting layer wasn't designed for that.
The most common triggers we see for a Snowflake project:
- Cross-source analytics. A VP of Finance wants a single dashboard that blends NetSuite revenue data with HubSpot pipeline data and Stripe payment data. That dashboard can't live in NetSuite.
- Historical depth. NetSuite retains data indefinitely, but querying three years of transaction-level detail with complex aggregations is painful. Snowflake handles that workload without governance limit concerns.
- Data science and forecasting. Demand planning, customer lifetime value modeling, churn prediction — these require a compute environment that NetSuite doesn't offer.
- Board and investor reporting. Standardized data warehouse outputs feed BI tools like Tableau, Looker, or Power BI with consistent, validated metrics.
If none of these apply to you, you probably don't need Snowflake yet. NetSuite's native SuiteAnalytics Connect (ODBC/JDBC) can feed lightweight BI tools directly for simpler use cases.
Integration approaches
There are four realistic paths to get NetSuite data into Snowflake. They differ significantly in cost, setup time, ongoing maintenance, and how much control you have over the extraction logic.
Celigo integrator.io
This is the approach we recommend for most mid-market companies, and it's the one we implement most frequently.
Celigo's NetSuite connector uses SuiteQL or saved search-based extraction to pull data from NetSuite on a schedule (every 15 minutes, hourly, daily — your choice) and load it directly into Snowflake tables. The platform handles pagination, error retry, field mapping, and data type conversion. You configure flows through Celigo's UI, mapping NetSuite fields to Snowflake columns, and the platform manages the ongoing execution.
Key advantages: Celigo understands NetSuite's data model natively. It knows how to handle multi-select custom fields, currency conversion fields, and formula-based saved search columns without you having to write transformation logic. Error handling is built in — failed records land in a retry queue with clear error messages rather than silently disappearing.
The cost is real, though. Celigo's platform pricing plus flow volume for a Snowflake integration typically runs $1,500-4,000/month depending on the number of record types and sync frequency. For companies already using Celigo for other integrations (Shopify, Salesforce, 3PL), adding Snowflake flows is incremental. For companies who'd be adopting Celigo solely for this, the total cost of ownership needs scrutiny.
Fivetran, Stitch, and Airbyte
These are dedicated ELT (extract, load, transform) platforms built specifically for data warehouse loading. Fivetran and Stitch have pre-built NetSuite connectors that use SuiteTalk SOAP or REST APIs to extract data and land it in Snowflake with minimal configuration.
Fivetran's NetSuite connector is the most polished of the bunch. It handles incremental syncs, schema detection, automatic handling of NetSuite's custom fields, and CDC (change data capture) for near-real-time updates. Pricing is usage-based — measured in monthly active rows (MARs). A typical mid-market NetSuite account with 500K-2M active rows costs $500-2,000/month on Fivetran.
Airbyte offers an open-source alternative with a NetSuite connector. The connector works but requires more configuration and monitoring than Fivetran. If you have a data engineering team comfortable maintaining open-source infrastructure, Airbyte can cut your licensing costs to near zero.
The tradeoff versus Celigo: these tools are excellent at data extraction and loading but don't provide the same bidirectional integration capabilities. If you also need to write data back to NetSuite (e.g., pushing analytics-derived scores back onto customer records), you'll need a separate solution.
Custom SuiteScript + Snowflake API
Maximum flexibility, maximum maintenance burden. This approach involves writing SuiteScript 2.x scripts (typically Map/Reduce or Scheduled scripts) that query NetSuite data via SuiteQL, format it as CSV or JSON, and push it to Snowflake via the Snowflake SQL REST API or by staging files in an S3 bucket that Snowflake ingests via Snowpipe.
A simplified extraction pattern looks like this:
// SuiteScript 2.x Map/Reduce — extract sales orders modified in last 24 hours
const getInputData = () => {
return query.runSuiteQL({
query: `
SELECT id, tranid, entity, trandate, total, status,
lastmodifieddate
FROM transaction
WHERE type = 'SalesOrd'
AND lastmodifieddate >= SYSDATE - 1
`
});
};From there, you'd batch the results, format them, and push to Snowflake's staging area or call the REST API directly. The entire pipeline — extraction, batching, error handling, retry logic, schema evolution, monitoring — is your responsibility.
We only recommend this path when you have extraction requirements that no off-the-shelf connector supports. For example: custom SuiteScript logic that computes derived values during extraction, or proprietary business rules about which records qualify for export. If your needs are "get transaction data from NetSuite into Snowflake," a connector platform will get you there faster and cheaper than custom code.
NetSuite Analytics Warehouse (NSAW)
Oracle's own offering. NSAW replicates your NetSuite data into Oracle Autonomous Data Warehouse (not Snowflake), where you can run SQL queries and connect BI tools. It's available as an add-on module within NetSuite.
NSAW has a genuine advantage: it's deeply integrated with NetSuite's data model, including all standard and custom records, and the replication is automatic. You don't configure extraction logic — Oracle handles it. The data is available in a pre-built star schema designed for analytics.
The limitations: you're locked into Oracle's data warehouse (not Snowflake), the pricing is per-user and can get expensive for broad access, and you can't easily combine NSAW data with non-NetSuite sources in the same warehouse. If your goal is specifically a Snowflake-based analytics stack that blends multiple data sources, NSAW doesn't solve that problem — it's a parallel analytics environment, not a feed into your existing warehouse.
Quick comparison
| Approach | Setup Time | Monthly Cost | Data Freshness | Maintenance |
|---|---|---|---|---|
| Celigo | 2-4 weeks | $1,500-4,000 | 15 min - daily | Low |
| Fivetran | 1-2 weeks | $500-2,000 | Near real-time - hourly | Very low |
| Custom SuiteScript | 4-8 weeks | Dev time only | Configurable | High |
| NSAW | 1-2 weeks | Per-user add-on | Daily | Very low (Oracle-managed) |
What data to sync
The instinct is to replicate everything. Resist it.
Every record type you add increases your extraction time, API consumption, Snowflake storage costs, and transformation complexity. Start with the data that answers your most pressing business question, prove out the pipeline, then expand.
Transaction data is usually first. Sales orders, invoices, cash sales, purchase orders, vendor bills, and item fulfillments. These power revenue reporting, order-to-cash cycle analysis, and procurement analytics. Include line-level detail (items, quantities, amounts, custom columns) — header-level aggregates aren't useful for serious analysis.
Customer and vendor master data comes next. Company name, category, territory, sales rep assignment, terms, credit limit, and any custom segmentation fields your team has added. This is the dimension data that gives context to your transactions.
Inventory snapshots require a different approach than transactional data. NetSuite stores current inventory quantities, not historical snapshots. If you need point-in-time inventory levels for analysis (and you probably do for demand planning), you'll need to capture daily snapshots — extract current inventory balances on a nightly schedule and append them as a new partition in Snowflake rather than overwriting. This is one area where the integration design matters more than the tool.
Financial data (GL journal entries, trial balance exports, budget vs. actuals) is high-value but sensitive. Make sure your Snowflake access controls match the sensitivity of the financial data you're loading. Not every analyst who needs order data should see GL-level financials.
Custom records and custom fields are where most integrations require manual mapping work. Celigo and Fivetran handle standard NetSuite fields automatically, but your custom record types (custom product attributes, deal registration records, commission structures) need explicit configuration. Document which custom records exist and which ones the analytics team actually needs before you start building.
Technical considerations
Extraction method: SuiteQL vs SuiteTalk REST vs SOAP
SuiteQL is the best extraction method for analytics workloads. It lets you write SQL-like queries against NetSuite's analytical data source, supports JOINs across record types, and returns flat result sets that map cleanly to Snowflake tables. Celigo and Fivetran both support SuiteQL-based extraction.
SuiteTalk REST is better for record-level operations (get/create/update individual records) but less efficient for bulk data extraction. You'd use it if you need the full nested structure of a record (header + lines + sublists) rather than a flat query result.
SOAP is legacy. Use it only if your integration tool doesn't support REST or SuiteQL, or if you're working with an older connector that was built on SOAP.
Incremental vs full loads
Full loads (re-extracting all records every sync) work fine for small reference tables — item categories, subsidiaries, departments. For transactional data, full loads are wasteful and slow. Use incremental loads based on lastmodifieddate:
SELECT id, tranid, entity, trandate, total, status
FROM transaction
WHERE type = 'SalesOrd'
AND lastmodifieddate >= TO_DATE('2026-02-15', 'YYYY-MM-DD')This pulls only records created or modified since your last extraction. On the Snowflake side, use MERGE statements to upsert — insert new records and update existing ones based on the NetSuite internal ID as the primary key.
API governance limits
NetSuite enforces API governance limits that cap how many API calls and how much processing time your integration consumes. SuiteQL queries through the REST API consume 10 governance units per query. Map/Reduce scripts have a 10,000-unit budget per invocation. Scheduled scripts get 10,000 units.
In practice, this means you need to batch your extractions. Pulling 500,000 sales order lines in a single query won't work — you'll hit pagination limits and potentially governance caps. Extract in date-range batches (one month at a time, for example) and page through results using the offset and limit parameters.
Celigo and Fivetran handle this automatically. If you're building custom, you need to manage it yourself.
Snowflake schema design
Two schools of thought:
Raw replication (ELT pattern). Land NetSuite data in Snowflake as-is — one table per NetSuite record type, columns matching NetSuite field names. Then use dbt or Snowflake SQL views to transform raw data into analytics-ready models. This approach is more flexible and easier to maintain because your extraction layer is simple and your transformation logic lives in version-controlled SQL.
Star schema (ETL pattern). Transform data during or immediately after extraction into fact and dimension tables. Sales order lines become a fact table joined to customer, item, location, and time dimensions. This is more performant for BI queries but harder to change when business requirements evolve.
We lean toward raw replication plus dbt transformations. It decouples extraction from transformation, makes debugging easier, and lets your analytics engineers own the modeling layer in SQL they understand rather than in an integration platform's UI.
Data freshness
Real-time replication from NetSuite to Snowflake is technically possible (Celigo supports webhook-triggered flows, and you can build SuiteScript User Event scripts that fire on record saves). But real-time is expensive in terms of API consumption, platform costs, and complexity.
For most analytics use cases, hourly or daily syncs are fine. Your board doesn't need revenue numbers that are current to the minute. Your demand planning model doesn't need inventory snapshots more than once a day. Set expectations with stakeholders early — most teams asking for "real-time" actually need "this morning's data."
Common pitfalls
Trying to replicate all of NetSuite. We see this regularly. A company decides to build a data warehouse and starts by extracting every record type in their NetSuite account — including record types nobody queries, custom records from abandoned projects, and transaction types with zero volume. The result is a bloated pipeline that's slow, expensive, and fragile. Identify 5-10 record types that drive your analytics and start there.
Ignoring custom fields and custom records. Standard NetSuite connectors handle standard fields automatically. Your custom fields — custbody_sales_channel, custcol_commission_rate, custrecord_deal_registration — require explicit mapping. If you skip this during setup, your analysts will immediately notice that half the fields they need are missing. Audit your custom fields before you start building.
Not handling deleted records. When a record is deleted in NetSuite, it doesn't show up in your incremental extraction (because it no longer exists). If you're only doing inserts and updates in Snowflake, deleted records persist as ghosts — they appear in your analytics but no longer exist in the source system. Use NetSuite's deletedRecord resource via the REST API to capture deletions and apply them in Snowflake.
Timezone mismatches. NetSuite stores timestamps in the user's preferred timezone (configured per user and per company). Snowflake defaults to UTC. If your extraction doesn't normalize timezones, you'll get orders that appear to have been placed at the wrong time, daily aggregations that split incorrectly across day boundaries, and reconciliation nightmares. Convert all timestamps to UTC during extraction or immediately upon landing in Snowflake.
Underestimating internal ID mapping. NetSuite uses internal IDs (integers) for every reference — customer 12345, item 67890, subsidiary 3. These IDs are meaningless outside NetSuite. Your Snowflake data needs lookup tables (or joined dimension tables) that map internal IDs to human-readable names. Without this, your analysts are staring at dashboards full of numbers instead of "Acme Corp" and "Widget Pro." Extract the name fields alongside the IDs in every query, or maintain separate dimension tables that your fact queries can join against.
Frequently asked questions
Frequently Asked Questions
Getting started
The fastest path from "we need NetSuite data in Snowflake" to "analysts have data" runs through a connector platform. Pick 3-5 record types that answer your most urgent reporting question, configure the extraction, validate the data against NetSuite saved searches, and build your first dbt models. Expand from there.
If you're already running Celigo for other NetSuite integrations, adding Snowflake flows is a natural extension. If you're starting from scratch and only need the data warehouse feed, Fivetran is worth evaluating for its lower cost and fast setup.
Need help with your NetSuite project?
Whether it's integrations, customization, or support — let's talk about how we can help.

Gustavo Canete
Co-Founder & Development Director
Co-founder and Development Director at BrokenRubik overseeing technical excellence and development operations. 12+ years of experience leading NetSuite development teams and delivering complex enterprise solutions.
Get More Insights Like This
Join our newsletter for weekly tips, tutorials, and exclusive content delivered to your inbox.
Related Articles
NetSuite Automation: SuiteFlow, Celigo & Beyond
How to automate business processes in and around NetSuite. From internal workflows with SuiteFlow to cross-application automation with iPaaS.
Ecommerce Automation: Connect Your Store to NetSuite
How to automate the flow between your ecommerce platform and NetSuite. Orders, inventory, customers, returns — without the manual work.
What is iPaaS? Integration Platform as a Service Explained
What iPaaS means, how it works, and why mid-market companies use platforms like Celigo to connect NetSuite, Shopify, Salesforce, and other business applications.
Gustavo Canete