Items with open Sales Order demand but zero on-hand. The morning purchasing queue, ranked by SO value.
At a glance
Alert table: SKUs with at least one open Sales Order line item demanding the SKU AND zero on-hand inventory. The morning purchasing queue, ranked by SO value. Each row is a SKU + the count and dollar value of open SOs that need it + days-since-last-receipt + estimated days-to-next-inbound. The Operations Director’s daily fire-drill list. Distinct from a regular OOS report because it filters to “OOS that costs me money RIGHT NOW” rather than “any SKU with zero stock”.
| What it counts | SKU WHERE netsuite.item.on_hand = 0 AND EXISTS open SO line item AND open SO not yet ship-blocked-overridden. Each row is one SKU; columns: # open SOs blocked, total SO value blocked, oldest SO date, last-inbound date, expected-next-inbound date. |
| VAT / tax treatment | n/a, this is an inventory-and-demand intersection. SO value is gross (matches NS total). |
| Shipping | Included in SO value. |
| Discounts | Already deducted in SO value. |
| Refunds | n/a. |
| Cancelled / voided orders | Excluded from open SO list. |
| Currency | Per-SO in transaction currency, summed in consolidation. |
| Channels / sources | All sources blended; the SO blocking is by inventory regardless of how the SO was created. |
| Time window | RT |
| Alert trigger | any high-value SO blocked (default >$5,000 single SO; configurable). |
| Roles | owner, operations, purchasing |
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
A US wholesale distributor on NetSuite OneWorld. Snapshot Tuesday 05 May 26, 09:00 EST. Headline: 24 SKUs with zero on-hand AND open SO demand. Total open SO value blocked: $384,000. Top blocked SKUs:| SKU | Description | NS on-hand | Open SOs # | Open SO value | Oldest SO age | Last receipt | Expected inbound |
|---|---|---|---|---|---|---|---|
| FAST-A325-1/2x4 | A325 1/2x4 bolts | 0 | 18 | $84,000 | 14 days | 22 Apr 26 | 12 May 26 (PO_84412) |
| FAST-SS316-M10x40 | SS316 M10 bolt | 0 | 24 | $62,400 | 9 days | 18 Apr 26 | 18 May 26 (PO_84520) |
| ANCH-WSL-3/8 | Wedge anchor 3/8 | 0 | 32 | $48,200 | 5 days | 27 Apr 26 | 09 May 26 (PO_84481) |
| FAST-NUT-FLG-1/2 | Flange nut 1/2 | 0 | 14 | $32,800 | 11 days | 24 Apr 26 | 14 May 26 (PO_84455) |
| FAST-WASH-LK-3/4 | Lock washer 3/4 | 0 | 12 | $28,200 | 7 days | 30 Apr 26 | None scheduled |
- FAST-A325-1/2x4 is the priority. $84,000 of SOs waiting, oldest 14 days. Inbound expected 12 May 26 (8 days away) on PO_84412. Action: confirm PO_84412 status with the supplier today; if at risk, expedite or split-ship. Customers waiting 14 days on a Net-30 order are at risk of cancelling.
- FAST-WASH-LK-3/4 has no scheduled inbound. $28,200 of SOs blocked with no PO in the system. Action: emergency PO creation today. The 7-day-old SOs cannot wait the typical 21-day procurement-and-shipping cycle without customer escalation. Consider air-freight or a competitor-supplier sourcing.
- ANCH-WSL-3/8: 32 SOs waiting, $48,200, oldest 5 days. Inbound 09 May 26 (4 days). Less urgent; the inbound will likely clear it. Confirm receiving-team is staffed for the inbound day.
- The aggregate impact:
- 24 SKUs with 6.35m total from Open SO Value).
- Each day each SO sits unfulfilled adds 1 day to that customer’s SO to Invoice Lead Time, which in turn lifts DSO.
- Cancellations of these SOs contribute to refund volume and customer-churn risk.
- Cross-reference OOS with Active Ad Spend, the dual problem. Some of these blocked SKUs may simultaneously be promoted on Google Ads or Amazon Ads, where the merchant pays for clicks that land on out-of-stock product pages. Double leakage.
- Cross-reference Inventory Sync Drift: if NS shows zero but Shopify shows in-stock, the merchant is overselling on the website while warehouse is empty. Both cards firing on the same SKU = customer-experience disaster.
- Daily 9am review of this card.
- Top-3 SKUs by blocked SO value get immediate supplier calls.
- SKUs without a scheduled inbound get emergency POs same-day.
- Track the count and total over time; falling = system working, rising = either demand surged or procurement fell behind.
Sibling cards merchants should reference together
| Card | Why pair it with OOS with Open SO Demand |
|---|---|
| Low Stock Alerts | The leading indicator; SKUs heading to zero. |
| Inventory Sync Drift | If NS shows zero but commerce shows in-stock, double trouble. |
| Dead Stock with Active Ad Spend | The mirror leak: stock with no demand vs demand with no stock. |
| SOs Blocked on Inventory or Credit | The order-side view of the same problem. |
| Open Sales Orders | The pipeline; OOS-blocked SOs are the stuck subset. |
| Inventory Aging | The negative correlate: while these SKUs are out of stock, others sit on the shelf. |
Reconciling against the vendor’s own dashboard
Where to look in NetSuite’s own dashboard: NetSuite’s Demand Planning module exposes a similar view via Reports > Inventory > Inventory Demand Plan, but only for merchants on the Demand Planning paid edition. Without it, the merchant must build a saved search:- Saved Search: Item, criteria
Quantity Available <= 0 AND Open Sales Order Quantity > 0. Columns: Item, Open SO Qty, Open SO Value, Last Receipt, Next Expected Receipt.
| Reason | Direction | Why |
|---|---|---|
| Quantity Available vs On Hand | Material | NS distinguishes “On Hand” from “Available” (subtracting committed-to-other-SO). Vortex IQ uses Available by default. |
| Multi-location | Material | A merchant with multiple warehouses may have stock at warehouse B for a SKU that shows zero at warehouse A. Configure the location-priority rule. |
| Drop-ship vs Stock | Either | Drop-ship SKUs (sourced from supplier on demand) shouldn’t appear here; their on-hand is permanently zero by design. Filter via the dropshipitem flag. |
| Special order items | Either | Custom-spec items have zero stock by design; filter or exclude from the alert. |
| Card | Expected relationship | Notes |
|---|---|---|
shopify.oos_count | Should approximately match for SKUs sold via Shopify | Differences indicate inventory sync drift; cross-reference Inventory Sync Drift. |
google_ads.oos_landing_pages | The ad-spend-on-OOS-product subset | Cross-references via SKU + URL. |