Skip to main content
Card class: HeroCategory: Fulfilment & Logistics

At a glance

Live count of SKUs with zero or negative on-hand inventory across all ShipBob DCs, scoped to SKUs with measurable recent demand (no point alerting on dead-SKU stockouts). The “what is missing right now and customers want it” number for ops and merchandising.
What it countsCOUNT(DISTINCT sku WHERE SUM(on_hand_qty across all DCs) <= 0 AND demand_30d > demand_threshold). Each unique SKU counts 1, regardless of how deeply OOS or how many DCs are dry.
API endpointGET /inventory (Inventory API). Reads on_hand_quantity and available_quantity per SKU per DC; the card sums across DCs to determine network-wide OOS.
DC scopeAggregated across every DC for OOS determination. A SKU is OOS only when zero across the whole network; if Chicago has stock and Cincinnati does not, the SKU is in-stock for the merchant (multi-DC routing handles it). Per-DC view in Inventory by Warehouse.
Shipping-method scopeNot applicable, this is an inventory metric.
Inventory-split semanticsA SKU is “in stock” if any DC has it; the card counts SKUs that are zero everywhere. Single-DC stockouts (one DC dry, another full) appear in Inventory Heatmap, not here.
Perfect-order definitionStockouts at order-time block fulfilment, which fails on-time-shipping, which fails perfect-order. The OOS card is one upstream cause of the perfect-order leg.
SLA definitionNot directly applicable, but related: a SKU OOS at order-time creates an “on-hold” order until restocked, which guarantees an SLA miss. The card surfaces the at-risk SKUs before orders queue against them.
Peak-period seasonalityQ4 typically inflates OOS count by 2 to 5 times steady-state. Volume spikes outpace supply-chain lead times; viral or sale-driven SKU spikes deplete fastest-moving SKUs in days. December typically sees 5 to 15 OOS at any moment for a 200-SKU brand.
API rate limits200 requests / minute / token. Inventory API is webhook-driven via inventory.updated events; the card refreshes within seconds of stock movement.
Returns / RTOExcluded for the OOS calculation (returned items take 2 to 7 days to be re-received and re-stocked, during which they do not contribute to on-hand).
Time windowRT (real-time, computed from latest indexed inventory snapshot)
Alert triggerany OOS, the stockout_with_demand sentiment trips when ANY SKU with measurable demand goes to zero. The threshold can be adjusted (e.g. ignore SKUs with <10 sales/30D).
Rolesowner, operations, marketing

Calculation

Calculated automatically from your ShipBob 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 DTC supplements brand using ShipBob 3PL with 3 DCs and a 180-SKU catalogue. Reading taken at 09:00 ET on 12 Mar 26.
SKUTop status30D demand (units)Days since OOS network-wideNote
MAGNESIUM-500OOS in CHI, MOV, CIN1,8402 daysTop-3 SKU; replenishment ETA 9 days
ASHWAGANDHA-30CTOOS in MOV; in stock at CHI 3209200 (single-DC OOS, not in this card)Multi-DC routing handles
OMEGA-3-90CTOOS in CHI, MOV, CIN7204 daysMid-tier; replenishment ETA 14 days
VITAMIN-D3-60CTOOS in CIN; in stock at CHI 802800 (single-DC OOS, not in this card)Multi-DC routing handles
BIOTIN-90CTOOS in CHI, MOV, CIN2218 daysLong-tail SKU, low priority
PROBIOTIC-30CTOOS in CHI, MOV, CIN4801 dayMid-tier; replenishment ETA 6 days
The card reads 4 OOS SKUs (MAGNESIUM-500, OMEGA-3-90CT, BIOTIN-90CT, PROBIOTIC-30CT) network-wide. Five things to notice:
  1. Single-DC OOS is hidden by design. Ashwagandha and Vitamin D3 are out at one DC each but in stock elsewhere; ShipBob’s routing engine sends Ashwagandha orders to Chicago and Vitamin D3 orders to Chicago, so customers see “in stock” and orders ship cleanly. The card counts only network-wide OOS to surface customer-facing problems, not warehouse-floor curiosities. Pivot to Inventory Heatmap to see single-DC OOS for restocking decisions.
  2. The Magnesium-500 and Probiotic-30CT lines are the bleeding ones. Top-3 SKUs combined 30D demand is 2,320 units; with 9- and 6-day replenishment lead times, the merchant will lose roughly 110 + 95 = 205 sales over the gap (assuming demand continues at trend). At AOV 58and1.4items/order,thatisroughly58 and 1.4 items / order, that is roughly 5,500 of unrealised revenue.
  3. BIOTIN at 22 units / 30D is tagged but not urgent. The card surfaces it (network-wide OOS, demand exists) but a 22-unit SKU is not a priority. Configure a higher demand threshold (e.g. 50 units / 30D) to filter this out and reduce alert noise.
  4. Q4 inflates this card structurally. This same brand’s 5 Dec 25 reading was 12 OOS SKUs (vs steady-state 2 to 4); Black Friday and Cyber Monday volume cleared three of their top-10 SKUs in 36 hours. Read peak readings in seasonal context; pre-stock 6 to 8 weeks ahead.
  5. The card is a leading indicator for Operational Health Score. OOS feeds the inverse-stockout-severity pulse; a climbing OOS count drops the composite within hours. The card is also a leading indicator for Pending Backlog, since OOS-held orders accumulate.

