Skip to main content
Inventory guide · dead stock

How to find dead stock in Shopify, and what to do with it.

Dead stock does not show up as a problem anywhere in Shopify. It sits in your inventory count, it looks like an asset, and the cash you paid for it is gone until it sells. This guide shows which Shopify reports find it, how to put a value on it, and how deep a markdown can go before you sell at a loss.

90 dayswithout a sale: the product is going staleThreshold used in this guide
180 dayswithout a sale: the product is dead stockThreshold used in this guide
30 daysthe window Shopify's sell-through report usesShopify Help Center1
68%deepest markdown that covers cost and fees on a $59 product costing $18Worked example below

In brief

  • Value dead stock at cost, not at retail: units on hand × cost per item. That is the cash you would get back if it sold at cost, and it is the number that tells you which product to deal with first.
  • Shopify's inventory reports give you the pieces: sell-through over the most recent 30 days, days of inventory remaining, and month-end inventory value for products with a cost set.1 None of them lists the products that sold nothing, so you need an inventory export for those.3
  • The deepest markdown that still covers cost and payment fees is 1 − (cost + fixed fee) ÷ (price × (1 − fee rate)). Stay well above it: a markdown is meant to recover cash, not to lose more.
  • When no discount clears cost, bundle it with a steady seller or move it through a clearance channel, and stop reordering it either way.

What counts as dead stock

There is no official definition, so pick thresholds and apply them to every product the same way. The ones used in this guide, and in our own app, are:

ClassRuleTypical first move
DeadNo sale for 180 days or moreMark down around 40%, stop reordering
Never soldIn stock 90 days or more without a single saleMark down around 35%, check the listing
StaleNo sale for 90 to 179 daysMark down around 25%
SlowUnder 20% sell-through in 90 days, with more than 180 days of supplyLeave the price, stop reordering, recheck next month
Too new to judgeStocked less than 30 days agoNothing yet

Thresholds are Mufatech Studio's working rules, not a Shopify standard. Seasonal products need their own season as the window.

Judge variants, not products. A shirt that sells in medium and sits in extra large is a dead-stock problem in one variant, and averaging the two hides it.

How to find dead stock in Shopify admin

All the reports below are in your Shopify admin under Analytics › Reports, filtered by the Inventory category.1

  1. Set cost per item first. Open each product and enter what you paid for it, excluding taxes and shipping. Shopify uses this field for profit and margin, and without it every value below is missing or a guess.2
  2. Month-end inventory value totals your available stock at cost, for products that have a cost per item. This is the size of the pool you are looking into.1
  3. Products by sell-through rate shows, per variant, units sold divided by units sold plus units still in stock, over the most recent 30 days available. Sort it from lowest to highest.1
  4. Inventory remaining per product estimates the days until tracked stock runs out: ending quantity divided by the average sold per day. A very high figure is stock that will take months or years to sell at the current pace.1
  5. Products that sold nothing do not appear in sales reports at all. Export your inventory from Products › Inventory › Export, then run Total sales by product variant for the last 180 days, and list every variant with stock that is missing from the sales report.3
  6. Put a value on each one in a spreadsheet: units on hand × cost per item, and sort by that value. Start at the top.

Watch the window

The sell-through report looks at 30 days. A product that last sold 40 days ago shows 0% there, and so does one that last sold two years ago. You need the date of the last sale, or at least 180 days of sales, to tell stale from dead.

The formulas

MeasureFormula
Capital tied upunits on hand × cost per item
Sell-through rateunits sold in the period ÷ (units sold + units on hand)
Daily sales rateunits sold in the last 90 days ÷ 90
Days of supplyunits on hand ÷ daily sales rate
Days since last saletoday − date of the most recent order containing the variant
Share of stock at riskcapital in dead and stale variants ÷ all capital in stock

Sell-through matches the formula in Shopify's own report.1 A variant with no sales in 90 days has no daily rate, so its days of supply are unbounded; treat it by days since the last sale instead.

A worked example

Five variants from an invented homeware store, judged on the rules above:

VariantOn handCostSold, 90 daysSell-throughLast saleCapitalClass
Linen throw, Sand64$18.0000%212 days$1,152.00Dead
Cotton napkins, set of 4120$6.50129%3 days$780.00Slow
Stoneware bowl40$7.0000%never, 140 days in stock$280.00Never sold
Wool scarf, Charcoal14$11.6000%131 days$162.40Stale
Ceramic mug, Ivory9$9.007289%today$81.00Healthy

Invented figures. Napkins: 12 ÷ (12 + 120) = 9% sell-through, and 120 ÷ (12 ÷ 90) = 900 days of supply, so slow even though they sold three days ago.

Of $2,455.40 in stock at cost, $1,594.40 sits in dead, never-sold and stale variants: 65%. The throw alone is almost half the problem, so it goes first. The napkins are the easy one to miss: they still sell, but at this pace the stock lasts about two and a half years, and the right move is to stop reordering, not to discount.

How deep to mark down

A markdown recovers cash. It should not create a new loss on top of the one you already have. Two limits matter:

  • The break-even markdown, where the sale price just covers cost and payment fees: 1 − (cost + fixed fee) ÷ (price × (1 − fee rate)). For the throw at $59.00 with an $18.00 cost and fees of 2.9% + 30¢ (Shopify Payments on Basic in the US, see the fees calculator): 1 − 18.30 ÷ (59.00 × 0.971) = 68%.
  • A floor with a margin, so returns and handling do not push it under: never price below cost plus 5%, which here is $18.90, a markdown of at most 67%.
