Get a free audit
Get a free audithello@conversionsking.online

Shopify NetSuite inventory sync across EU warehouses and 3PLs

Map NetSuite locations to Shopify, push available stock, set safety stock and sync often enough to stop overselling across EU warehouses and 3PLs.

Shopify NetSuite inventory sync across EU warehouses and 3PLs

To sync NetSuite inventory to Shopify across several EU warehouses and 3PLs, map every NetSuite location that can ship online orders to one Shopify location, push available quantity rather than on-hand, hold back safety stock per location, and send changes every few minutes with a full nightly check. Shopify’s order routing then picks the right warehouse.

That is the short version. The detail is where most European builds go wrong: a returns location that leaks stock into the storefront, a 3PL whose numbers arrive once a day, or a Black Friday spike that sells the same last unit twice. This guide walks through each decision in the order we make them on a build.

Key takeaways

  • One sellable NetSuite location, one Shopify location. Locations that hold stock you must not sell, such as returns or quarantine, stay out of the feed.
  • Push available, not on-hand. Stock already committed to open orders is not sellable, and Shopify treats on-hand and available differently.
  • Safety stock is a business rule, so make it visible. Keep it in one place, per location and per SKU group, not hidden in code.
  • Delta sync every few minutes, full reconcile nightly. The nightly job catches anything the deltas missed.
  • Peak is a separate mode. Higher buffers, faster syncs and closer monitoring for the weeks that matter.

How should NetSuite locations map to Shopify locations?

Start with a list of every NetSuite location and ask one question of each: can an online order ship from here? If yes, it needs a matching Shopify location. If no, it should not appear in Shopify’s stock figures at all.

Shopify tracks inventory per location and does not pool it. Its location settings include a switch called “Use inventory at this location to fulfill online orders”. When it is off, that location’s stock no longer counts towards the online quantity shoppers see. Location limits matter too. Shopify’s location setup page lists 10 locations on Basic, Grow and Advanced, and 200 on Shopify Plus. Apps that stock inventory for you, such as 3PL fulfilment services, are treated as locations but do not count towards the limit.

NetSuite locationShopify treatmentWhy
Own warehouse, e.g. Venlo or RotterdamShopify location, fulfils online ordersMain sellable stock
3PL warehouse, e.g. Poland or GermanyShopify location or fulfilment service appSellable, but stock data may arrive from the 3PL first
Retail storeShopify location, online fulfilment usually offKeeps store stock out of the web quantity unless you offer ship-from-store
Returns or inspectionNot syncedStock is on hand but not yet sellable
In-transit or virtualNot syncedUnits are not on a shelf anyone can pick from

Store the Shopify location ID on the NetSuite location record, or in a cross-reference table, so the mapping is data, not code. When you open a new warehouse, finance adds a row instead of asking for a release.

Should you sync available or on-hand stock?

Sync available. Shopify’s inventory states are on hand, available, committed, unavailable and incoming. On hand is the sum of committed, unavailable and available. Only available units can be sold.

NetSuite has its own version of the same idea. A location record has a “Make Inventory Available” box. Oracle’s help on non-available inventory settings explains that clearing it keeps stock on hand but excludes it from the available count. If you use inventory statuses, a status such as “damaged” can do the same at a finer level.

The figure we push per location is usually NetSuite’s available quantity, minus safety stock, minus anything sold on Shopify but not yet in NetSuite. That last part matters. If an order is placed on Shopify at 10:01 and reaches NetSuite at 10:02, a sync that reads NetSuite at 10:01 and writes to Shopify at 10:03 would put the sold unit back on sale. The fix is to subtract Shopify orders that the integration has seen but NetSuite has not yet committed.

How do 3PLs fit into the sync?

A 3PL adds a third system with its own idea of stock. Decide early which one is the master. In most European setups we see, the 3PL reports stock to NetSuite, NetSuite stays the system of record, and Shopify reads from NetSuite only. That keeps one path and one set of rules.

The risk is timing. If the 3PL sends a stock file once a night, your Shopify figures for that location can only be as fresh as the file. Ask each 3PL three things before you design the sync: how often they send stock, whether they send absolute quantities or movements, and whether their figure already excludes picked orders. Their answers shape the buffer you need for that location.

Some brands connect a 3PL straight to Shopify through a fulfilment app. That can work, but you then have two systems writing stock to the same Shopify location. If you go this way, make sure only one of them owns quantities for that location, and let the other one read.

Where should safety stock live?

Safety stock protects you from the gap between what the systems think is on the shelf and what really is. It belongs in one place, with a clear owner, usually operations.