Sibling cards merchants should reference together

OOS is the surface; ageing and demand work happens in supporting cards:
CardWhy pair it with Out-of-Stock ProductsWhat the combination tells you
Inventory by WarehousePer-DC stock levels.Shows whether single-DC OOS exists for SKUs in this card; informs routing-vs-restock decisions.
Stock vs DemandDemand-weighted view.Surfaces SKUs at risk of going OOS in 7 to 14 days (early warning), not just those already gone.
Inventory HeatmapDC-by-SKU stock matrix.Visual identification of single-DC OOS that the headline OOS count hides.
Inventory AgeingTime-in-stock per SKU.Old inventory signals over-buying; OOS signals under-buying. Pair to right-size purchase orders.
Operational Health ScoreComposite that includes inverse-stockout-severity.OOS climb drops the composite within hours; the relationship is direct.
Pending Fulfilment BacklogOOS-held orders accumulate in backlog.Climbing OOS predicts climbing on-hold orders within hours.
Cross-connector: shopify.unfulfilled_ordersCustomer-side OOS impact.OOS at ShipBob causes Shopify orders to either be PARTIALLY_FULFILLED or held; correlated metric.
Cross-connector: shopify.refund_rateDownstream impact at 7 to 14 days.Sustained OOS drives customer-cancel-and-refund.
Cross-connector: customer NPS surveysDownstream sentiment, lag 14 to 30 days.Customers complain loudly about OOS in surveys; correlates with sustained OOS readings.

Reconciling against the vendor’s own dashboard

Where to look in ShipBob Merchant Portal: ShipBob Merchant PortalInventory → Stock Status → Filter “Out of Stock”. The portal shows per-SKU per-DC inventory levels with on-hand, reserved, available quantities. The closest like-for-like view is “Out of Stock at All DCs”. Why our number may legitimately differ from ShipBob’s portal:
ReasonDirectionWhy
Timezone (UTC default)NegligibleReal-time card; timezone affects only the demand-window denominator, not the OOS calculation itself.
DC-level vs aggregated reportingAggregated by definitionThe card counts network-wide OOS only; portal can show per-DC OOS. Numbers diverge by definition.
SLA definition variance (demand-threshold filter)EitherThe card filters by recent demand (default >5 sales / 30D); portal shows all OOS. Brands with long-tail SKUs see lower numbers in the card.
Peak-period batch-processing delaysOurs lower brieflyInventory webhook lag of 1 to 5 minutes during normal operation; up to 30 minutes during BFCM. T-1-hour fully reconciles.
Reserved stock treatmentEitherPortal sometimes counts “reserved for in-flight orders” as in-stock; the card uses available_quantity (on-hand minus reserved) by default. Configurable.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
shopify.unfulfilled_ordersOOS-held orders flow into Shopify unfulfilled. ShipBob lag of 2 to 6 hours.Shopify orders for OOS SKUs may be allowed at checkout (continue-selling-when-OOS toggle), creating Shopify unfulfilled count without ShipBob being able to ship.
Shopify product inventoryStorefront catalogue.Shopify product inventory counts are typically synced from ShipBob; differences indicate sync lag or in-flight reservations.
Amazon FBA OOSPeer 3PL with its own inventory. Independent population.Different SKUs allocated to FBA vs ShipBob; not reconciled.
Customer NPS / out-of-stock complaintsDownstream sentiment, lag 14 to 30 days.Survey response bias; complaints peak when sustained OOS exceeds 7 to 14 days on top-tier SKUs.

