Export every stock line with quantity on hand, unit cost, last sale date and a year of sales, then have AI classify each line against written rules: no sale in twelve months is dead, over a year's cover is slow. Rank by cash tied up, weed out false alarms such as superseded codes, and pick one action per line.
The rules matter more than the tool. Ask an AI "which of my stock is dead?" with no definition and it will invent one, differently each time. Fix the thresholds first, make the AI calculate with code rather than estimate, and treat its list as a draft for a person who knows the products to challenge.
Decide the rules before AI sees the data
Days of cover is the measure that does most of the work: stock on hand divided by average daily sales over the last twelve months. A line with 60 units on hand that sells 30 a year has 730 days of cover. Here is a starting rule set you can adjust per category:
| Class | Rule | What usually happens next |
|---|---|---|
| Dead | Stock on hand, no sale in the last 12 months | Clear, return or write down |
| Slow | Sold in the last 12 months, but more than 365 days of cover | Stop reordering, sell down |
| Watch | 180 to 365 days of cover, or sales down more than 50% on the previous year | Review before the next order |
| Healthy | Under 180 days of cover | No action |
| New | First received in the last 90 days | Exclude until it has a sales history |
Shorten the windows for anything that dates quickly (clothing, food, phone accessories, anything with a model year) and lengthen them for spares you deliberately hold. Write the rules down. Next year's review should use the same ones, or the comparison means nothing.
The export: nine columns from your stock system
Most stock and accounting systems can produce these in one or two reports. Join them into one sheet with one row per item:
- Item code
- Description
- Category or product group
- Quantity on hand
- Unit cost (the cost you carry it at, not the selling price)
- Last sale date
- Units sold in the last 12 months
- Units sold in the previous 12 months
- First received date, and ideally the date of the last delivery
Two extra columns save time later if you can get them: the supplier, and any code that replaced this one (a "superseded by" or "alternative item" field). If your system has an inventory ageing or slow-moving report, export that too; its dates are more trustworthy than anything reconstructed from raw transactions.
The classification prompt, and what a first pass returns
Take an illustrative accountancy practice preparing year-end accounts for a client that wholesales electrical fittings: 1,240 stock lines, $412,000 at cost. The partner wants to know how much of that is realistically saleable before agreeing a stock provision (a reduction in the stock value to reflect items unlikely to sell at cost). The practice's manager uploads the joined export to a business AI plan and runs:
Attached is a stock export, one row per item_code. Year end is
31/03. Apply these rules exactly, calculating in Python:
days_cover = qty_on_hand / (units_sold_12m / 365)
(if units_sold_12m is 0, days_cover = "no sales")
Class:
- NEW if first_received is within 90 days of year end
- DEAD if qty_on_hand > 0 and no sale in the 12 months to year end
- SLOW if days_cover > 365
- WATCH if days_cover 180-365, or units_sold_12m is less than
half of units_sold_prior_12m
- HEALTHY otherwise
Add value_at_cost = qty_on_hand * unit_cost.
Give me: (1) a summary by class with line count and value,
(2) the DEAD and SLOW lines sorted by value, highest first,
(3) a check that the class totals add up to the total stock value.
Do not guess any missing figures; list rows with blanks separately.
An illustrative summary from the first pass:
| Class | Lines | Value at cost |
|---|---|---|
| Dead | 186 | $61,300 |
| Slow | 212 | $73,500 |
| Watch | 164 | $38,900 |
| Healthy | 631 | $229,800 |
| New | 47 | $8,500 |
| Total | 1,240 | $412,000 |
The totals reconcile to the stock ledger, which is the first thing to check. If they don't, something was dropped or double counted in the join, and nothing else in the analysis can be trusted until you find it. The prompt's instruction to list blank rows separately matters too: in this file, 23 lines had no unit cost, and an AI told to "fill gaps sensibly" would have made up a cost for each.
Superseded codes, service spares and other false alarms
A first-pass dead list is never the final one. Walk it with someone who knows the products, starting with the most valuable lines. In the practice's review with the client's operations manager, 52 of the 186 "dead" lines turned out to be something else:
- 31 lines ($9,200) were service spares. The client holds them because it promises trade customers that replacement parts will be available for five years. They sell rarely by design. These moved to a separate "held for service" class.
- 14 lines ($4,100) had been superseded. The manufacturer changed part numbers, the client set up new codes, and new sales went on the new code while old stock stayed on the old one. Same physical item, so it is sellable; the fix is to merge the codes, not to write off the stock.
- 7 lines ($3,200) were on an open quote for a large customer's refurbishment project.
That leaves 134 genuinely dead lines worth $44,800. Ask AI to help find the superseded codes before the meeting: give it the descriptions and ask for pairs of items with near-identical descriptions where one has recent sales and the other has none. It won't be perfect, but it turns a two-hour hunt into a ten-minute check.
The opposite error exists too: phantom stock. A line showing 40 units that are no longer on the shelf is dead stock that doesn't exist. Before valuing the dead list, count a sample physically. For this client, the team counted the 20 most valuable dead lines; three had fewer units than the system showed, which moved the dead total down by another $1,150. If phantom stock turns up often, the stock records need attention first, and a faster stocktake routine with a phone scanner is the place to start.
One action per line: return, sell, bundle, discount or write down
Once the list is clean, give every dead and slow line one next action. AI is good at producing a first allocation if you give it the options and the rules:
| Action | When it fits | What AI can do |
|---|---|---|
| Return to supplier | Still in the supplier's current range, packaging intact, return terms allow it (often with a restocking fee) | Group lines by supplier, draft the return request |
| Offer to past buyers | Customers who bought it in the last three years | Match lines to past buyers from the sales ledger, draft a short offer |
| Bundle | A slow line that pairs naturally with a fast mover | Suggest pairings from order history (items often bought together) |
| Discount ladder | Saleable but overpriced for current demand | Propose a stepped plan, for example 20% off for 30 days, then 40% |
| Clearance buyer | Large quantity, low chance of selling through normal channels | List lines in the format surplus buyers ask for |
| Write down or scrap | Damaged, expired, obsolete or worth less than the cost of selling it | Calculate values for the accountant's adjustment |
| Keep | Service spares, open quotes, seasonal lines with a sales pattern | Record the reason so it isn't flagged again next year |
A quick sum shows why the order of actions matters. A return with a 15% restocking fee recovers $85 of every $100 at cost. A 40% discount recovers $60 before selling costs. A clearance buyer might pay $15 to $25. Returns first, then sales to people who have bought before, then discounts, then clearance, is usually the order that recovers the most cash. Check your supplier terms for return windows, though; they are often short.
Slow lines raise a different question: discount now or wait? Holding stock isn't free. Once storage space, insurance, handling, damage and the cash tied up are counted, a common rule of thumb puts the annual cost somewhere between a fifth and a third of the stock's value; work out your own figure if you can. Take a slow line worth $5,000 at cost with three years of cover. At 25% a year, holding it until it sells at full price costs roughly $3,750 over those three years, and it may date in the meantime. Cutting the price so the line clears within a quarter, even at 30% off the usual selling price, usually leaves you better off and frees the shelf for something that sells. Ask the AI to run this comparison for each slow line using your own holding-cost percentage, and sort by the difference.
Putting a value on it for the year-end accounts
Most accounting frameworks carry stock at the lower of cost and net realisable value: what you can realistically sell it for, less the costs of selling it. Dead and slow lines are where those two figures part company, and that difference becomes the provision.
In the illustrative review, the partner judged that the 134 dead lines would realise about 25% of cost through clearance, and that stock held beyond twelve months' cover on the slow lines ($41,000 of the $73,500) would realise about 70%. The AI did the arithmetic in code:
- Dead: $44,800 − $1,150 phantom stock = $43,650 × 75% = $32,740 provision
- Slow, excess over 12 months' cover: $41,000 × 30% = $12,300 provision
- Total provision: $45,040, about 11% of the stock value
The percentages are judgement calls for the accountant and the owner; the AI only calculates and documents them. Keep the classification file, the list of false alarms and the reasons with the working papers. Next year the same rules can be run again and compared, and anyone reviewing the accounts can see exactly how the figure was reached. If a business sale is on the horizon, this file is also one of the first things a buyer's adviser will ask for.
Letting AI draft the clearance emails
With the actions assigned, the writing is the quick part. Give the AI the grouped lines and a clear brief:
Draft a short email to [supplier] asking whether they will accept
a return of the lines below for credit. Mention that the stock is
unused and in original packaging, ask for their restocking fee
and return process, and ask for a reply within 10 days. Plain,
friendly, trade tone. No more than 120 words. Lines:
[item code, description, quantity, our original order date]
An illustrative draft that comes back:
Hi [first name], we're reviewing our stock and have some unused lines from your range that we'd like to return for credit if you can take them. All are in original packaging, and the order dates are listed below. Could you let us know whether you can accept them, what restocking fee applies, and how you'd like them sent back? A reply by 14 April would help us plan. Thanks, Jo
What to fix before sending: the AI wrote "some unused lines" but the attachment listed 38 lines worth $6,900, so say so; a supplier takes a specific, sized request more seriously. Check that every line is still in that supplier's current range; returns of discontinued lines are usually refused, and the AI has no way of knowing which ones those are.
For past buyers, the useful prompt matches slow lines to customers who bought them, then drafts a short personal note to each: "You ordered 20 of these last spring; we have 45 left and can offer them at 25% off until the end of the month." Keep those to your own account managers to send, not a mass email.
Two more shelves: obsolete spares and branded kit
Dead stock doesn't only build up in shops and wholesalers. Two other situations follow the same method with different rules.
Spares for equipment you no longer use. An illustrative engineering consultancy that installs site monitoring switched to a new data-logger model two years ago. Its spares shelf still holds batteries, connectors and mounting kits for the old model, around $7,800 at cost, and the classification flags every one as dead. The action isn't a discount; it's asking the manufacturer about trade-in, offering the kit to other firms still running the old model, or writing it down. The rule to add: when a piece of equipment is retired, its spares are reviewed the same month.
Branded or customer-specific stock. An illustrative recruitment agency held 140 hi-vis vests printed with one client's logo, bought for a contract that ended. They can't be issued to anyone else, so they're dead the day the contract ends, not twelve months later. Add a rule: stock tied to a single customer is reviewed when that customer's contract ends, and where possible, the contract says who pays for leftover branded kit.
A monthly slow-mover alert so it doesn't build up again
A once-a-year purge treats the symptom. The cause is usually reordering without looking at cover. Three habits stop the pile growing back:
- Run the same classification monthly on the same export and save each month's result. Anything moving from Healthy to Watch goes to the person who places orders. For reordering, see how calculated reorder points stop fast lines being overbought.
- Block reorders on Watch and Slow lines without a named person's approval. Most systems can't enforce this, but a monthly email listing those lines, sent before the buying day, does most of the work.
- Look at margins alongside movement. A slow line with a thin margin is a far worse use of shelf space than a slow line with a fat one. Checking margins product by product gives you the second half of that picture.
A monthly prompt that keeps the review to fifteen minutes:
Compare this month's classification with last month's (both
attached). List: (1) lines that moved into WATCH, SLOW or DEAD,
with value; (2) lines on WATCH or SLOW that were reordered this
month, with the order quantity; (3) the total value in each class
now versus last month. Keep it to one table per list.
List (2) is the one to act on. A line on the Watch list that was reordered anyway usually means the buyer didn't see the alert or didn't trust it, and both are fixable.
Four checks before the dead stock list drives any decision
Before the list drives any write-down, clearance or supplier conversation, run four checks:
- Totals reconcile to the stock ledger value for the same date.
- Five known fast movers come out as Healthy. If one comes out Dead, the sales join has failed for that code.
- A hand calculation of days of cover for three lines matches the AI's figure.
- The physical sample of the most valuable dead lines has been counted.
If all four pass, the list is sound enough to act on. For more on reading sales exports with AI and what to check in the answers, see what to upload and check when AI analyses your sales spreadsheet.
Dead stock questions that come up at review time
How long before stock counts as dead?
Twelve months without a sale is the usual line for general stock, but shorten it for fashion, food, tech accessories and anything with a model year, where six months can be enough. Lengthen it for genuine spares you promise to hold for customers. Set the rule per category and write it down so the classification is repeatable next year.
Can I just delete dead stock from the system?
Not without a record. Physically disposing of stock, returning it or writing it down all need an adjustment that your accountant can trace, with a date, quantity, value and reason. Deleting item records can also break sales history. Mark lines as discontinued instead, and let the stock adjustment carry the accounting.
Is AI better than my stock system's ageing report?
Use both. The built-in report gives reliable dates and quantities. AI adds the judgement layer: combining the report with sales history, spotting superseded codes, sorting lines into actions and drafting the emails. If your system has a good ageing report, feed its export to the AI rather than rebuilding it from raw transactions.
Further reads
- How Clothing Boutiques Use AI to Spot Trends Before Buying Stock — Stop dead stock at the buying stage with trend checks.
- Why AI Stock Forecasts Go Wrong: 8 Mistakes Small Businesses Make — Forecasting errors that fill shelves with slow movers.
- How to Clean Messy Data in Excel: Step-by-Step Guide — Tidy duplicate codes and messy exports before the analysis.
- AI Supplier Management: Track Prices, Lead Times, and Risk — Keep supplier terms, including return rights, in one place.
- How to Get Your Records Ready to Sell Your Business, With AI — Buyers look hard at stock values when you sell a business.
- Can ChatGPT Read PDFs, Spreadsheets and Photos? What Breaks — What file types and sizes AI tools actually handle well.
- How Pubs and Bars Can Use AI for Events, Rotas and Stock — Stock variance checks, till-based rotas and event planning for pubs and bars, with a break-even rule for bar inventory software and copyable prompts.
- How Pet Shops Use AI for Stock, Subscriptions and Advice — Reorder rules for dated and seasonal lines, bag run-out maths for subscriptions, and an advice assistant that knows when to say 'ask your vet'.
- Can a Small Shop Use AI Without Having an Online Store? — Where AI helps a bricks-and-mortar shop with no website: till reports, being found on Google, shelf talkers, customer messages and a first-week plan.
- Does AI Stock Ordering Pay Off for an Independent Pharmacy? — The payback sum for AI stock ordering in a single-site pharmacy, the traps that inflate vendor claims, and a 30-day shadow test.
- Break-Even Analysis With AI: A Worked Example for a New Product — A specialty coffee roaster costs a canned cold brew launch step by step: missed costs, channel mix, scenarios and the shelf-life check that changed it.
- How to Sync Stock Across Shopify, Amazon and eBay Automatically — Set up automatic stock sync between Shopify, Amazon and eBay: choosing the master record, cleaning SKUs with AI, buffers, bundles and testing before peak.
- AI Inventory Forecasting for Small Businesses: How It Works — The four ingredients of a stock forecast, how lead time and safety stock turn it into a reorder point, the stockout trap, and five small-business examples.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: inventory valuation principles (lower of cost and net realisable value) as applied under the main accounting frameworks. All business figures are illustrative.