ClearStock is live on the Shopify App Store.Install free →

← All blogs

Guides8 min read

Why your best-sellers are always the ones out of stock

Your best seller is out of stock again while slow SKUs pile up — here are the four reasons winners keep getting under-bought, and the fix for each.

InventoryX is in development and not available today. ClearStock is the live Shopify app.

Your best-sellers don't run out because you're bad at reordering. They run out because nearly every default in the way small catalogs get bought — thresholds calibrated on catalog averages, velocity averages that include dark days, buffers sized for the middle of the catalog — quietly works against the SKUs that sell the most. The tail gets over-bought precisely because the winners get under-bought: both come from treating a 0.3-units-a-day color and a 9.8-units-a-day hero with the same rules. Here's the spiral, worked on one SKU, and the policy that stops it.

The self-reinforcing spiral, worked on one sock

A 320-SKU outdoor accessories store. The hero: HSK-MER-CH, a merino crew sock in charcoal. Last quarter (90 days), it was dark for 18 days.

While in stock it sold 9.8 units/day, so real demand for the quarter ran 9.8 × 72 in-stock days ≈ 706 units — plus another 9.8 × 18 ≈ 176 units of demand (estimated) that arrived while the shelf was empty and had nowhere to go.

Now watch what the spreadsheet does. The store computes velocity the way most do: units sold ÷ 90 days.

  • Spreadsheet velocity: 706 ÷ 90 = 7.8/day
  • True velocity: 9.8/day

The reorder point was built on the spreadsheet number: 7.8 × 21-day supplier lead + a 40-unit uniform buffer = 164 + 40 = 204 units. Built honestly, it's 9.8 × 21 + a 60-unit buffer = 206 + 60 = 266 units. The gap is 62 units — about six days of true demand. So the average cycle now ends dark, and here's the spiral: every dark day drags the blended velocity lower, which lowers next quarter's reorder point, which makes the next dark spell more likely, not less. The formula isn't broken. Its input is being poisoned by the exact event you're trying to prevent.

The correction itself — computing velocity from in-stock days only — is a short read: why your sales velocity numbers lie during out-of-stock days. What matters here is where the distortion bites: on a 0.4/day tail SKU, the error is a rounding error. On a 9.8/day winner, it compounds fast enough to become a quarterly habit.

And the cost isn't abstract. In the 2002 out-of-stock study commissioned by the Grocery Manufacturers of America, 31% of shoppers who hit an empty shelf bought the item at another store and 26% bought a different brand (as published, 2002). A hero SKU doesn't just lose the sale — it hands a warm customer to a competitor.

The four places winners get under-bought

Symptom What's actually broken The lever
"It sells out the same week I reorder" Threshold calibrated on catalog averages, so units-left means wildly different things per SKU Manage winners by days of cover, not units left
"The sheet says 7.8/day but it sells 9.8" Dark days dragged the velocity blend down In-stock-only velocity, recomputed after every dark spell
"I always seem to order it too late" Lead time is the supplier's quote, not your measured history Measure actual lead time per supplier before trusting any threshold
"It sold 9.8 in July and it's selling 14 now" A static reorder point in a moving market Re-derive winners' thresholds quarterly and at every season shift

A fifth failure is cash, not math: there's never budget for a big winner PO because cash is parked in tail stock. That one is a pruning conversation — winners get funded by the tail, not in addition to it.

The winner policy: stop treating heroes like the average

The fix that survives contact with a real catalog is differentiated treatment. One buffer rule, one review cadence, one lead-time assumption for everything is how the average became the enemy of the best. Instead:

Tier Definition Lead-time input Buffer policy Review cadence
Heroes Top 10–20 SKUs, roughly 2%+ of revenue each Measured p80 (covers 4 of 5 cycles) Sized deliberately with safety stock math for the SKU's velocity Weekly
Core Next ~30% of revenue Measured average lead time Standard formula buffer Every two weeks
Tail The long, slow rest Quote is fine — speed barely matters Order-on-empty or min-max Quarterly, and prune

