Skip to main content
Card class: Non-HeroCategory: Ecommerce Platform
Anomalous OOS spike, usually a misconfigured sync, hold, or sudden demand event. Pair with the cross-channel ad-spend card.

At a glance

Real-time anomaly alert: the OOS variant count has jumped more than 2 standard deviations above its 30-day baseline. Catches misconfigured-sync events, accidental holds, and sudden viral-demand spikes before customer-service queues fill.
What it countscurrent_oos_count > mean(oos_count_30D) + 2 * stddev(oos_count_30D) evaluated every 5 minutes. The alert is binary (firing / not); the count itself comes from Products with Zero/Negative Stock.
VAT / tax treatmentNot applicable, count metric.
ShippingNot applicable.
DiscountsNot applicable; OOS is independent of pricing state.
RefundsNot applicable directly; restocked refunds may move variants OFF the OOS list.
Cancelled / voided ordersCancellations with restock=true return inventory and may reduce the count.
CurrencyNot applicable (count of variants).
Channels / sourcesInventory is store-wide; channels don’t filter the count. POS sales drain inventory the same as online sales.
Time windowRT (real-time, 5-min poll cadence)
Alert triggerOOS variant count up >2σ vs 30D baseline. Configurable.
Sentiment keyout_of_stock_count
Rolesowner, operations, marketing

Calculation

Calculated automatically from your Shopify 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 apparel DTC brand on Shopify Plus, ~3,200 active variants, 30D baseline OOS count = 22 (σ = 6). Tuesday 06 May 26, 09:00 PT, the alert fires: OOS count = 87. That’s 65 above mean, ~10σ above baseline. Drill-down by product family reveals:
Product familyOOS variants 06 MayNormal levelNote
Linen tee SS26 (5 sizes × 6 colours)282-3Spring drop momentum, expected
Wide-leg trouser (5 sizes × 4 colours)141-2Same drop, expected
Bucket hat (3 sizes × 2 colours)60Same drop
Core basics (40+ variants)182-3UNEXPECTED
Accessories (small)31Normal
Last-season clearance1814Trickle, normal
Six things to notice:
  1. The expected spike (drop launch) was within tolerance. Linen + trouser + bucket hat drop on 04 May, OOS rising over 48 hours is the signature; the brand should have absorbed it via reorder POs already placed.
  2. The unexpected spike is in core basics. 18 core-basic variants OOS is 6× normal. This isn’t a launch event; something broke. Check 1: did inventory sync from the warehouse stop? Check 2: did the cycle count get re-imported with stale data?
  3. The cause was a 3PL sync glitch. Investigation reveals the warehouse barcode-scanner system pushed stale “0” counts for 18 SKUs to Shopify at 03:00 PT. The actual physical inventory is fine; this is a data fault.
  4. Customer impact is live. Every minute these 18 SKUs show as OOS, the storefront blocks orders. Estimate: 18 SKUs × ~4 orders/SKU/hour normal velocity = 72 orders blocked. Cross-reference Active Ads on OOS, every Google Ads click on these 18 SKUs is wasted CPC right now.
  5. The fix is fast. Manually re-publish inventory levels from the WMS to Shopify; SKUs typically come back in stock within 5-10 minutes. Then run a full reconciliation.
  6. Document the lesson. A 03:00 cron job hit a corrupt CSV; review the WMS-to-Shopify sync pipeline for resilience. Add a sanity check (refuse imports where >10 SKUs go to zero in one batch).

Sibling cards merchants should reference together

The OOS-spike alert is the trigger. The investigative companions:
CardWhy pair it with this alert
Products with Zero/Negative StockThe underlying count this alert watches. Drill-down to see the SKU list.
Active Ads on OOS SKUsThe cross-channel companion: ads still serving on now-OOS SKUs. Pause first, fix second.
Top Products by RevenueWhich OOS variants are top revenue? That subset is the urgent one.
Stock vs Sales VelocityPredicts which non-OOS variants are heading toward stockout next.
Inventory DistributionThe fat-tail view; helps distinguish chronic low-stock SKUs from acute breakages.
Fulfillment RateThe lagging consequence: persistent OOS drives fulfilment-rate decline in 3-7 days.
Refund RateWhen OOS drives partial fulfilment or oversells, refunds spike.

Reconciling against the vendor’s own dashboard

Where to look in Shopify Admin: Shopify doesn’t expose a dedicated OOS-spike alert. The closest reconstructions:
  • Products → Inventory with filter Available: 0 or less and Status: Active: gives the current OOS count. Comparing that to your typical baseline (you’ll have to remember it) gives the “is this a spike?” answer.
  • Home → Notifications: low-stock notifications, but at a per-SKU level, not aggregate.
  • Apps like Stocky / Inventory Planner: typically expose stockout-risk and forecasting; alert profiles vary.
