SKUs whose on-hand count differs between NetSuite (system of record) and commerce platform. Sync-failure detector.
At a glance
Alert table comparing NetSuite item.on_hand to commerce platform inventory.on_hand for the same SKUs. When the two diverge by more than threshold (default 5 units or 5%), the SKU is flagged. The consequence of inventory sync drift is real: the merchant either oversells (customer pays for OOS goods, refund or backorder follows) or undersells (the product looks unavailable on the website, customer goes elsewhere). The inventory-side counterpart to the revenue-gap kill shot.
| What it counts | For each SKU present in both NS and commerce: ABS(netsuite.item.on_hand - commerce.inventory.on_hand). Drift threshold: 5 units OR 5% of NS qty (whichever larger). Each row in the table is one SKU + the gap + dollar impact (drift × cost or × price depending on side). |
| VAT / tax treatment | n/a, this is an inventory-quantity comparison. |
| Shipping | n/a. |
| Discounts | n/a. |
| Refunds | n/a. |
| Cancelled / voided orders | n/a; this is an inventory-state comparison. |
| Currency | n/a for quantity; dollar impact in consolidation currency. |
| Channels / sources | NetSuite vs Shopify, BigCommerce, or Adobe Commerce, separately. Multi-platform stores compare each commerce instance to NS independently. |
| Multi-location handling | NS supports multi-location inventory; commerce platforms typically track web-allocated stock. Vortex IQ compares NS web-allocated location against commerce. Configurable. |
| Threshold | Default 5 units OR 5%. Lower to 2 units / 2% for high-value SKUs (luxury, electronics); raise to 10 units / 10% for high-volume basics where minor drift is tolerable. |
| Time window | RT (live snapshot). |
| Alert trigger | any SKU drift >5 units, driven by sentiment_key: inventory_drift. |
| Roles | owner, operations |
Calculation
Calculated automatically from your NetSuite data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
An AU electronics manufacturer / distributor on NetSuite OneWorld + Shopify Plus. Snapshot 04 May 26. Headline: 84 SKUs flagged with sync drift. Estimated overselling risk: A96,000. Top drift cases:| SKU | Description | NS on-hand | Shopify on-hand | Drift | Direction | Risk | Dollar impact |
|---|---|---|---|---|---|---|---|
| ELC-PWR-2400W | 2400W power supply | 0 | 38 | 38 | Overselling | High | A600 price) |
| ELC-CBL-USB4-2M | USB4 cable 2m | 4 | 142 | 138 | Overselling | High | A$11,040 |
| ELC-CHRG-FAST-65W | 65W fast charger | 12 | 96 | 84 | Overselling | High | A$8,400 |
| ELC-MNT-VESA-200 | VESA-200 mount | 84 | 4 | 80 | Underselling | Medium | A$6,400 lost-rev |
| ELC-CASE-CLR-PRO | Pro clear case | 60 | 8 | 52 | Underselling | Medium | A$5,200 lost-rev |
- The first three SKUs are overselling: Shopify shows stock the warehouse doesn’t actually have. ELC-PWR-2400W is the worst case: NS shows 0 on hand, Shopify shows 38 in stock. Until the next sync, every customer buying this SKU on the website is being sold a product the merchant cannot fulfil. At 8 to 12 orders per day for this SKU, the merchant is creating 8 to 12 over-sold orders per day, each requiring refund or backorder. Customer-experience disaster + finance reversal cost.
- Investigation: the NS-to-Shopify inventory push hasn’t run since 27 Apr 26 (7 days). The integration credential expired on a sub-account. NS knows it shipped 38 units of ELC-PWR-2400W during that period (warehouse posted Item Fulfilments); Shopify still shows the pre-shipment count. Action: rotate the credential, force a full inventory resync.
- The fourth and fifth SKUs are underselling. Shopify shows 4 / 8 of ELC-MNT-VESA-200 / ELC-CASE-CLR-PRO; NS shows 84 / 60. The website displays “Low Stock” or “Last Few” warnings, suppressing demand. The reverse-direction drift typically traces to a different cause: a Shopify-side adjustment (manual stock count, marketplace channel allocation) didn’t propagate back to NS. Action: NS team to investigate the manual-adjustment trail; if the goods are physically there, push the correct figure back to Shopify.
- Aggregated impact analysis:
- Overselling cases: 56 SKUs, total over-allocated quantity 1,240 units, average price A148 = A15,000 of operational cost (CS handling, refund processing, restocking from canceled SOs).
- Underselling cases: 28 SKUs, total under-allocated quantity 720 units. If 50% of demand for these SKUs is suppressed by the inaccurate “Low Stock” message: 720 × 0.5 × A100,000 of unrealised demand. Lost revenue, never recovered.
- **Total estimated impact: A800. ROI on resolution = 250x.
- The strategic insight: inventory sync drift is the inverse signal of Commerce Orders Without NetSuite SO. Both reveal commerce-NetSuite sync breaking. Where unmapped-orders shows revenue invisibility (orders happened, NS doesn’t know), inventory drift shows operational risk (NS knows the truth, customers see the lie).
Sibling cards merchants should reference together
| Card | Why pair it with Inventory Sync Drift |
|---|---|
| Commerce Orders Without NetSuite SO | The revenue-side counterpart; same root cause (broken commerce-NS sync). |
| OOS with Open SO Demand | When sync drift produces zero on-hand in NS but Shopify still says in-stock, this card surfaces the risk. |
| Total Inventory Value | The denominator dollars; drift × cost = exposed inventory value. |
| Low Stock Alerts | NS-side low-stock; combined with this card detects whether the alert is firing on accurate data. |
shopify.inventory_total | The Shopify-side total inventory dollars; reconcile to NS. |
bigcommerce.inventory_total | Same for BigCommerce. |
Reconciling against the vendor’s own dashboard
Where to look in NetSuite’s own dashboard: NetSuite has no native cross-platform inventory comparison view. Manual approach:- NS: Reports > Inventory > Inventory Stock Status for the relevant location, exported to CSV.
- Commerce platform: export inventory levels (Shopify Admin > Inventory, BigCommerce Control Panel > Products > Inventory).
- Diff manually by SKU.
| Reason | Direction | Why |
|---|---|---|
| Snapshot timestamp | Either | Inventory changes constantly; manual checks of the two sides at slightly different times will show different drift. Vortex IQ uses synchronised snapshots. |
| Multi-location aggregation | Material | NS shows per-location stock; commerce typically aggregates. The merchant must configure which NS location maps to commerce’s “available” pool. |
| Reserved / committed stock | Either | NS distinguishes “On Hand” from “Available” (subtracting committed-to-SO). Commerce may show “Available”. Vortex IQ defaults to comparing Available; configurable. |
| Bundle / kit SKUs | Material | NS bundles materialise to component SKUs; commerce typically tracks the bundle SKU directly. Drift on bundles requires bundle-component join logic. |
Known limitations / merchant FAQs
Drift on a single SKU. Should I worry? Investigate, don’t panic. Single-SKU drift can be a transient sync delay (an inbound receipt posted to NS but commerce hasn’t refreshed yet). If the same SKU shows drift for >12 hours, it’s a real issue. My drift suddenly appeared on 50+ SKUs. What just happened? Usually a sync regression: credential expiry, API rate-limit lockout, or a Shopify-side configuration change. Open the integration logs at the timestamp the drift began. Cross-reference with Commerce Orders Without NetSuite SO, if both cards show simultaneous spikes, the broken sync is the common cause. Why does NS show 0 on hand but Shopify shows 38? The most common cause: NS recorded the shipments (sales reduced inventory in NS to 0), but the inventory-update push from NS to Shopify hasn’t run since. Resolution: rotate the credential / fix the sync, then force-resync inventory. The 38 figure on Shopify will adjust to 0 within minutes. Some drift is normal because NS only updates inventory at end-of-day. Should I increase the threshold? Yes. End-of-day batch sync produces predictable mid-day drift on fast-moving SKUs. Default 5% threshold is tuned for hourly-or-better sync. For daily-batch sync, raise the threshold to 15 to 20%; the alert is meant to catch regressions, not normal end-of-day catch-up. Bundle/kit SKUs always show drift. How do I handle them? Configure the bundle definition in the Vortex IQ manifest. The integration unpacks bundles to components on NS side and matches against the bundle SKU on commerce side. Without configuration, every bundle SKU shows false drift. What is the “overselling” risk exactly? When commerce shows higher stock than NS reality, customers can place orders for goods that don’t exist. The merchant must refund (best case, ~A$15 in CS labour per refund) or backorder (worst case, customer waits 2 to 4 weeks for inbound + customer-experience hit). Either way, the order revenue is at risk. What is the “underselling” risk exactly? When commerce shows lower stock than NS reality, the website displays “Low Stock” or “Out of Stock” warnings, suppressing demand. Customers go elsewhere. The lost-revenue figure is the harder one to estimate; typical conversion-rate impact is 30 to 50% reduction on flagged-low-stock products. My multi-location NS: how does the comparison work? Configurable. The merchant designates one NS location as the “web-allocated” pool. The card compares that location to commerce. If web-allocation is across multiple NS locations, configure a sum-of-locations rule. Does this account for safety-stock buffers? Optional. Some merchants intentionally hold a buffer in NS (e.g. “100 units real, only push 90 to Shopify to keep 10 safety”). Configure the buffer rule in the manifest and the card compares (NS - buffer) to commerce. The drift dollars seem high; is the calculation right? The dollar figure is calculated asdrift × cost (for inventory value at risk) or drift × price (for revenue at risk on overselling). Configurable per card view. Default uses cost for understocking risk and price for overselling risk.
Can I auto-trigger a resync from the alert?
Yes via Ask Viq: “force inventory resync for SKU X” or “force full inventory resync”. The action posts a refresh through the integration. Requires merchant authorisation.
My OneWorld account: per-subsidiary?
Yes. Each NS subsidiary’s inventory is compared to its commerce instance independently. A multi-region distributor sees 3 separate drift tables.