Product
6-Stage PipelineInventory ManagementBill of MaterialsSupplier ManagementReports & AnalyticsAI CopilotShopify Integration
Industries
ApparelBeauty & Personal CareJewelleryFootwearHome & LifestyleFood & Beverage
Company
Pricing Blog About Log in Start free trial →
Metrics

Dead Stock: How to Identify It, Cost It, and Clear It

Walk into your storeroom and point at the shelf nobody touches. Four hundred units of the colourway that seemed obvious in January, ordered because the MOQ was 500 and 100 felt silly. That is dead stock: inventory that has stopped selling and is now just an expensive object taking up rent. Most founders know how to identify dead stock in the abstract — “it hasn’t moved in a while” — and then never put a number on it, because the number is uncomfortable. This guide gives you a threshold you can defend, the query to run on a Shopify export, the true annual cost, six ways out with the honest trade-off attached to each, and the upstream fix that stops the next pile from being born.

Key takeaways

  • Dead stock is not “90 days without a sale.” The threshold is roughly twice that product’s own replenishment cycle.
  • Identify it at variant level from two Shopify exports — products and 12 months of order line items — then sort by capital at risk, not by days idle.
  • The real cost is carrying cost (20-25% of value a year) plus the gross profit that cash would have earned elsewhere.
  • A ₹4 lakh pile left alone for a year commonly costs about ₹4 lakh — roughly what it cost to make.
  • Every route out has a price. Discounting a hero SKU teaches your best customers to wait for the next sale.
  • Dead stock is a forecasting failure that happened at the purchase order three to six months earlier. That is where the fix lives.

What actually counts as dead stock

The industry default — no sales in 90 days — is a habit, not a definition. It is far too patient for a fast-fashion drop and far too twitchy for a heavy staple that customers buy once a year. Ninety days flags a slow-burning core product as dead while letting a failed seasonal launch look healthy for another quarter.

A more useful definition has two parts. A SKU is dead when (a) you still have units on hand and (b) it has gone longer without a sale than its own replenishment cycle can possibly justify. That second half is the bit worth calculating.

Replenishment cycle = Supplier lead time + Review period Dead-stock threshold (N) = 2 × Replenishment cycle

The review period is how often you look at that SKU and decide whether to reorder — weekly for bestsellers, quarterly for the tail. Doubling the cycle is deliberately forgiving: the product has had two full chances to be reordered and you would not have reordered it either time. That is dead, not slow.

Product typeLead timeReview periodCycleDead at
Printed tee, seasonal drop30 days15 days45 days90 days
Handmade jewellery, small batches21 days14 days35 days70 days
Core staple, continuously restocked90 days30 days120 days240 days
Imported skincare actives60 days30 days90 days180 days

Two filters keep the list honest. Add a value floor — ignore anything where units on hand × unit cost is under, say, ₹5,000, or you will drown in dead swatches and sample sizes. And separate the three species people lump together: slow-moving stock still sells, just lazily; dead stock has stopped; obsolete stock cannot practically be sold at all (expired, superseded packaging). Only the third has no route back to cash.

How to identify dead stock in a Shopify export

You do not need software for the first pass. You need two CSVs and twenty minutes.

Step 1 — pull the two exports

In Shopify admin: Products → Export → All products, plain CSV. That gives you handle, SKU, variant inventory quantity and — if you have filled it in — variant cost. Then Orders → Export → line items by date range for the last 12 months, which gives you created-at date, line item SKU and quantity.

Step 2 — reduce the order file to one row per SKU

Pivot the orders export on Lineitem sku with two values: MAX of the created-at date (the last time anyone bought it) and SUM of quantity for the last 90 days. Call that sheet Sold.

Step 3 — three formulas in the product sheet

Days since last sale =IF(ISNA(MATCH(B2,Sold!A:A,0)), 999, TODAY()-VLOOKUP(B2,Sold!A:B,2,FALSE)) Capital at risk =C2*D2 (units on hand x unit cost) Status =IF(C2=0,"-", IF(E2>=$N$1,"DEAD", IF(E2>=$N$1/2,"WATCH","OK")))

Keep your threshold N in cell N1 so you can change it per category without rewriting formulas. The 999 is doing real work: a SKU that has never sold returns no match, and you want it at the top of the list rather than silently skipped.

If you run a warehouse or a database rather than a spreadsheet, the same logic in SQL:

SELECT v.sku, v.qty_on_hand, v.qty_on_hand * v.unit_cost AS capital_at_risk, CURRENT_DATE - MAX(o.order_date) AS days_since_last_sale FROM variants v LEFT JOIN order_lines o ON o.sku = v.sku GROUP BY v.sku, v.qty_on_hand, v.unit_cost HAVING v.qty_on_hand > 0 AND (MAX(o.order_date) IS NULL OR CURRENT_DATE - MAX(o.order_date) >= 90) ORDER BY capital_at_risk DESC;