Worked on the sock: it's a hero, so it gets the p80 lead time (say your PO history shows 21 average, 26 at p80), a buffer sized on its 9.8/day velocity, and a weekly look. Reorder point: 9.8 × 26 + 60 ≈ 315 units, ordered in depth — say 500, which is about 51 days of cover at true velocity — so the PO cycle stops living hand to mouth. That's roughly 110 more units than the blended-velocity reorder point, and it exists because the inputs got honest, not because you "ordered more" on vibes.

If you're rebuilding thresholds from scratch, the formula and its spreadsheet calculator are here: the reorder point formula. The winner policy above is just the formula run with different inputs per tier.

Why "just order more of the winners" isn't the fix

The emotional overcorrection after a painful dark spell — double everything, especially the winners — creates the mirror-image problem: an over-bought tail and a cash squeeze that makes the next winner PO impossible. Two disciplines keep the fix from curdling:

  • Fund the winners from the tail. Before placing a 500-unit sock PO, know where the cash comes from: a slow SKU you're letting run to empty, a stale design you're clearing. Winners shouldn't compete with payroll for cash; they should compete with tail stock they outperform.
  • Set the reorder cadence per tier, not per calendar. Winners get checked weekly — same day every week, so the check happens even in a busy season. The tail can live on a monthly or quarterly rhythm. When everything shares the monthly cadence, the winner that jumped from 9.8 to 14/day waits up to four weeks for someone to notice, and at 14/day that's up to 56 units of unbuffered demand.

That cadence point is the unglamorous core of "restock bestsellers faster": speed doesn't come from panic-ordering earlier. It comes from shortening the loop between a velocity change and a buying decision.

What to do while the winner is already dark

Sometimes you're reading this mid-incident. In order: capture the demand (a dated backorder beats a bare sold-out message; a waitlist beats both), verify the PO's real arrival date rather than the promised one, and consider a partial expedite on a fraction of the order if the supplier will split it. If you run paid traffic, a second clock is ticking while the winner sits dark — ads and out-of-stock SKUs covers the pause decision on the media side. Then, after the dust settles, run the post-mortem — but run it on the inputs. Ask what velocity number the reorder point was built on and whether dark days were inside it. The answer is usually yes, and the fix is the spiral above, not a scolding.

Common questions

Why do best-sellers go out of stock so often? Because buying rules calibrated on catalog averages under-serve high-velocity SKUs, and velocity averages that include dark days drag winners' thresholds even lower. Each dark spell poisons the next reorder point, so the problem compounds on exactly the SKUs least able to afford it. The fix is tier-specific inputs, not louder intuition.

How often should I review reorder points on best-sellers? Weekly for hero SKUs — the same day each week — with a full re-derivation quarterly and at every season shift. A winner whose velocity moved from 9.8 to 14/day can run four weeks past its old threshold on a monthly review cadence, which at 14/day is up to 56 units of unbuffered demand.

Should I just keep more safety stock on winners? Yes, but sized deliberately rather than padded. Use your measured p80 lead time and a buffer calculated from the SKU's true velocity — safety stock formulas exist for exactly this — instead of raising the lead-time input with vibes, which over-buffers the cycle rather than covering its variability.

How do I know a winner's real demand if it keeps selling out? Compute velocity from in-stock days only, treating dark days as missing data rather than zero demand. A waitlist or notify-me list is a useful secondary signal while dark. The 706-versus-706-style correction in the worked example above is the whole trick: demand during dark days didn't vanish; it went unserved.

What triggers an urgent reorder on a winner? Days of cover falling below lead time plus buffer days. Track cover in days rather than units so the threshold means the same thing across the catalog. When a hero's cover crosses that line mid-cycle, place the PO immediately and consider a partial expedite rather than waiting for the regular review.

Next step

This week, list your ten highest-velocity SKUs and rebuild each one's reorder point with honest inputs: in-stock-only velocity, measured p80 lead time, a buffer sized on purpose. Then give them a standing weekly check on your calendar. If the tail is what's crowding the winners out of your cash, the pruning conversation is the companion move — start with the days-of-cover metric to see which SKUs are quietly hoarding it.