Skip to Content

Inventory management in Odoo: from reorder point to stocktaking

How to get a grip on stock with Odoo, without stalled orders or unnecessary inventory costs
September 25, 2026 by
Inventory management in Odoo: from reorder point to stocktaking

Your sales team promises delivery within five working days, but at picking the item turns out to be out of stock. The customer waits, the sale is at risk, and nobody knows why it was not reordered in time. Or the opposite: your warehouse is full of items that barely move, capital tied up while you badly need it elsewhere. Both scenarios are symptoms of the same problem: inventory management that does not match how your business actually operates.

Odoo offers a fully integrated inventory module that records everything from purchase order to physical count. But setting up the system is one thing; making it work the way your business works is another. In this article I walk through the whole chain: how to set up reorder points so that they work, which replenishment rules to use when, how to configure routes for multi-tier distribution, and how to carry out stock counts without bringing your daily operations to a halt.

Reorder points: when automatic replenishment does and does not work

A reorder point (reorder rule) automatically triggers a purchase order or manufacturing order as soon as stock falls below a set level. Simple in theory; in practice its effectiveness depends on three variables: your supplier's lead time, the variation in your sales volume, and the cost of a stockout versus the cost of overstock.

Say you sell LED panels with a steady demand of twenty units a week. Your supplier delivers within two weeks, and you never want to run out of stock. You then set the minimum to forty units (two weeks' cover) and the maximum to eighty (four weeks). As soon as stock drops below forty, Odoo generates a proposal to replenish up to eighty units. That logic works very well for A items with predictable demand.

But take an item you only sell occasionally: a special connector of which you sell ten, then nothing for three months, and then fifteen again. Automatic replenishment fails here because the system extrapolates linearly. You end up with either chronic overstock or chronic shortages. For B and C items like these, manual approval of purchase proposals is more effective than fully automated replenishment. Odoo supports both: you mark the rule as automatic or as 'manual', in which case the planner reviews the proposals every day.

How exactly do you set up a reorder rule?

You find reorder rules under Inventory > Configuration > Reordering Rules. For each product you can create several rules, each for a specific location. The most important fields are Minimum Quantity, Maximum Quantity, Quantity Multiple (convenient multiples, such as full pallets), and the Route, which determines whether goods are purchased, manufactured or moved between warehouses.

The Lead Time is crucial: if your supplier needs fourteen days and you set it to seven, the system will order too late. Odoo takes this value from the vendor information on the product page, but you can override it per rule. Note: by default the scheduler runs once a day. If you need real-time replenishment — for example with drop-shipping — you can also trigger the scheduler manually, but that increases the system load considerably.

The Route determines what happens: 'Buy' generates a Request for Quotation, 'Manufacture' creates a manufacturing order, and 'Resupply from [location]' creates an internal transfer. For companies with several warehouses you can set up cascading routes: if warehouse B drops below its minimum, it replenishes from warehouse A, and warehouse A replenishes from the supplier. This only works well if you also set the lead times between locations correctly.

Where it goes wrong in practice

Incorrect lead times in the master data

You have set up reorder points, but the scheduler systematically orders too late. Cause: the lead time on the supplier is set to seven days, but in reality it takes fourteen days including customs and transport. Odoo calculates with the value that has been entered, not with reality. Fix this by setting a realistic lead time for each supplier under Purchase > Configuration > Vendors, and check for each product that the correct supplier is marked as the primary vendor.

Too many reorder rules for variants

You sell T-shirts in five sizes and ten colours, so fifty variants. You create a reorder rule for each variant, and within a month you have two hundred rules that override each other because the scheduler is not smart enough to group variants. Solution: work with a single rule on the parent product and use kit BoMs or phantom BoMs to assemble variants just in time, or accept that you have to manage the most important variants manually and order the rest on demand.

No allowance for seasonal patterns

Your reorder point is geared to average sales, but in December your turnover is three times that of February. The scheduler only sees demand when it arises, so you still end up with stockouts in November. Odoo has no built-in seasonal adjustment; you have to anticipate this by manually raising your minimum levels temporarily ahead of the peak season, or by using an external demand planning tool that pushes forecast demand into Odoo via an API.

Routes and location structure for multi-tier distribution

As soon as you have more than one warehouse, or work with consignment stock or dropshipping, routes become the nervous system of your inventory process. A route is a series of steps a product goes through from supplier to end customer. Odoo supports multi-step routes: for example receipt > quality control > storage, or sale > pick > pack > shipping.

For a webshop with a central warehouse and two regional hubs, you set this up as three locations, each with its own stock. The webshop order triggers a picking at the nearest hub. If there is no stock there, Odoo falls back on the central warehouse (you configure this via the 'Resupply Subcontractors' route). The central warehouse in turn replenishes from the supplier. This only works if you have the right reorder rules for each location and the routes are correctly prioritised: otherwise the system ships everything from the central warehouse, even when the regional hub is fully stocked.

In practice I often see companies create too many locations. Every extra location means extra administration, extra counts and a higher chance of inconsistencies. Start with no more than three locations: receipt, stock and shipping. Only when you can demonstrate that you are losing money through a lack of clarity do you add sublocations such as shelves, pallet spaces or quarantine zones.

Fact: Companies with more than five stock locations in Odoo spend on average 40% more time on stock corrections than companies with three locations, while their stock accuracy is not significantly better.

Stocktaking without downtime: cycle counts and full counts

A large annual count for which the warehouse closes for a weekend is costly and disrupts your promise to customers. Odoo supports cycle counts: each week you count a small part of your stock, so that over the course of the year you have covered everything without ever shutting down. Set a counting frequency per product — A items every month, C items every quarter — and the system automatically generates counting tasks.

You start a cycle count via Inventory > Operations > Physical Inventory. Odoo shows the current book stock and asks for the physical count. If the count differs, you record the difference and choose a reason: theft, breakage, administrative error. You can analyse those reasons later to identify structural problems. Only when you confirm the difference does Odoo post the correction definitively.

For a full year-end close you generate a single count of all products. Odoo does not block any movements — you have to do that manually by postponing incoming and outgoing transfers — but the system does flag which products have had movements since the count started. You either recount those or accept the discrepancy. In practice, you have the warehouse clear all outgoing deliveries the day before the count and block new receipts until the count is finished.

Integration with purchasing, sales and manufacturing

Inventory management does not stand on its own. A sales order triggers a delivery, which in turn can activate a reorder rule. A manufacturing order consumes raw materials and adds finished products. A purchase order increases the expected stock before the goods have even been received, so that Odoo takes stock in transit into account when calculating reorder points.

That link is powerful, but it calls for clear agreements. For example: may a salesperson confirm an order if the stock is not there? In Odoo you control this with the option 'Prevent sales order confirmation if not enough inventory'. If you switch it on, a salesperson cannot confirm unless the stock is physically present or has already been purchased. If you switch it off, the salesperson can confirm and the system assumes the stock will be there in time — a promise to deliver that you have to make good through your purchasing.

The same applies to manufacturing: Odoo checks whether all components are available before a manufacturing order can start. If they are not, the system automatically generates purchase proposals for the missing components, provided the reorder rules have been set up correctly. In companies with complex bills of materials, that quickly leads to hundreds of small purchase orders. It is more efficient to work with a make-to-order strategy for finished products and a make-to-stock strategy for frequently used semi-finished products.

Reporting: which figures you really need

Odoo offers dozens of inventory reports, but four are essential. First, the Inventory Valuation: what is your stock worth under FIFO, LIFO or average cost? That value must reconcile with your balance sheet every month. Second, the Stock Moves: a transaction log of every movement, from purchase to sale to correction. This is where you trace discrepancies.

Third, the Forecasted Inventory: what do you expect to have in two weeks' time, taking into account open sales, purchase and manufacturing orders? This report is crucial for planning, but only reliable if your lead times and reorder rules are correct. Fourth, the ABC analysis: classify your items by turnover rate and margin contribution. A items you automate fully; C items you order manually or against customer orders.

In addition, the Inventory Accuracy metric is important: what percentage of your products have the correct stock level? Measure this after each cycle count by dividing the discrepancies by the total number of products counted. Aim for at least 95% accuracy. If you are below that, your process is too weak and every replenishment rule costs you more than it delivers.

Getting started with inventory management in Odoo

Start with a clean opening balance. Import your current stock via a CSV file with product, location and quantity. Check that every product has a cost price; without a cost price Odoo cannot calculate the stock value. Then set up reorder rules with realistic minimum and maximum levels for your ten most important products — your A items. Let the scheduler run for a week and check whether the proposals make sense.

Only then do you extend this to B items. For C items and occasional sales you work without automatic replenishment; you order those at the moment a sales order comes in. At the same time, set up your first cycle count: select ten products a week and have the warehouse count them. Within a month you will have a picture of your stock accuracy and know where the largest discrepancies are.

Inventory management in Odoo is not a one-time setup, but an ongoing process of measuring, adjusting and refining. The software provides the tools; the skill lies in tuning them to your product mix, your suppliers and your promise to the customer.

Photo: Markus Winkler on Unsplash

Odoo consultant specialising in finance: what does it deliver?
Why financial expertise makes the difference in your Odoo implementation