sbskubase

The right safety stock formula for Shopify merchants

Most Shopify merchants set a fixed buffer — 30 days of cover on every SKU, or a flat minimum quantity — and call it safety stock. It works until it doesn't: a fast mover stockouts two weeks before a holiday; a slow mover sits for eight months. The problem is that a fixed buffer ignores the two things that actually drive stockout risk: how much demand varies and how reliably your supplier delivers.

What safety stock is actually for

Safety stock is the inventory you hold to absorb uncertainty. There are two sources of uncertainty in any replenishment cycle:

  1. Demand uncertainty — sales in the lead-time window are higher than expected.
  2. Supply uncertainty — your supplier ships late, short, or both.

A fixed buffer day rule handles neither systematically. A SKU that sells 10 units/day with ±1 variance needs far less safety stock than one that sells 10/day with ±8 variance, even though they have the same average.

The formula

The standard safety stock formula that accounts for both sources of uncertainty is:

Safety Stock = Z × √(LT × σ_d² + D² × σ_lt²)

Where:

A worked example

Suppose you have a SKU with:

Plugging in:

Safety Stock = 1.645 × √(21 × 4² + 12² × 5²)
= 1.645 × √(21 × 16 + 144 × 25)
= 1.645 × √(336 + 3,600)
= 1.645 × √3,936
= 1.645 × 62.7
≈ 103 units

With a flat 30-day buffer, you'd hold 360 units (30 × 12). The formula gets you to 103 — a 65% reduction in safety stock while maintaining a 95% service level. That's cash you're currently tying up unnecessarily.

The reorder point

Safety stock is not your reorder point — it's the floor. The full reorder point (ROP) is:

ROP = (Average Daily Demand × Average Lead Time) + Safety Stock

In the example above: ROP = (12 × 21) + 103 = 252 + 103 = 355 units. When on-hand drops to 355, place the PO.

Service level segmentation

Not every SKU deserves a 98% service level. The Z-score is not free — higher service levels mean exponentially more safety stock. A rational approach:

ABC segmentation lets you hold less total inventory while protecting the revenue-generating items. Most Shopify merchants apply one buffer to every SKU — a C-item held at 98% service is cash you don't need to lock up.

Where merchants get this wrong

Three common mistakes:

  1. Using average lead time only, ignoring variance. If your supplier is on time 90% of the time but arrives 2 weeks late 10% of the time, the average masks the real risk. The standard deviation of lead time is the number that matters.
  2. Measuring demand variance over too short a window. A 30-day demand window during a slow period dramatically underestimates the variance you'll see during a sale or seasonal ramp. Use 52 weeks of history where possible.
  3. Never recalculating. A SKU's demand variance changes over time. A product that was predictable for two years can become volatile after a single viral moment or a competitor stockout. Recalculate safety stock monthly for A-tier SKUs.

Getting supplier lead-time variance

Most Shopify merchants don't track lead-time variance because no tool surfaces it automatically. The data lives in your PO history: date PO sent, date goods received. The gap between those two dates, across all POs for a vendor, gives you average lead time and standard deviation.

If you've been using Stocky or a spreadsheet, you likely don't have this. Start collecting it. Even a 6-month window of PO receipts gives you enough signal to distinguish reliable suppliers from unreliable ones.

How skubase handles this

skubase computes safety stock and reorder points using this formula — service-level segmented by ABC tier, with lead-time variance pulled from your PO history. The daily action queue shows which SKUs are below their ROP, ranked by urgency. You don't run the formula manually; you work the queue.

See the demoSee forecast view