> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Stock vs Sales Velocity, Shopify

> Days-of-cover per SKU = on-hand / 30D velocity. Surfaces stockout risk before it bites. How to read it, why it matters, and how to act on it.

**Metrics type:** [Supporting Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

> Days-of-cover per SKU = on-hand / 30D velocity. Surfaces stockout risk before it bites.

## At a glance

> Per-SKU days-of-cover, computed as `Available ÷ avg_units_sold_per_day_30D`. The forecasting view of inventory: which variants will OOS in 5 days, 14 days, 30 days, given current velocity?

|                               |                                                                                                                                                                                                            |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**            | For each active variant: `totalInventory ÷ (units_sold_30D ÷ 30)`. Variants with zero sales in 30D are excluded (no velocity = undefined cover). The card surfaces a sortable list bucketed by cover-band. |
| **VAT / tax treatment**       | Not applicable, count metric.                                                                                                                                                                              |
| **Shipping**                  | Not applicable.                                                                                                                                                                                            |
| **Discounts**                 | Not applicable.                                                                                                                                                                                            |
| **Refunds**                   | Sales numerator includes refunded units (the velocity reflects gross demand, not net). For net-velocity, subtract refunded units; on the roadmap.                                                          |
| **Cancelled / voided orders** | Excluded from velocity if Shopify removed them. Included if still in index.                                                                                                                                |
| **Currency**                  | Not applicable.                                                                                                                                                                                            |
| **Channels / sources**        | All channels contribute to velocity. POS draws same as online.                                                                                                                                             |
| **Time window**               | `30D` velocity window; cover figure is real-time given current stock                                                                                                                                       |
| **Alert trigger**             | None directly; pair with workspace thresholds (e.g. "alert if any SKU in top-50 has \<14 days cover").                                                                                                     |
| **Roles**                     | owner, operations                                                                                                                                                                                          |

## 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, \~1,800 active variants. 30D window 12 Apr 26 to 12 May 26.

Top-by-velocity variants:

| Variant                     | On-hand | 30D units sold | Days cover | Bucket               |
| --------------------------- | ------- | -------------- | ---------- | -------------------- |
| Linen tee, Sand, M          | 8       | 240            | 1.0        | **Critical (≤7d)**   |
| Linen tee, Sand, L          | 32      | 220            | 4.4        | **Critical (≤7d)**   |
| Wide-leg trouser, Black, 10 | 56      | 180            | 9.3        | At risk (8-14d)      |
| Linen tee, White, M         | 102     | 195            | 15.7       | Comfortable (15-30d) |
| Bucket hat, Olive, OS       | 18      | 35             | 15.4       | Comfortable (15-30d) |
| Wide-leg trouser, Cream, 12 | 240     | 90             | 80.0       | Surplus (>60d)       |
| Linen tee, Black, S         | 480     | 30             | 480        | Surplus, slow-mover  |

Six things to notice:

1. **Sand M is the urgent fire.** 1.0 day cover; OOS imminent. PO arrival or stock transfer needed today. Cross-reference [Inventory Alerts](/nerve-centre/kpi-cards/shopify/products-with-zero-negative-stock) for the live OOS list including this SKU within hours.
2. **Sand L is on borrowed time.** 4.4 days cover at current velocity. Standard reorder lead time is typically 14-21 days; this SKU will OOS before reorder arrives unless emergency stock transfer is arranged.
3. **The "at risk" bucket is the planning-priority list.** 9.3 days cover means OOS in \~10 days; with normal lead times, the action window closes today. This is where ops attention should focus.
4. **Surplus on Cream 12 is signal.** 80 days cover at 90 units/30D means demand is asymmetric across colour-size combinations. Cream 12 is a slow-mover; allocate fewer units in next PO cycle.
5. **Linen tee Black S has 480 days cover.** Either over-ordered (capital tied up) or genuinely a slow-mover that should be marked-down or de-listed. Pair with margin-per-unit to decide clearance vs hold.
6. **Velocity assumes recent demand continues.** Marketing pushes, viral moments, or seasonal peaks invalidate the assumption. Sand M's 240 units/30D could collapse to 80 next month if the marketing wave passes; cover would extend to \~3 days from a single day. Pair with marketing calendar to forecast better.

## Sibling cards merchants should reference together

Stock vs Sales velocity is the forecasting cousin. Companions:

| Card                                                                                                   | Why pair it with Stock vs Sales                                                                  |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
| [Products with Zero/Negative Stock](/nerve-centre/kpi-cards/shopify/products-with-zero-negative-stock) | The OOS list. This card predicts which non-OOS variants will fall onto that list next.           |
| [Inventory Distribution](/nerve-centre/kpi-cards/shopify/inventory-distribution)                       | The aggregate band view; this card is the per-SKU detail.                                        |
| [OOS Spike Alert](/nerve-centre/kpi-cards/shopify/oos-spike-alert)                                     | The acute-event alert. Stock-vs-sales is the steady forecasting view.                            |
| [Top SKUs](/nerve-centre/kpi-cards/shopify/top-skus)                                                   | Velocity drill-down by SKU; primary input to this card.                                          |
| [Top Products by Revenue](/nerve-centre/kpi-cards/shopify/top-products-by-revenue)                     | The £-weighted velocity. A high-velocity SKU might not be top-revenue if it's a low-margin item. |
| [Bottom Products](/nerve-centre/kpi-cards/shopify/slow-moving-products)                                | The slow-mover list; surplus-cover variants.                                                     |
| [Fulfillment Rate](/nerve-centre/kpi-cards/shopify/fulfillment-rate)                                   | Persistent low-cover on top SKUs eventually drags fulfilment rate.                               |

## Reconciling against the vendor's own dashboard

**Where to look in Shopify Admin:**

Shopify doesn't expose days-of-cover natively. Closest reconstructions:

* **Reports → Inventory → Sell-through rate**: shows what % of stock sold in a period; mathematically related but not days-of-cover.
* **Apps like Stocky / Inventory Planner / Cogsy**: typically expose days-of-cover and reorder forecasting.
* **Reports → ABC analysis** (Shopify Plus): SKU-velocity classification (A = top, B = middle, C = slow).

**Why our number may legitimately differ from a Stocky / Inventory-Planner reconstruction:**

| Reason                  | Direction              | Why                                                                                                                                             |
| ----------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| **Velocity window**     | Either                 | We use 30D; Stocky may default to 14D or 60D. Different windows produce different velocity figures. Configurable in *Nerve Centre → Inventory*. |
| **Lead-time inclusion** | They include, we don't | Stocky often subtracts vendor lead time from days-cover to give "days until OOS net of incoming". This card is gross days-cover.                |
| **Trend smoothing**     | Different methods      | We use simple-mean velocity; advanced apps may use exponential weighting or seasonality adjustment.                                             |
| **Multi-location**      | Aggregate              | We sum across active locations; some apps split per-location.                                                                                   |
| **Sync lag**            | Either                 | Inventory updates can lag 5-15 min during heavy write periods.                                                                                  |

**Cross-connector reconciliation:**

| Card                                                                                       | Expected relationship      | What causes legitimate divergence                                                     |
| ------------------------------------------------------------------------------------------ | -------------------------- | ------------------------------------------------------------------------------------- |
| 3PL / WMS forecasting reports                                                              | Should align directionally | 3PL forecasts often include lead-time and PO-arrival data which this card doesn't.    |
| [`amazon_sp.amazon_inventory_velocity`](/nerve-centre/amazon_sp/amazon_inventory_velocity) | Independent                | Amazon and Shopify are separate inventory pools unless multi-channel sync is enabled. |

***

<details>
  <summary><em>Documentation cross-reference (for agencies running multiple platforms)</em></summary>

  * [`bigcommerce.shp_stock_vs_sales`](/nerve-centre/bigcommerce/shp_stock_vs_sales)
  * [`adobe_commerce.shp_stock_vs_sales`](/nerve-centre/adobe_commerce/shp_stock_vs_sales)
</details>

## Known limitations / merchant FAQs

**What's a healthy days-of-cover target?**
Depends on your reorder cadence and lead time:

* **Fashion DTC with 21-30 day lead times**: target 30-45 days cover on top-velocity SKUs.
* **Subscription consumables with 14-day fulfilment cycles**: target 21-30 days cover.
* **Slow-fashion with 60-90 day lead times**: target 60-120 days cover.
* **Fast-fashion with 7-14 day reorder**: 14-30 days suffices.

The right number is "lead time + safety stock + planned promo bumps". A SKU at 14 days cover when lead time is 21 days will OOS regardless of urgency.

**Why are some variants excluded from the chart?**
Variants with zero sales in 30D have undefined velocity (cover = stock / 0 = infinity). The card excludes them. To see slow-movers, look at [Bottom Products](/nerve-centre/kpi-cards/shopify/slow-moving-products) or [Inventory Distribution](/nerve-centre/kpi-cards/shopify/inventory-distribution) Surplus band.

**My new launch SKU shows infinite cover. Why?**
Same reason: zero historical sales pre-launch. Once 7-14 days of post-launch sales exist, velocity becomes meaningful. New launches need separate forecasting (typically based on similar past launches, not current data).

**Why does seasonality break this card?**
The 30D velocity is naive about seasonality. A Christmas-decorations SKU showing 14 days cover in November is a fire (demand surge incoming); the same SKU showing 14 days in February is fine (off-season). Pair with category-specific seasonality calendars.

**Can I customise the cover bands?**
Yes, in *Nerve Centre → Inventory*. Defaults are ≤7d / 8-14d / 15-30d / 31-60d / >60d. Long-lead-time categories should widen them (≤14d / 15-30d / 31-60d / 61-120d / >120d).

**My multi-location store, does cover account for distribution?**
The card sums Available across active locations and uses store-wide velocity. A SKU with 100 units in London but 0 in Manchester shows healthy cover, but if Manchester customers can't reach London inventory (no inter-location transfer), the practical cover for Manchester customers is 0. Per-location cover is on the roadmap; for now, plan transfers manually.

**Does promotional velocity distort the cover figure?**
Yes. A SKU with normal velocity 5/day that sold 50/day during a promo week will show "10/day" 30D average, overstating future depletion. Pair with promotional calendar to discount transient promo-driven velocity.

**My subscription SKUs, are they handled correctly?**
Subscription billings draw from inventory like one-off orders. The 30D velocity reflects subscriber+one-off blended demand. For pure subscription forecasting, segment subscriber-only velocity from your subscription tool's reports.

**Action playbook for using this card:**

1. **Daily ops**: scan the Critical (≤7d) bucket. Reorder or transfer immediately.
2. **Weekly planning**: scan At Risk (8-14d) bucket. Confirm POs are in flight; chase suppliers if not.
3. **Monthly review**: scan Surplus (>60d) bucket. Decide markdown, clearance, or de-list.
4. **Quarterly forecasting**: review velocity-by-SKU trends; tighten PO models for chronic over-orders or under-orders.
5. **Lead-time review**: if Critical bucket is regularly populated, lead times are too long for your safety stock policy. Either widen safety stock or shorten lead times.
6. **Cross-reference with paid media**: pause Google Ads / Meta on Critical-bucket SKUs, see [Active Ads on OOS](/nerve-centre/kpi-cards/shopify/active-ads-on-out-of-stock-skus).

***

### Tracked live in Vortex IQ Nerve Centre

*Stock vs Sales Velocity* 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](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