There are two common patterns. The first is to subtract a buffer in the integration before writing available stock to Shopify. The second is to move units into Shopify’s unavailable state, which Shopify’s own definition says can hold safety stock. We prefer the first for most NetSuite builds, because the buffer then sits next to the other stock rules and works the same for every location. Either way, store the buffer per location and per SKU group, not as one global number. A fast-moving SKU at a 3PL with nightly files needs more cover than a slow SKU in your own warehouse.

How often should NetSuite inventory sync to Shopify?

For most brands, a delta sync every 5 to 15 minutes is enough, with a full reconcile once a night. The delta job reads only items whose stock changed since the last run, using a saved search or a timestamp, and writes those levels to Shopify. The nightly job compares every SKU at every location and corrects any drift.

On the Shopify side, write quantities with the inventorySetQuantities mutation. From API version 2026-04, Shopify requires a changeFromQuantity value on each quantity. If the live figure no longer matches it, the write fails with a stale error instead of overwriting a change that happened in between. That is exactly the protection you want when orders and syncs run at the same time. Read the new figure, recalculate and retry.

How do you stop overselling at peak?

Black Friday, Singles’ Day and the January sales put the most load on the sync, just when errors cost most. We plan peak as its own mode:

  1. Raise buffers on hero SKUs a few days before, then lower them once the rush passes.
  2. Shorten the sync interval for the locations that carry peak volume, and check API usage leaves room for order traffic.
  3. Turn off “continue selling when out of stock” on items that cannot be back-ordered. Check this per product, not just in a theme setting.
  4. Watch drift, not just errors. A sync that runs without errors but leaves Shopify 40 units above NetSuite is still a problem.
  5. Freeze stock-related changes. No new locations, no mapping edits and no 3PL switches during peak weeks.

How does Shopify Markets choose which EU warehouse fulfils an order?

Shopify uses order routing rules. According to Shopify’s guide to understanding order routing, the default rules are to minimise split fulfilments, stay within the destination market and ship from the closest location. You can also rank locations yourself or use location metafields. For a brand with a Dutch warehouse and a Polish 3PL, ranking often makes more sense than distance, because cost and carrier contracts matter more than kilometres.

Shipping zones matter too. Shoppers can only buy stock held at locations that deliver to their zone. And the fulfilment location affects tax. Shopify’s reverse charge for B2B buyers depends on the fulfilment location, not the store address, so routing a French order to a UK warehouse changes the VAT outcome. Our guides to EU VAT and OSS and Shopify Markets with NetSuite OneWorld cover the tax and subsidiary side.

Once Shopify routes an order, the location must travel to NetSuite. We write it to the sales order line so NetSuite fulfils from the same warehouse. If the two disagree, stock goes negative in one place and sits idle in another.

How should returns flow back into stock?

Returned goods should not go straight back on sale. Route them to a returns location in NetSuite with “Make Inventory Available” turned off. After inspection, a transfer or status change moves good units into a sellable location, and the next sync picks them up.

On the Shopify side, be careful with the restock option on refunds and returns. If Shopify restocks a unit at the original warehouse and NetSuite receives it at a returns location, the two systems now disagree until the nightly reconcile runs. Pick one flow and apply it everywhere: either Shopify never restocks and NetSuite drives everything, or the restock location in Shopify matches the NetSuite receiving location.

What a good inventory sync looks like in practice

When we build the NetSuite to Shopify side of an integration, inventory is pushed per NetSuite location to the matching Shopify location, on a configurable schedule, with safety-stock buffers and back-order rules held as data. Every run logs what it changed. Failed writes go to a queue someone checks, not to a log file nobody reads. The full scope of what we sync is on our Shopify NetSuite integration page, and the European context is on the NetSuite Shopify integration for Europe hub.

FAQ

Can Shopify show stock from several EU warehouses as one figure?

Shoppers see the combined online quantity from all locations that fulfil online orders and deliver to their zone. Behind that, Shopify still tracks each location separately, which is why the mapping matters.

Is real-time inventory sync necessary?

Rarely. A delta every 5 to 15 minutes plus sensible buffers covers most brands. True real-time sync adds cost and API load, and it still needs a nightly reconcile.

Should the 3PL connect to Shopify or NetSuite?

Usually NetSuite, so there is one path for stock. If the 3PL must connect to Shopify, decide which system owns quantities for that location and keep the other read-only.

What causes stock drift between NetSuite and Shopify?

The usual causes are orders in flight, manual edits in Shopify, restocks on refunds, and 3PL files that arrive late. A nightly full comparison finds them, and the log shows which one it was.

If your stock figures already disagree, or you are adding a second EU warehouse, start with our free NetSuite Shopify integration assessment. We review your locations, 3PL feeds and current sync and tell you what we would change. Our team works on UTC+4, which overlaps most of the European working day.

All articlesWork with us