Known limitations / merchant FAQs

ShipBob vs FBA, can I see OOS across both? Each 3PL holds its own inventory pool; the SKUs allocated to FBA are not visible to ShipBob and vice-versa. Track each separately. The all-up “what is OOS in my catalogue” view sits in Shopify’s product inventory, which usually reconciles from both sources but with sync lag. How does ShipBob choose which DC to deplete first? The router picks the closest DC with stock. If Chicago has 100 units and Cincinnati has 200, Chicago depletes first for Chicago-area orders. Different SKUs deplete at different rates per DC; the Inventory Heatmap shows the matrix. SLA-vs-carrier-tracking discrepancy, why does OOS make late deliveries worse? A SKU OOS at order-time creates an “on-hold” order. The order waits for restock (days to weeks), then ships when stock arrives. Customer expectation set in checkout was 3 to 5 days; actual delivery may be 14+ days. This guarantees an SLA miss and a likely return-and-cancel. Perfect-order rate vs OOS, what is the relationship? Stockouts at order-time block fulfilment, which fails on-time-shipping (one perfect-order leg) and often cascades to late delivery (another leg) and customer cancellation (a return-leg miss). OOS is the upstream cause; perfect-order is the downstream consequence. How do I plan for Q4 / BFCM peak using OOS? Three actions. (1) Pre-stock 6 to 8 weeks before BFCM with 1.5 to 2 times normal levels for top-20 SKUs. (2) Set the demand-threshold filter to surface only top-tier SKUs (e.g. >50 sales / 30D) during peak to focus attention. (3) Set the alert threshold tighter on top-3 SKUs and looser on long-tail to reduce alert fatigue. Multi-DC inventory split optimisation, how does OOS guide it? This card surfaces network-wide OOS; the Inventory Heatmap shows single-DC OOS. If one DC consistently runs dry on the same SKU while another holds excess, your inventory split is mis-aligned with customer geography. Re-allocate per the portal’s “Inventory Distribution” recommendations. Returns, do they immediately re-add to OOS? No, with lag. A return takes 2 to 7 days from received-at-DC to be inspected, re-stocked, and counted as available inventory. During that window, the SKU appears OOS even though physical units exist on the DC floor. Pivot to Return Processing Time. Why does ShipBob show OOS but Shopify still allows the order? Shopify’s “continue selling when out of stock” toggle. If enabled, customers can place orders for OOS SKUs; the order arrives at ShipBob and is held until restock. This is intentional for backorder workflows but causes confusion if not communicated to customers in checkout. Why does the count flicker between values within an hour? Inventory updates are webhook-driven; each shipment-out and return-in fires an event. A 200-SKU brand can see 5 to 15 inventory events per minute during peak. The count flickers as SKUs cross the OOS boundary back and forth on individual unit movements. The 30-minute rolling average is more useful for monitoring than the live count.

Tracked live in Vortex IQ Nerve Centre

Out-of-Stock Products is one of hundreds of KPI pulses Vortex IQ tracks across ShipBob and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.