Two ways to count inventory in Odoo#
Odoo supports two inventory counting approaches:
- Full physical inventory: count all products across all locations at once - typically annual or semi-annual
- 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:
- Stock moves that adjust the on-hand quantity to match your count
- Journal entries that post the inventory gain or loss
Journal entries for discrepancies#
| Scenario | Debit | Credit |
|---|---|---|
| Stock loss (counted less) | Inventory Loss/Adjustment Account | Stock Valuation Account |
| Stock gain (counted more) | Stock Valuation Account | Inventory 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:
- Use the Last Count Date filter to find products not counted since your target interval
- Create location-based count sessions that cover one zone per day
- 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.

