NewNetSuite 2025.2 — What's new

NetSuite Snowflake Integration: Sync ERP Data

How to connect NetSuite to Snowflake for data warehousing and analytics. Integration approaches using Celigo, custom SuiteScript, and ETL tools.

14 min read
Celigo Partner · NetSuite Experts150+ Projects Delivered10+ Years Experience
NetSuite Snowflake Integration: Sync ERP Data

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

ApproachSetup TimeMonthly CostData FreshnessMaintenance
Celigo2-4 weeks$1,500-4,00015 min - dailyLow
Fivetran1-2 weeks$500-2,000Near real-time - hourlyVery low
Custom SuiteScript4-8 weeksDev time onlyConfigurableHigh
NSAW1-2 weeksPer-user add-onDailyVery 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.

Share:

Need help with your NetSuite project?

Whether it's integrations, customization, or support — let's talk about how we can help.

We respond within 24 hours.

Gustavo Canete

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.

12+ years experienceOracle NetSuite Certified +1
NetSuite DevelopmentSuiteCommerce AdvancedTeam ManagementTechnical Leadership+2 more

Get More Insights Like This

Join our newsletter for weekly tips, tutorials, and exclusive content delivered to your inbox.

Get in Touch