All posts
General7 min read

Running a physical inventory count in Odoo: adjustments, cycle counts, and discrepancy handling

Odoo's inventory adjustment tools let you count stock by location, freeze quantities during counting, and automatically post the journal entries for any discrepancies found. This guide covers the full count workflow, cycle counting strategies, and how Odoo accounts for inventory differences.

Two ways to count inventory in Odoo#

Odoo supports two inventory counting approaches:

  1. Full physical inventory: count all products across all locations at once - typically annual or semi-annual
  2. Cycle counts: count a subset of products or locations on a rotating schedule - more accurate and less disruptive

Both use the same inventory adjustment workflow.

Starting an inventory count#

Navigate to Inventory → Operations → Physical Inventory (Odoo 16+) or Inventory → Operations → Inventory Adjustments (earlier versions).

The view shows all products with their current system quantity (the "On Hand" figure Odoo expects to see).

Filtering your count#

For a full count: leave filters empty to show all products.

For a cycle count or location-specific count:

  • Filter by Location to count a single zone or bin
  • Filter by Product Category to count a product family
  • Filter by Last Count Date to find products not counted recently

Locking inventory during the count#

During a physical count, goods should not move in or out of the locations being counted. Odoo does not automatically lock stock moves during an inventory count, so operational discipline is required - coordinate with warehouse staff to hold shipments during the count window.

Entering count results#

In the Physical Inventory view, each product line shows:

  • Product: what is being counted
  • Location: where it is counted
  • Lot/Serial: if lot-tracking is enabled
  • On Hand Quantity: what Odoo thinks is there
  • Counted Quantity: what you physically found (fill this in)
  • Difference: calculated automatically

Scan barcodes with a warehouse scanner connected to Odoo, or enter quantities manually.

Handling discrepancies#

After entering all counts, review the Difference column:

  • Positive difference: you found more than the system expected (stock gain)
  • Negative difference: you found less than the system expected (stock loss)

Common causes:

  • Receiving errors (goods received without being entered)
  • Picking errors (wrong items picked and not corrected)
  • Theft or damage
  • Products in wrong location
  • System entries in wrong unit of measure

Investigate significant discrepancies before validating the adjustment.

Validating the adjustment#

Click Apply All to post the inventory adjustments. Odoo creates:

  1. Stock moves that adjust the on-hand quantity to match your count
  2. Journal entries that post the inventory gain or loss

Journal entries for discrepancies#

ScenarioDebitCredit
Stock loss (counted less)Inventory Loss/Adjustment AccountStock Valuation Account
Stock gain (counted more)Stock Valuation AccountInventory Loss/Adjustment Account

The Inventory Loss/Adjustment Account is configured on the product category. Under perpetual valuation, these entries post at the current AVCO cost or standard cost of the product.

Cycle counting#

Cycle counting means counting a fraction of your inventory continuously rather than stopping everything once a year. A common approach:

  • A-category products (high value, high turnover): count monthly
  • B-category products: count quarterly
  • C-category products: count annually

To implement this in Odoo:

  1. Use the Last Count Date filter to find products not counted since your target interval
  2. Create location-based count sessions that cover one zone per day
  3. Assign responsibility to specific warehouse staff for each zone

Inventory accuracy reporting#

After validating adjustments, run Inventory → Reporting → Inventory Adjustments to see all historical adjustments.

Key metrics to track:

  • Inventory record accuracy (IRA): percentage of counted locations that matched the system quantity exactly
  • Adjustment value by period: total financial impact of discrepancies per quarter
  • Adjustment by product category: which categories generate the most discrepancies

High discrepancy rates in specific categories often point to process problems (receiving, picking, UOM errors) rather than actual losses.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free