Step 4 — read it correctly

Three traps catch people on the first run. Run it at variant level, never product level. A shirt that sells fine in M and L looks alive in aggregate while ₹90,000 of XS and XXL sits dead underneath it — product-level reporting is the single most common reason dead stock hides in plain sight.

Exclude stockout days before you judge anything. A SKU that was unavailable for sixty of the last ninety days has not been rejected by customers; it has been hidden from them. Marking it dead is how brands kill products that were working. This is why Honey Shelf measures velocity from in-stock days only — the same correction that keeps your reorder points honest keeps your dead-stock list honest.

Sort by capital at risk, not by days idle. The oldest SKU on your list is usually a ₹3,000 rounding error. The expensive one is often only 70 days idle. You are hunting cash, not age — the same instinct behind a healthy inventory turnover ratio. Once you want this list refreshed weekly rather than rebuilt by hand, reports with XLSX export is where it lives.

What dead stock really costs

Founders usually count one layer of the cost. There are three.

1. Locked working capital. The cash you paid your manufacturer is sitting in folded cotton. It is not gone, but it is not available either — and for a growing brand, availability is the whole game.

2. Carrying cost. Storage, insurance, handling, shrinkage, damage and obsolescence typically run 20-25% of inventory value per year. This is money leaving your account for the privilege of owning something nobody wants.

3. Opportunity cost. The largest number and the one nobody writes down: the gross profit that same cash would have earned in a product that actually turns. This is what makes “let’s hold it, maybe it picks up next season” such an expensive sentence.

Worked example: costing a ₹4 lakh pile for one year

An apparel brand has 1,000 units of a printed shirt. Landed cost ₹400, retail ₹1,200. It sold 18 units in the last six months and nothing in the last 100 days. The founder’s instinct is to wait for next summer.

Capital locked = 1,000 x ₹400 = ₹4,00,000 Carrying cost @ 22% = ₹4,00,000 x 0.22 = ₹88,000 Opportunity cost — the same ₹4,00,000 deployed in a SKU that turns 2x a year at 50% gross margin: Annual COGS = ₹4,00,000 x 2 = ₹8,00,000 Revenue at 50% GM = ₹8,00,000 / 0.50 = ₹16,00,000 Gross profit = ₹16,00,000 - ₹8,00,000 = ₹8,00,000 Less ads + shipping @ 30% of revenue = ₹4,80,000 Contribution forgone = ₹3,20,000 TRUE COST OF ONE YEAR OF WAITING ₹88,000 + ₹3,20,000 = ₹4,08,000

Read the last line again. Doing nothing for twelve months costs roughly what the pile cost to manufacture — and you still own the pile, now a season older and worth less. If your cash turns slower than 2× a year, scale the opportunity line down; even at 1× the total lands near ₹2.5 lakh. Run it with your own numbers. The conclusion rarely changes.

A second clock is running too. Recovery value decays as the season passes: the shirt that clears at 40% off in month three needs 65% off in month nine and a liquidator by month fifteen. Every month you hesitate, the cost side rises and the recovery side falls. Speed is worth more than a good price.

Six ways out, and what each one costs you

RouteTypical recovery per unit (₹400 cost)SpeedWhat it really costs you
Discount ladder (20% → 40% → 60%)₹480-9604-10 weeksMargin, and a lesson your customers remember
Bundle with a bestseller₹250-450 effective2-6 weeksCannibalises margin on a product that was fine
Marketplace listing₹300-600 after commission3-8 weeksFees, returns, and your price integrity on Google
Influencer / PR gifting₹0 cash, content in return1-3 weeksFull write-off of cost; only works at small volume
B2B or liquidator bulk sale₹100-2001-2 weeks25-50% of cost, and goods may resurface cheaply
Donation / write-off₹0DaysNo cash back; buys space, closure and a clean book

The discount ladder recovers the most cash per unit, so start there — but only on products your best customers are not watching. Marking down your hero SKU is the most expensive thing on this table and it never appears in the P&L as a cost. Do it twice and you have taught your list a rule: never buy at launch, the price always comes down. Full-price sell-through in the first two weeks of every future drop pays for that lesson. Clear hero-SKU overstock through a bundle, a private segment email, or a channel your core audience does not browse.

Bundling works because the customer is already converting; you are adding, not persuading. The trap is giving away margin on a product that would have sold at full price anyway. Cap it: bundle-only offers, a fixed number of units, and a hard end date.

Marketplaces move volume fast, and that is the point. But commissions and return rates are materially higher than your own store, so model the net, not the sticker — and accept that a ₹499 marketplace listing is now the price a shopper finds when they search your brand.

Gifting recovers no cash, which is exactly why founders underrate it. If the units are already a write-off, converting them into content, reviews and reach beats a liquidator’s cheque. It scales to a few hundred units, not a few thousand.

