Integrating Shopify with NetSuite: A Practical Guide
No7 Engineering Team
Growth Architecture Unit
Shopify for the storefront, NetSuite for everything else. It's one of the most common setups we see in mid-market eCommerce, and getting the integration right is critical. Get it wrong and you're dealing with oversold inventory, missing orders, and finance teams who don't trust the numbers.
We've built dozens of these integrations. Here's what we've learned about making them reliable.
The Core Data Flows
Every Shopify-NetSuite integration needs to handle four fundamental data flows. Get these right and everything else is manageable.
Essential Data Flows
- Orders (Shopify → NetSuite): Every Shopify order needs to create a sales order in NetSuite with correct item mapping, tax allocation, and customer association.
- Inventory (NetSuite → Shopify): Available inventory quantities need to sync from NetSuite to Shopify, ideally in near-real-time. This prevents overselling.
- Products (NetSuite → Shopify): Product data—prices, descriptions, images—flows from NetSuite as the source of truth to Shopify for display.
- Customers (Bidirectional): Customer records need to sync both ways. New customers from Shopify create records in NetSuite; updates in NetSuite (like pricing tiers) flow back to Shopify.
Integration Approach: Build vs Buy
There are solid off-the-shelf connectors—Celigo, Breadwinner, and others—that handle standard Shopify-NetSuite integration patterns. For straightforward setups (single store, standard order flow, basic inventory sync), these work well and are faster to implement.
Custom integration makes sense when you have non-standard requirements: complex multi-location inventory logic, custom pricing rules, bundle/kit handling, or specific fulfilment workflows. We often see businesses start with a connector and then come to us when they outgrow it.
Common Pitfalls
1. Inventory Sync Timing
The biggest source of customer complaints is overselling. If your inventory sync runs every 15 minutes, you can sell items that were purchased on another channel in that window. For high-velocity SKUs, near-real-time sync (webhook-driven or polling every 1-2 minutes) is essential.
2. Order Failure Handling
What happens when an order fails to sync to NetSuite? If you don't have proper error handling and retry logic, orders fall into a black hole. We build dead-letter queues and alerting so failed orders are caught immediately and can be retried or manually processed.
3. SKU Mapping Complexity
Shopify SKUs and NetSuite item IDs rarely match one-to-one, especially for businesses with bundles, kits, or matrix items. A robust mapping layer that handles these translations is essential. Don't assume a simple SKU-to-SKU match will work.
4. Tax Handling
Shopify calculates tax at checkout. NetSuite has its own tax engine. These need to agree, or your finance team will spend hours reconciling. We typically let Shopify handle customer-facing tax calculation and pass the tax amounts through to NetSuite as-is, rather than having NetSuite recalculate.
Architecture Recommendations
Use a middleware layer rather than direct API-to-API integration. Whether that's a dedicated integration platform (like Celigo), a custom Node.js service, or a serverless function setup, having a layer between the two systems gives you logging, error handling, retry logic, and transformation capabilities.
Implement idempotent operations. Network issues will cause retries. If creating an order in NetSuite isn't idempotent, you'll end up with duplicate orders. Use external IDs and check-before-create patterns.
Getting Started
Map your data flows before writing any code. Document which system is the source of truth for each data type. Define your sync frequency requirements based on actual business needs, not assumptions. And budget for thorough testing—integration bugs are the hardest to find and the most impactful when they slip through.