StrategyInventoryFlowOps9 min read

Shopify inventory health score: use days of cover to prevent stockouts

How to build a practical Shopify inventory health score from days of cover, stockout risk, overstock, and aging — so multi-location stores know what to transfer before sales are lost.

Jeshua Leger

Founder, Leger Studio ·

Unit counts lie. A warehouse can show 400 units of a hoodie and still be three days from a stockout if that door sells 120 a day — while a retail location holding 80 of the same SKU can look “low” when it actually has six weeks of cover. If your ops review still sorts by on-hand quantity, you are optimizing the wrong number.

An inventory health score fixes that by collapsing stockout risk, overstock, balance across locations, and aging into one readable signal — with days of cover as the backbone. This guide shows how merchants can compute that score from Shopify data, use it in a weekly ritual, and connect it to real transfers without turning automation loose on day one.

Note: Leger Studio is building FlowOps around this model: a live multi-location matrix, days-of-cover reasoning, and an Inventory Health Score you can click into. FlowOps is in development — not live on the App Store yet — so treat the framework below as something you can run manually today, then follow the FlowOps page for launch updates.

Why on-hand quantity is a bad health metric

Shopify already gives you on hand, committed, and available per location. Those fields answer “how many can I sell right now?” They do not answer “how long will this last?” or “is this SKU healthy relative to how it sells here?”

  • A slow SKU with 50 units can be overstocked; a fast SKU with 50 units can be an emergency.
  • Company-wide totals hide a stockout at the only location that fulfills DTC while retail looks fine.
  • Incoming POs change the story — ignoring them creates panic transfers that arrive the same day freight does.
  • Aging inventory can look “healthy” on cover if velocity collapsed; the units are still cash trapped on a shelf.

Health is relative to demand, time, and place. Days of cover is the simplest translation from raw stock into an operational decision.

Days of cover: the number every location review needs

For each variant at each location:

  1. Pick a velocity window — typically units sold in the last 7, 30, and 90 days at that location (not store-wide).
  2. Convert to daily velocity: window units ÷ days in the window. Many teams weight 7-day for urgency and 30-day for baseline.
  3. Cover days = (available + incoming) ÷ daily velocity when velocity > 0.
  4. Flag zero-velocity SKUs separately — cover is infinite on paper and useless as a transfer signal.

Example: Location A has 90 available, 30 incoming, and sells 12/day → cover ≈ 10 days. Location B has 40 available, no incoming, and sells 1/day → cover ≈ 40 days. Sorting by on-hand would prioritize moving stock into B. Cover says the opposite: A is the risk.

Tip: Write your cover targets down. A common starting band: under 10 days = risk, 14–35 days = healthy, over 45–60 days = surplus candidate (tune by category lead time and replenishment cadence).

Build an inventory health score from four components

A single score is only useful if every component is auditable. Keep the math boring enough that a store manager can disagree with an input — not a black box.

1. Stockout risk

Score how far cover sits below your minimum. A location at 3 days of cover on a top seller should dominate the agenda over a mid-tail SKU at 9 days. Weight by revenue or unit velocity so the score reflects commercial damage, not SKU count.

2. Overstock / surplus

Score how far cover sits above your surplus ceiling, optionally capped so one dead SKU cannot tank the whole catalog view. Surplus matters because it is the fuel for transfers — without a donor location, stockout risk has nowhere to pull from.

3. Balance across locations

For each SKU, compare cover across locations that share a fulfillment role. High imbalance (one location under target while another is far above) is the classic transfer opportunity. Balanced poverty — every location short — is a purchase-order problem, not a transfer problem.

4. Inventory age

Track how long units have sat with weak sell-through. Aging catches the failure mode where cover looks fine because demand died. Those units still need a plan: markdown, bundle into a kit, or stop replenishing the wrong door.

Combine the four into 0–100 (or 0–10) with explicit weights. A practical default for multi-location ecommerce + retail: 40% stockout risk, 25% balance, 20% overstock, 15% age. Publish the weights so ops and finance argue about policy, not spreadsheet formulas.

Important: Do not hide the components behind the rollup. If the score drops, you should be able to click (or filter) into “which SKUs, which locations, which component moved.” Otherwise nobody trusts the number after the first false alarm.

A weekly ritual that turns the score into action