Liquidation is the honest option for large volumes and turned seasons: a fraction of cost, one payment, a fortnight. Agree in writing where the goods may be resold, or your product reappears at a third of retail in a channel you cannot control.

Donation or write-off returns no money but buys back the shelf, the ops attention and the closure. In India, writing off inventory generally means dealing with the input tax credit already claimed on those goods — confirm the current treatment with your CA before you book it.

A workable sequence: give routes one to four your first 60 days, then move whatever is left to five or six without a second debate. Clearance that drags for six months is just dead stock with a discount code attached.

The prevention half: dead stock is made at the PO

Here is the part that actually saves money. The pile did not die last month. It was created on the day you approved a purchase order three to six months earlier — dead stock is a forecasting failure with a long fuse. Clearing it is damage control; the fix lives upstream.

Three habits produce most of it:

  • Rounding up to the MOQ. You needed 150, the minimum was 500, so you took 500 and told yourself it would sell eventually. Roughly 350 units were dead on arrival. Splitting a minimum into a test run plus a committed repeat is usually negotiable — see how to negotiate MOQ with manufacturers.
  • Ordering the range at equal depth. Eight colourways, 200 each, because it looks like a collection. Demand is never uniform. Depth should follow expected rank, which is what SKU rationalization forces you to confront.
  • Forecasting off the launch spike. Week one is friends, list and novelty. Extrapolating it into a quarter is the most reliable way to manufacture a year of dead stock. Use methods built for small, noisy datasets — our guide to demand forecasting methods covers the ones that survive a 40-SKU catalogue.

Then add one checkpoint. Thirty days after a product lands, measure its sell-through rate against what you expected. A product tracking at half its plan at day 30 is not going to recover at day 120; it is going to become the shelf you point at. Acting then — a bundle, a photoshoot, a price test, a paused reorder — costs a fraction of acting at day 200, because the product is still current and still worth full price to somebody.

The aging buckets, and what each one triggers

A dead-stock list is only useful if each row has an owner and a next action. Bucket by days since last sale and attach a standing response, so nobody has to relitigate the decision every month.

Days with no saleWhat it meansAction it triggers
0-30Normal lull for most cataloguesNothing. Keep it in the weekly report and move on.
31-60Early warningDiagnose before you discount: check photos, page depth, a missing core size, a broken variant. Pull it from the next reorder draft. Test one email segment.
61-90It is not sellingFreeze reorders. Start a clearance route — bundle, marketplace or gifting — and write an exit plan with a named owner and a date.
90+DeadExecute clearance to completion. Decide keep-or-cut for next season. Deduct the trapped cash from your next PO budget so the mistake is visible when you place the next order.

Scale the buckets to your own cycle: if your threshold is 180 days rather than 90, double every row. And be strict about the last column. Dead stock accumulates not because founders cannot see it, but because seeing it triggers no obligation. Ninety days of no sales should remove a SKU from the reorder draft automatically, whether or not anyone remembers to say so.

Make the list run itself

Rebuilding two CSV exports and a pivot table every month is the kind of task that gets done twice and then quietly abandoned. That is when dead stock compounds. Honey Shelf watches real daily sales velocity per variant, excludes stockout days before judging anything, keeps a days-remaining countdown on every product, and drafts production and material orders from what is actually moving — so slowing SKUs surface before your cash is stuck in them, and never reach the next purchase order by accident.

Honey Shelf Team

We build manufacturing intelligence for modern product brands.

Frequently asked questions

There is no universal 90 days. Set the threshold at roughly twice the product’s normal replenishment cycle — supplier lead time plus how often you review that SKU. A fast-fashion drop on a 45-day cycle is dead at 90 days of no sales; a staple on a 120-day cycle is not dead until about 240.

Two things, and most founders count only the first. Carrying cost — storage, insurance, shrinkage, obsolescence — runs about 20-25% of inventory value a year. On top sits the opportunity cost of the frozen capital: the gross profit the same money would have earned in a SKU that actually turns. On a ₹4 lakh pile that combination is commonly ₹4 lakh over a year, roughly the value of the pile itself.

Discount first if the SKU is not one of your hero products, because a discount ladder recovers the most cash per unit. Liquidate in bulk when the volume is large, the season has turned, or the SKU is one customers watch — repeatedly marking down a hero SKU teaches your best buyers to stop paying full price and wait for the next sale.

Dead stock is a forecasting failure that happened three to six months earlier, at the purchase order. The fix lives upstream: order first runs against measured velocity rather than optimism, split large MOQs into a test run plus a repeat, and set a sell-through checkpoint 30 days after landing so a weak product gets acted on while it is still worth full price.

See dead stock before it dies.

Honey Shelf tracks real daily velocity per variant, excludes stockout days, and keeps a live days-remaining countdown so slowing products surface while they are still worth full price.

Start your free 30-day trial

No credit card required · Cancel anytime · Get set up in under 10 minutes