Home / Odoo Problems / Inventory
Odoo Inventory

Odoo Inventory Not Updating: Causes & Solutions

By Odoobots ERP TeamUpdated September 20267 min readApplies to Odoo 14–19, Community & Enterprise
TL;DR

In 9 out of 10 cases, Odoo inventory "not updating" is not a bug — it is an unvalidated transfer or a product set as Consumable instead of Storable. Check those two first. The other causes below cover multi-warehouse routing, reservation confusion and inventory adjustments that were counted but never applied.

First, confirm the symptom

  • You sold or delivered goods, but On Hand quantity did not decrease
  • You received a purchase, but stock did not increase
  • Manufacturing finished, but finished goods show zero
  • Physical godown stock and Odoo stock disagree, and the gap keeps growing
  • Stock updates for some products but not others

That last symptom — some products update, others never do — almost always means cause #2 below. Work through the list in order; each check takes under two minutes.

1. The transfer was never validated

Odoo only moves stock when a transfer is Done. A delivery or receipt sitting in Draft, Waiting or Ready has moved nothing — even though the sales order looks confirmed and the invoice may already be paid. Teams that live in the Sales app and never open Inventory hit this constantly.

Fix
  1. Open Inventory → Overview and look at the Receipts and Delivery Orders cards — the "Late" and "Waiting" counters are your backlog.
  2. Open each pending transfer, verify quantities, and click Validate.
  3. For the future: agree on who validates transfers, or enable barcode scanning so validation happens at the gate.
Odoo Inventory Overview screen with Receipts and Delivery Orders cards showing waiting and late transfer counters
Inventory → Overview: the Receipts and Delivery Orders cards show every transfer still waiting for validation — this backlog is your "missing" stock.
CarefulDo not bulk-validate months of old transfers blindly — validation posts stock moves (and journal entries under automated valuation) on the scheduled date. Reconcile old ones with an inventory adjustment instead.

2. The product type is Consumable, not Storable

Odoo tracks quantity only for Storable products (called "Goods" with "Track Inventory" in Odoo 17+). A Consumable product can be bought and sold all day — Odoo will never count it. If a product's page shows no On Hand button at all, this is your cause.

Fix
  1. Open the product: Inventory → Products → Products.
  2. On the General Information tab, change Product Type from Consumable to Storable Product (or enable Track Inventory in newer versions).
  3. Set the real opening quantity with Update Quantity on the product form.
Odoo product form showing the Product Type field with Goods selected, Quantity On Hand and Forecasted units
The product form: Product Type must be Goods / Storable with inventory tracking on. Note the top buttons — 16 units On Hand vs −11 Forecasted: the difference is reserved outgoing stock (cause #3).
TipImport checklist: when products are imported from Tally or Excel, the type column silently defaults to Consumable. Audit with a filter on Product Type before go-live — we see this in almost every rescue project.

3. Reserved quantity is being read as sold quantity

When an order is confirmed, Odoo reserves stock but does not remove it — On Hand stays the same while Forecasted drops. Users comparing On Hand against what they expected after "selling" conclude stock is not updating, when actually the delivery just has not happened yet (see cause #1).

Fix
  1. Read the right number: On Hand = physically present; Forecasted = on hand − outgoing + incoming.
  2. Click the product's Forecasted report to see exactly which documents are holding the difference.
  3. Train the sales team to quote from Forecasted, not On Hand.

4. The inventory adjustment was counted but never applied

Physical counts entered in Inventory → Operations → Physical Inventory do nothing until each line is Applied. It is very common to find dozens of counted lines from stock-audit day sitting unapplied — the team assumed typing the number was enough.

Fix
  1. Open the adjustment lines, review Counted Quantity vs On Hand, and click Apply.
  2. Investigate large differences before applying — an apply writes off the gap permanently (and hits your stock valuation account under automated valuation).
Odoo Physical Inventory screen with On Hand, Counted and Difference columns and the Apply All button
Inventory → Operations → Physical Inventory: counted lines do nothing until Apply (or Apply All, top-left) is clicked — the most common "we counted but nothing changed" trap.

5. Multi-warehouse or route misconfiguration

With multiple warehouses or locations, stock often is updating — in a location nobody looks at. Two-step receipts park goods in Input, returns sit in a return location, and a wrongly configured route delivers from the wrong warehouse entirely. Branch stock then looks frozen while a staging location quietly accumulates everything.

Fix
  1. Check per-location stock: Inventory → Reporting → Stock by Location (enable Storage Locations in Settings first).
  2. Look for quantities stuck in WH/Input or WH/Pre-Processing — the internal transfer to final stock was never validated.
  3. Review warehouse steps in Inventory → Configuration → Warehouses — if you do not need 2-step receipts, switch back to 1-step.

6. Backdated documents and locked periods

If transfers are validated with a scheduled date in a closed/locked accounting period, or users backdate documents inconsistently, reports filtered by date will disagree with current On Hand — which reads as "inventory not updating" in month-end reviews even though live stock is correct.

Fix
  1. Compare the live quantity (Inventory → Reporting → Stock) with the dated report you are questioning — note the as-of date.
  2. Standardise: transfers get validated on the day they physically happen. Backdating is the exception, approved by one person.
Checked all six and stock is still wrong?

Then the problem is in your data or customization layer — duplicated products, broken custom modules overriding stock moves, or a migration that imported moves without quants. That is exactly what our rescue service finds. Same-day diagnosis, written fix plan with costs, no re-implementation unless truly needed.

Get a same-day diagnosis or WhatsApp +91 98414 81435

Frequently asked questions

Does Odoo update inventory automatically when I invoice?

No. Invoicing is a financial document; stock moves only when the related delivery or receipt transfer is validated in the Inventory app. The two are deliberately separate.

Why does stock update for some products but not others?

Almost always product type: the ones that update are Storable, the ones that never move are set as Consumable. Filter your product list by type and correct the imports.

We migrated from Tally — opening stock never matched. Can that be fixed now?

Yes. A one-time reconciled inventory adjustment, done location-wise against a physical count, resets the baseline. We do this routinely in Tally-to-Odoo rescues without disturbing your accounting history.