Why our number may legitimately differ from a manual check:
ReasonDirectionWhy
Baseline definitionEitherVortex IQ uses 30D rolling mean and σ; manual checks may use a static “what looked normal last month” reference. The numbers differ.
Sync lagEitherInventory webhooks fire within seconds; OpenSearch index can lag 5-15 min during heavy write periods. Manual Shopify Admin check sees latest within seconds.
Multi-location aggregationSame approachBoth we and Shopify aggregate Available across active locations by default.
Active filterSame approachBoth filter to status = ACTIVE.
Continue-selling-when-OOSNo effectVariants set to Continue selling when out of stock still appear OOS in both views; the setting changes whether sales are blocked, not the OOS state.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
amazon_ads.amazon_oos_skusIndependent inventory truthA spike here may not appear on Amazon if Amazon inventory is independent or sync-managed differently.
google_ads.google_oos_keywordsLaggingGoogle Ads detects OOS landing pages 30-90 min later via crawler. Use this card as the leading indicator.

Known limitations / merchant FAQs

Why does the alert fire when I just launched a new collection? Launches naturally spike OOS as customers buy through inventory. The 2σ threshold is generic; for known launch days, either:
  1. Pre-emptively raise the threshold for that 48-72h window via the Nerve Centre → Alerts → Suppress feature.
  2. Accept the false-positive and treat it as a “drop is going well” signal rather than an incident.
My catalogue is large (>5,000 variants) and OOS shifts daily. Is this useful? Yes, but tune the threshold. Large catalogues have higher absolute baselines and higher σ. The 2σ multiplier still works, but very-large catalogues might prefer 2.5σ or 3σ to filter noise. Also worth filtering OOS to active product type != clearance, since clearance OOS is intentional. Why didn’t the alert fire when my key SKU went OOS? A single SKU OOS rarely moves the aggregate count enough to trigger 2σ. The alert is for aggregate anomalies; for single-SKU coverage, use Top Products by Revenue with Products with Zero/Negative Stock to set per-SKU watch lists. The alert is firing because I deliberately ran down clearance inventory. Is that OK? Yes, expected. Clearance liquidation produces a “clean” OOS count rise. Either suppress alerts during planned liquidation windows or filter clearance from the baseline calculation. How fast does the alert fire after a sync glitch? Within 5-10 minutes typically (the poll cadence is 5 min, plus index lag of 1-3 min). For a typical 03:00 cron-driven failure, the alert lands by 03:10-03:15. Configure paging escalation to your ops on-call. Does negative stock count toward the spike? Yes. Negative stock is part of the underlying OOS count. A spike driven by negative-stock variants (oversells) is more urgent than a zero-stock spike, because each new order on a negative-stock SKU deepens the customer-promise gap. My subscription store, do recurring billings cause spikes? Possible but rare. Subscription billings draw from inventory if the SKU is physical. A monthly billing day can drain low-stock SKUs concurrently and trip the alert. To avoid, either pre-allocate subscription inventory or schedule billing on dates after expected reorder arrivals. Why does the alert fire on Mondays even when nothing’s wrong? Weekend sales drain inventory without intra-period reorder. Monday morning often has the highest OOS count of the week. The 30D baseline absorbs this somewhat, but Monday spikes can still cross 2σ on busy weeks. Acceptable false-positive frequency: 1-2/month. If higher, raise the threshold. Can the alert miss a real OOS event? Yes, if:
  1. The OOS rise is gradual over many days (the daily delta is below 2σ even though cumulative OOS is high). Use the underlying count card alongside.
  2. The OOS rise is on a per-SKU basis but the count aggregate is unchanged because other SKUs restocked simultaneously.
For comprehensive coverage, pair this alert with Stock vs Sales Velocity to catch slow-burn stockouts. Action playbook when this alerts:
  1. Open the OOS list sorted by velocity (units sold last 30 days desc).
  2. Identify the cause cluster: is it concentrated on one product family, one location, one batch? Pattern usually reveals cause.
  3. Distinguish data-fault vs real OOS: if 10+ SKUs went to zero simultaneously, it’s almost always a sync fault, not real demand. Verify via WMS / 3PL.
  4. For real demand: place emergency reorder on top-velocity OOS SKUs; pause ads on OOS variants.
  5. For data fault: re-sync inventory from source; investigate the cron / pipeline that introduced the fault.
  6. Document and prevent in your ops runbook.

Tracked live in Vortex IQ Nerve Centre

OOS Spike Alert is one of hundreds of KPI pulses Vortex IQ tracks across Shopify 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.