Dormant stock in Odoo: how to calculate, value and reduce it

Maxime VanderhaeghePublished 7 min read

In short, Dormant stock is the valued items that have had no outbound movement for a threshold you set (6, 12 or 18 months depending on your sector). You can calculate it in standard Odoo in three steps: snapshot the valued stock, date the last outbound movement of each item, cross the two. Its real cost goes far beyond the locked-up value: count on 15 to 25 % per year of holding cost, on top of the frozen cash. The hard part isn't the calculation, it's doing it again every month.

Dormant stock is the quietest cash leak in an SME. It triggers no alert, it appears in no standard report, and it grows for as long as nobody looks at it. In the field, it often runs into tens of thousands of euros in companies that thought they were well run. Not out of negligence: simply because nothing in day-to-day work makes it visible.

This article gives you a complete method you can apply in your Odoo today: define dormant stock and set your threshold, calculate it step by step, measure its real cost, reduce it, then stop it from coming back.

Define dormant stock, and set YOUR threshold#

Dormant stock is an item in stock that has had no outbound movement for a certain time. By outbound we mean genuine consumption: a sale, a consumption in manufacturing, an outgoing transfer. A stock receipt or a plain inventory adjustment do not count as an outbound movement.

That leaves the threshold, the "certain time". It depends entirely on your business, and there is no universal norm. A few cautious benchmarks:

  • 6 months for fast-moving products, typically wholesale and retail, where an item with no outbound movement over half a year already raises a question.
  • 12 months for industrial goods and most spare parts, where cycles run longer.
  • 18 to 24 months for critical maintenance parts, where a dormant item is sometimes accepted: you keep the part precisely because you don't know when it will be needed.

The point is not to find the perfect threshold, it's to decide on one and stick to it. The right threshold is a management decision, not an accounting truth. Set it, write it down, and apply it identically from one month to the next: it's the consistency that makes the number usable.

Calculate it in Odoo, step by step#

Good news: it all happens in standard Odoo, with no paid module. The method has four steps.

1. Snapshot the valued stock. Go to Inventory, Reporting, Valuation. You get, per item, the on-hand quantity multiplied by its cost. One detail that changes everything: the reliability of that figure depends on your valuation method (standard, FIFO or AVCO). If your product costs are not up to date, the dormant value will be wrong in the same proportion. Check this before going any further.

2. Find the last outbound movement per item. This is the step the standard screen does not hand you on a plate. Go through stock moves (Inventory, Reporting, Moves, or the stock.move model), filter on done outbound moves, group by item and sort by the date of the last movement. Be clear-eyed: Odoo does not offer a ready-made "last outbound date" column. You either group and sort, or export to rebuild that date item by item.

3. Cross the two. Export both reports (or a single export of the moves enriched with valuation), then cross them in a spreadsheet. The logic is simple: any valued item whose last outbound movement predates your threshold is a dormant item. In plain terms: IF last outbound date is earlier than today minus N months, THEN dormant. A join on the item reference is enough.

4. Read the result as three numbers. Don't produce a two-hundred-line table no one will read. Produce three numbers: total dormant value, the top 10 items by value, and the share of dormant stock in total stock as a percentage. Those three numbers are enough to trigger a decision.

Let's be honest about the effort: the first time, this work takes one to two hours. The real difficulty isn't there. It's doing it again every month, and that is precisely what never happens once daily pressure returns.

The real cost: far more than the locked-up value#

When we talk about dormant stock, we think of the valued amount. That's the visible part, and it's the smallest. What truly costs is the invisible layers stacked on top.

The real cost of dormant stock

The visible part

The value locked on the balance sheet

What adds to it, and stays out of sight

  • Locked-up cash

    Cash that funds neither working capital nor growth.

  • Storage space

    Floor space and handling taken from what actually sells.

  • Obsolescence and expiry

    Value melts over time, sometimes down to zero.

  • Insurance and handling

    Recurring costs proportional to the volume held.

  • Opportunity cost

    The return that cash would earn funding something else.

Supply chain practitioners put the annual holding cost at 15 to 25 % of stored value, on top of the frozen cash.

Locked-up cash first: that money sleeps instead of funding your working capital or your growth. Then storage space, taken up at the expense of what actually sells. The risk of obsolescence and expiry, which melts the value over time, sometimes down to unsellable. Insurance and handling, proportional to volume. And opportunity cost, the return that money would earn funding something else.

Supply chain practitioners generally put the total annual holding cost at 15 to 25 % of stored value. Purely as an illustration, and presented as such: 60,000 € of dormant stock represents roughly 9,000 to 15,000 € of cost per year, on top of the frozen cash. The exact figure matters less than the order of magnitude: dormant stock doesn't sleep for free, it costs you every month you keep it.

Reduce it: 5 actions, from the most profitable to the most radical#

Once the dormant stock is identified and quantified, here are five levers, ranked from the most profitable to the most radical.

  1. Reactivate it commercially. Targeted promotions, in-store or e-commerce highlighting, bundles with your best-sellers to clear dormant items in the wake of what already sells. It's the lever that destroys the least value: start here.
  2. Negotiate supplier returns. More often possible than people think, especially on recent references, even with a discount. A supplier often prefers to take goods back rather than lose a customer.
  3. Resell through a secondary channel. Liquidators, B2B marketplaces, staff sales. You recover a fraction of the value, but you free up cash and space immediately.
  4. Fix the upstream cause. Your reordering rules (minimum, maximum, reorder points) have often never been revisited since go-live. Dormant stock that rebuilds itself is not a sales problem, it's a configuration problem. As long as the upstream cause remains, you'll empty the same stock again in six months.
  5. Accept the write-off. Scrapping with a clean accounting entry. Unsellable stock kept on the balance sheet is an illusion of value, not an asset. A word of caution: have the accounting and tax treatment of that write-off validated by your accountant before recording it.

Prevent: the routine that stops dormant stock coming back#

Reducing dormant stock once is pointless if it grows back. Prevention rests on three simple commitments: a monthly review of the three numbers from the second section, an alert threshold decided in advance (for example, dormant stock above a certain percentage of total stock), and a named owner who looks at that figure every month.

Dormant stock is, in fact, one of the seven numbers we recommend tracking in our article on the KPIs an SMB leader should read every Monday: it belongs to the same family of cash signals that need continuous watching, not a once-a-year glance at inventory time. It's exactly the kind of monitoring an AI agent plugged into Odoo handles without thinking, every Monday morning, with no human having to re-run the export.

Conclusion#

Dormant stock doesn't show up in daily work, it shows up in the cash. The method comes down to three moves: value the stock, date the last outbound movements, cross the two. The rest is decisions: which threshold, which items, which lever. If gathering the number is the obstacle that has stopped you doing this until now, that's exactly what the UpBoard scan automates: it identifies the dormant stock in your Odoo in 8 minutes, read-only, estimated value included. Enough to turn an annual chore into a monthly reflex.

See what your Odoo data has to tell you

A 30-minute demo on your own data, leave with your first quantified opportunities.