Scores that nobody reviews are dashboards for comfort. Tie the number to a cadence your warehouse can staff.

  1. Monday: refresh location × variant cover for your top sellers (start with the SKUs that drive most units or revenue).
  2. Sort the risk component: anything under your cover floor with meaningful velocity.
  3. For each risk SKU, look for a surplus donor at a location allowed to ship to the short site.
  4. Propose a specific transfer: variant, source, destination, quantity, expected cover after the move.
  5. Create the transfer in Shopify so transit and receiving stay in the system of record.
  6. Friday: review what still stocked out, what arrived unused, and whether targets need tightening.

That ritual is the same skeleton as a full transfer playbook — for quantity math, safety floors, and approval rails, see Shopify multi-location inventory transfers.

Stockout risk playbook: what to do before you hit zero

Cover under your floor is a countdown, not a suggestion. Triage in this order:

  1. Confirm the velocity is real (promo spike vs sustained demand) and that available is not locked by commits or a bad count.
  2. Check incoming: if freight arrives inside the cover window, a transfer may be wasted labor.
  3. Find surplus at a valid source location; respect safety stock so you do not create a second stockout.
  4. If no internal surplus exists, escalate to PO / vendor expedite — transfers cannot invent units.
  5. Protect merchandising that depends on the short SKU: pause low-margin kits or ads that burn the last units in the wrong channel.

Kit and pack merchants should treat shared components as first-class risk SKUs. A pack that looks in stock company-wide can still fail when the short component only exists in the wrong building. Pair this playbook with Shopify kit inventory sync and, if you sell checkout-native packs, Better Bundles inventory docs.

Location roles: 3PL, warehouse, and retail are not interchangeable

A healthy score assumes you only compare locations that are allowed to help each other. Tag each Shopify location with a role and transfer permissions:

  • Ecommerce / regional warehouse: usually source and destination for DTC replenishment.
  • Retail doors: often destination-only from a hub; sometimes source for local OMS if you allow store fulfillment.
  • 3PL nodes: may be source for DTC only — never propose them as a destination for retail replenishment if that path is not in your contracts.
  • Quarantine / returns: exclude from cover health until units are sellable again.
Tip: If a path should never happen in real life, it should never appear in your recommendation list. Role tags prevent “clever” transfers that ops will reject every week.

Approval thresholds keep humans in control

Once recommendations are trustworthy, the bottleneck becomes signing every move. Split the queue:

  • Auto-approve (or fast-track) small routine transfers under a unit or dollar threshold.
  • Require sign-off above that threshold, or anytime the source would drop near its safety floor.
  • Cap daily transfer volume so a bad rule cannot empty a warehouse overnight.
  • Keep an audit trail: which facts matched, who approved, and what cover looked like before/after.

Run recommend-and-approve long enough that suggestions match how your team already thinks. Only then widen automation — still with caps. That is the same safety posture described on the FlowOps page for rules and approvals.

What “good” looks like after 30 days

  • Leadership can quote one inventory health number and drill into the four components behind it.
  • Top-SKU stockouts at fulfilling locations trend down without drowning the team in tiny transfers.
  • Surplus is visibly funding risk locations instead of sitting as “extra” nobody redistributes.
  • Cover targets and safety floors are written policies, not tribal knowledge.
  • Transfers are native Shopify transfers — not side spreadsheets that drift from admin.

Where FlowOps fits (in development)

FlowOps is Leger Studio’s multi-location inventory app currently in development. The product direction is to watch stock across every Shopify location, surface imbalances with days-of-cover reasoning, expose an Inventory Health Score with drill-down components, and create native Shopify transfers — with rules, approvals, and an audit trail when you are ready to automate.

It is not available on the Shopify App Store yet, and this post is not an install link. Until launch, run the scorecard and transfer ritual with Shopify’s built-in inventory and transfers, keep reading the blog, and watch the FlowOps app page for updates. For product news when new Leger Studio apps ship, subscribe from the site footer or use the contact page.

Tip: If you already sell packs with Better Bundles, fold pack components into the same health review at the locations that actually ship kits — merchandising gains only stick when cover stays honest. Start with create your first bundle if packs are still on your roadmap.

Newsletter

Want the next one in your inbox?

Subscribe for new posts, app releases, and Better Bundles updates.

Product updates, release notes, and new posts. Unsubscribe anytime. Privacy

Ready to grow your average order value?

Create your first native-style bundle and see the discount at checkout. Every plan starts with a 15-day free trial.