This guide shows how to see what your stock is worth, product by product, in Odoo 19, and how to make that figure agree with the inventory balance on your balance sheet. The short answer: the per-product valuation is under Inventory > Reporting > Stock, which lists a unit cost and a total value for every product and can show any past date. If the total does not match your accounts, the usual cause is a valuation setting on your product categories.
It is written for accountants, controllers and owners, including anyone moving from Odoo 18. The steps were verified on Odoo 19.
Before you start
- Version and edition: Odoo 19. The Stock report with values works in Community and Enterprise. The Inventory Valuation report in Accounting and the scheduled closing setting described below are part of Enterprise.
- Apps: Inventory and Accounting (called Invoicing in Community). The value columns only appear when both are installed.
- Access rights: the Reporting and Configuration menus in Inventory need the Inventory Administrator role. The valuation setting on a product category is visible to Inventory Administrators and users with accounting access, and saving a change to a category needs the Products right set to Create. The Accounting settings need an accounting administrator who also has access to Settings.
- Products must be tracked: only products with Track Inventory ticked on the product form are counted.
- Terms used: the stock valuation account is the balance sheet account that holds the value of your inventory. The costing method is how Odoo works out a unit cost: standard price, average cost (AVCO) or first in, first out (FIFO). A stock closing is a journal entry that brings the stock valuation account up to date with the stock you hold.
Where the per-product valuation lives in Odoo 19
Odoo 19 removed the valuation records that sat behind the Odoo 18 Valuation screen. The report under Accounting > Review > Inventory Valuation is now an accounting summary with Initial Balance, Stock Variation and Ending Stock lines, used to create the stock closing rather than to read value product by product.
The product-level view is the Stock report in the Inventory app, which carries two value columns, both shown by default:
- Unit Cost: the cost Odoo is carrying for one unit of the product.
- Total Value: the value of the quantity on hand, with a sum at the bottom of the column.
Each figure can be clicked. Clicking a Unit Cost opens Unit Cost History, a movement-by-movement record of how the cost was built up. For products on FIFO, this link is disabled. Clicking a Total Value opens the Valuation list of that product's incoming receipts that still carry remaining value, which make up the current value.
How to value stock as at a balance sheet date
- Open the Inventory app and go to Reporting > Stock. A list of tracked products appears with quantities, Unit Cost and Total Value.
- Click Inventory at Date at the top of the list. A small window opens with a date and time field.
- Choose the moment you want, for example the end of the last day of your period, and confirm. The list reloads, titled with that date and time.
- In the search bar, open the options and group by Product Category. Each category now shows a subtotal of Total Value.
- Read the Total Value sum at the foot of the list. This is your inventory value at that date.
Values are recalculated for the chosen moment, not only quantities.
Why the total may not match your stock valuation account
Each product category has an Inventory Valuation setting with two options in Odoo 19:
- Periodic (at closing), the default: receiving or shipping stock does not post anything to the stock valuation account. Odoo proposes the entry in the Inventory Valuation report, and the ledger only changes when a stock closing is posted.
- Perpetual (at invoicing): Odoo posts the valuation entry automatically when the product is billed or invoiced.
So if your categories are on Periodic and no closing has been posted, the stock valuation account will not match the Stock report, and no report or custom field can fix that, because the entries were never posted. Either of the two options below brings the account in line.
Option 1: post a stock closing
- Open the Accounting app and go to Review > Inventory Valuation.
- Set the report date to the end of your period.
- Click Generate Entry. Odoo creates a journal entry referenced Stock Closing, in draft, and opens it.
- Review the lines and post the entry. The stock valuation account now reflects stock up to that date.
To automate this in Enterprise, open the Accounting app, go to Configuration > Settings, and find the Inventory Valuation section. Its Periodic Valuation option offers Manual, Daily or Monthly. Daily and Monthly create and post the closing automatically, Monthly on the last day of the month. Manual, the default, leaves the closing to you.
Option 2: switch categories to perpetual valuation
- Open the Inventory app and go to Configuration > Products > Categories.
- Open a category that holds tracked stock.
- In the Inventory Valuation group, set Inventory Valuation to Perpetual (at invoicing).
- Save, and repeat for each category.
On Perpetual, vendor bill lines for the product are booked to the stock valuation account, and customer invoices post the cost of goods sold against it. The entry follows the invoice, not the stock move, so a receipt that has not been billed yet appears in the Stock report but not in the account until the bill is posted. Moves to or from a location that has its own valuation account, such as an inventory loss location, can still post at the time of the move.
Check that it worked
- In the Inventory app, run Reporting > Stock with Inventory at Date set to your period end and note the Total Value sum.
- In Enterprise, open the Accounting app, go to Reporting > Balance Sheet for the same date, and find the stock valuation account. To confirm which account that is, open a product category: it is the Stock Account field in the Account Properties section.
- If you use Periodic, open Review > Inventory Valuation and click Generate Entry again. If everything has been closed, Odoo shows the message "Everything is correctly closed" instead of creating a new entry.
The two figures should agree. On Perpetual, a remaining difference should trace to receipts not yet billed.
Common mistakes to check first
- Products missing from the list. Products without Track Inventory ticked do not appear and carry no stock value.
- The valuation field is not visible. Without Inventory Administrator or accounting access, a category shows the costing method but not the Inventory Valuation setting.
- The closing entry was generated but not posted. Generate Entry creates a draft, and a draft entry does not change the balance sheet until it is posted.
- Closing an earlier period after a later one. Odoo blocks a closing dated before an existing closing entry. Cancel the later closing first, then generate the earlier one.
Steps verified on Odoo 19. Menus and labels can differ on other versions.
Common questions
Where is the inventory valuation by product in Odoo 19?
Open the Inventory app and go to Reporting > Stock. With Accounting installed, the list shows Unit Cost and Total Value for each tracked product, and Total Value sums at the bottom.
Why does the stock valuation account in Odoo 19 not match the inventory value?
Product categories set to Periodic (at closing) post no valuation entry when stock moves. The account only updates when a stock closing is generated and posted from Accounting > Review > Inventory Valuation, or when a scheduled Daily or Monthly closing runs in Enterprise.
Can Odoo 19 show inventory value at a past date?
Yes. In the Inventory app, open Reporting > Stock, click Inventory at Date and choose a date and time. Both quantities and values are recalculated for that moment.
What is the difference between Periodic (at closing) and Perpetual (at invoicing) in Odoo 19?
They are the two Inventory Valuation options on a product category. Periodic posts the inventory value to the ledger only through a stock closing, while Perpetual posts it automatically when the product is billed or invoiced.
Why is the Unit Cost on the Odoo 19 Stock report not clickable for some products?
The Unit Cost History drill-down is disabled for products costed on first in, first out (FIFO). It is available for products on other costing methods, such as average cost.
Talk to the team.
If you are setting this up, or Odoo is not behaving the way this guide describes, book a 30-minute call. We will look at your configuration and tell you what it needs. Calgary studio, in-house team, no offshore handoffs.
Book the call →