MarkdownNew priceKept per unitCash if all 64 sell
None$59.00$38.99$3,776.00
20%$47.20$27.53$3,020.80
40%$35.40$16.07$2,265.60
60%$23.60$4.62$1,510.40

Kept per unit = new price − 2.9% of it − 30¢ − $18.00 cost. Cash if all sell is before fees.

Start at the shallow end: around 25% for stale stock and 40% for dead stock. Go 5 points deeper for each further quarter it sits unsold, and stop well short of the break-even point. If it still does not sell after 30 days at a fair markdown, the problem is usually the product, the photos or the size range, and a deeper cut will not fix that.

To make the reduction visible, set the compare-at price to today's price before you lower the price.2 Tag the products clearance so you can find them in one filter later.

Other ways to clear it

  • Bundle it with a product that sells steadily to the same customer, at a price below the two combined but above their combined cost, and show the bundle on the fast seller's page, where the traffic is.
  • Clearance channels that do not reset your public price: an outlet collection, a sample sale, a wholesale lot, or a donation with the write-off recorded.
  • Stop reordering. Take slow and dead variants off the next purchase order. This costs nothing and stops the problem growing.
  • Record the loss against the product so next season's buying decision sees it.

Pitfalls

  • No cost per item. Month-end inventory value leaves those products out, so the total looks smaller than it is.1 Fill in the cost, or estimate it and mark the estimate.
  • Imported catalogues look new. A product's created date is the day it was added to this store, so after a migration or re-import, year-old stock looks brand new. Date stock from its first sale when that is older.
  • Averaging variants. A product-level view hides the one size or colour that does not sell.
  • Seasonal products. A winter coat with no sale in July is not dead. Judge it against its own season.
  • Draft and archived products with stock. They are off the storefront but the cash is still on the shelf. Include them in the count.
  • Discounting slow sellers. A product that still sells, only too slowly, usually needs a smaller next order, not a lower price.

Doing it automatically

Store Diagnosis is our free, read-only Shopify app. It runs this whole method on every variant each night: it reads stock, cost and every order, dates each variant from its first sale when that is older than its creation date, classes it as dead, never sold, stale or slow on the thresholds above, and ranks the list by capital tied up.

Each finding shows the arithmetic, a suggested markdown that never prices below cost plus 5%, a table of what each markdown leaves per unit after fees, and the steps to do it in your admin. Where the margin allows no useful discount it suggests a bundle or clearance instead. Where cost per item is missing it assumes a 50% margin and marks the figure as estimated.

Store Diagnosis, free and read-only.

  • Dead, stale and slow stock valued at cost
  • A markdown that stays above cost
  • Best-sellers about to run out
  • Discounts and refunds that cost margin
See how it worksComing to the Shopify App Store; it is waiting for review.

Frequently asked questions

What is dead stock on Shopify?

Stock that has stopped selling while it still sits in your inventory. A common working definition is no sale for 180 days, with 90 days as the point where a product is going stale. It matters because the money you paid for it is tied up until it sells, and it is measured at cost: units on hand multiplied by cost per item.

How do I find slow-moving inventory in Shopify?

Go to Analytics › Reports and filter by the Inventory category. Products by sell-through rate shows how much of each variant's stock sold in the most recent 30 days, Inventory remaining per product estimates the days until stock runs out, and Month-end inventory value shows what the stock is worth at cost. For products with no sales at all, export your inventory from Products › Inventory and match it against the Total sales by product variant report over 180 days.

How do I calculate sell-through rate?

Units sold in the period divided by units sold plus units still in stock. 12 sold with 120 left is 12 / 132 = 9%. Shopify's Products by sell-through rate report uses the same formula over the most recent 30 days.

How much should I mark down dead stock?

Deep enough to move it, but not below what the unit costs you plus payment fees. The deepest markdown that still covers cost is 1 − (cost + fixed fee) / (price × (1 − fee rate)). For a $59 product costing $18 with fees of 2.9% + 30¢, that is 68%. Start shallower, around 25% for stale stock and 40% for dead stock, and go deeper only if it still does not sell.

What if any discount would sell below cost?

Then a markdown is the wrong tool. Bundle the product with a steady seller at a price above the combined cost, or move the units through a channel that does not set your public price: an outlet collection, a sample sale, a wholesale lot or a donation. Either way, stop reordering it.

Why does a product I have had for a year look new in my reports?

A product's created date in Shopify is the day it was added to this store, so a catalogue that was migrated or re-imported carries recent dates, and any age worked out from them is too short. Date stock from its first recorded sale when that is older than the created date, or it will hide stock that has not sold in months.

Sources

  1. Shopify Help Center. Inventory reports: Month-end inventory value, Products by sell-through rate (most recent 30 days), Inventory remaining per product, and where to find them, checked 25 Sep 2026. vendor-published
  2. Shopify Help Center. Product prices: cost per item, compare-at price and the margin shown on the product page, checked 25 Sep 2026. vendor-published
  3. Shopify Help Center. Exporting and importing inventory quantities: Products › Inventory › Export, checked 25 Sep 2026. vendor-published

Shopify renames and moves reports from time to time. Report names are quoted from the linked pages as of September 2026.