Short answer: Inventory stays accurate across Shopify and NetSuite when NetSuite is the single source of truth for stock, every Shopify location maps to exactly one NetSuite location (or a deliberate group of them), and quantities flow one way, from NetSuite to Shopify, on a schedule fast enough for your sales velocity. Most “inventory drift” problems come from breaking one of those three rules: two systems both adjusting stock, locations mapped loosely, or sync that runs too slowly for peak periods.
Seibert Consulting Group builds Shopify and NetSuite integrations for mid-market retailers and B2B brands, and inventory is the part of the integration we see go wrong most often after launch.
Why multi-location inventory drifts
Single-warehouse merchants can get away with a simple quantity sync. Once you add a second warehouse, a 3PL, retail stores or a drop-ship vendor, small gaps compound:
- Two sources of truth. Staff adjust stock in Shopify admin and in NetSuite, and the next sync overwrites one of them.
- Loose location mapping. Several NetSuite locations roll up into one Shopify location without an agreed rule, so available quantity is miscalculated.
- Committed vs on-hand confusion. NetSuite distinguishes on-hand, committed and available quantities. Sending on-hand to Shopify oversells stock that is already promised.
- Sync timing. A schedule that is fine on a quiet Tuesday oversells during a promotion.
- Transfers in flight. Stock moving between locations disappears from one and appears in the other at different times.
The model that works
| Decision | Recommended approach | Why |
|---|---|---|
| Source of truth | NetSuite owns inventory; Shopify displays it | One place to count, adjust and audit |
| Quantity sent | Available (on hand minus committed), per location | Prevents selling stock already allocated |
| Location mapping | One NetSuite location per Shopify location, or a documented roll-up rule | Keeps fulfillment and stock in step |
| Adjustments | Made only in NetSuite (receipts, transfers, counts) | Stops overwrites |
| Sync direction | NetSuite to Shopify for quantities; Shopify to NetSuite for orders | Clear ownership of each record |
| Safety buffer | Optional per-location buffer for fast movers | Absorbs sync lag at peak |
Mapping locations
Start with a table of every physical and virtual place stock lives: warehouses, 3PLs, stores, returns areas and vendor drop-ship. For each NetSuite location, decide:
- Does Shopify sell from it? Returns, quarantine and inspection locations usually should not be sellable.
- Which Shopify location represents it? One-to-one is simplest. Roll-ups work if every order still routes to a location that can fulfill it.
- Does it fulfill online orders, store sales, or both? This drives how orders are assigned back in NetSuite.
Write the answers down. The mapping table becomes part of your integration specification and the first thing to check when numbers disagree.
Orders, fulfillment and stores
Orders need to land in NetSuite against the location that will fulfill them, otherwise committed quantities build up in the wrong place. For omnichannel retailers:
- Online orders should post against the fulfilling warehouse or 3PL location.
- Shopify POS sales should post against the store location, so store stock drops at the moment of sale. See our Shopify POS and NetSuite integration page for how store transactions post.
- Buy online, pick up in store needs the pickup store’s stock reserved when the order is placed, not when the customer arrives.
- Returns should come back into a returns or inspection location first, then move to sellable stock after checking.
Sync timing and buffers
How fast inventory must sync depends on sales velocity and stock depth, not on a universal number. Low-volume, deep-stock items tolerate longer intervals. Fast-selling items with thin stock need near-real-time updates or a buffer. Two practical levers:
- Event-driven updates for the changes that matter most: receipts, transfers, fulfillments and adjustments.
- Per-location safety stock that hides a few units from Shopify during launches and promotions.
Common problems and fixes
- Shopify shows stock NetSuite says is committed. Send available quantity, not on-hand.
- A store sells out online but still has units. Check whether the store location is marked sellable online and mapped correctly.
- Numbers reset after staff edits in Shopify. Lock inventory editing in Shopify admin to NetSuite-driven updates, and train staff to adjust in NetSuite.
- Transfers cause temporary oversells. Treat in-transit stock as unavailable until received.
- Kits and bundles are wrong. Calculate bundle availability from component stock in NetSuite, then sync the result.
Tools that help
Standard connectors cover basic per-location quantity sync. Merchants with many locations, B2B allocation, stores and 3PLs usually need location-aware rules the connector does not provide out of the box. Lightning, the SCG Team’s NetSuite integration platform, includes an Inventory Operations plugin built for location-aware NetSuite inventory. See Lightning. For the overall project, see Shopify NetSuite integration.
Frequently asked questions
Should Shopify or NetSuite be the inventory source of truth?
NetSuite, in almost every case where it runs purchasing, receiving and fulfillment. Shopify should display NetSuite’s available quantities rather than track its own.
Can one Shopify location represent several NetSuite warehouses?
Yes, with a documented roll-up rule and order routing that still sends each order to a warehouse that can ship it.
Why does Shopify oversell even with an integration?
Usually because on-hand quantity is synced instead of available quantity, sync runs too slowly for sales velocity, or stock is being edited in both systems.
How should returns affect inventory?
Receive returns into a non-sellable returns location in NetSuite, inspect them, then transfer good units to sellable stock so Shopify only shows items ready to ship.
