A common complaint from finance managers: "the inventory value on the balance sheet does not match the warehouse report." The cause is rarely a system bug; it is usually an unintended choice of valuation method, accounts or entry timing. This article explains how inventory connects to accounting in Odoo, based on the official Odoo 19 inventory valuation documentation, with practical setup advice.
The basic idea: every stock move has a value
When you receive, deliver, transfer or scrap goods, Odoo records the quantity and values it according to the costing method. The accounting question is when and how that value reaches the journal entries, which depends on the valuation type.
Periodic vs perpetual valuation
| Periodic (at closing) | Perpetual (at invoicing) | |
|---|---|---|
| When is inventory value updated in accounting? | Only when closing entries are generated | When vendor bills and customer invoices are posted |
| When is the expense recorded? | The expense account is debited when the vendor bill is posted | COGS is debited when the customer invoice is posted |
| Usually associated with | Continental accounting | Anglo-Saxon accounting |
Important for anyone coming from older versions: since Odoo 19, perpetual valuation affects the stock valuation account at invoice level, whereas earlier versions posted an entry at each stock move. With the closing process, receipts and deliveries not yet invoiced are also updated.
Inventory-related accounts
- Valuation account: inventory value as a current asset on the balance sheet.
- Variation account: inventory change for the closing period. An expense account under Continental periodic; under Anglo-Saxon perpetual it can be an interim current asset or an expense account.
- COGS: debited when customer invoices are posted under perpetual valuation.
- Inventory loss and cost of production: set per location.
- Price difference account: optional, for perpetual valuation with standard price, to track gaps between standard cost and the vendor bill.
Defaults live in Accounting ‣ Configuration ‣ Settings, Inventory Valuation section, and can be overridden on each product category, which is the setting most often forgotten when new categories are created.
Costing methods: Standard, AVCO, FIFO
- Standard price: a fixed cost you set manually, never recalculated by operations. Suits internally manufactured goods with a standard cost.
- Average cost (AVCO): recalculated on each receipt; deliveries use the current average. Common in trading and distribution.
- FIFO: each incoming batch keeps its own value; deliveries consume the oldest first. Suits products with volatile prices or expiry dates.
A note from the documentation: the product's Cost field shows an average even under FIFO, so it can differ from the valuation layers.
Landed costs
For Saudi importers this is essential: freight, customs, clearance and insurance are part of the cost of goods. According to the landed costs documentation:
- Enable Landed Costs in Inventory settings and choose the default journal.
- Create a service product for each cost type (freight, clearance...) and tick "Is a Landed Cost".
- Choose a split method: Equal, By Quantity, By Current Cost, By Weight or By Volume.
- Add the cost as a line on the vendor bill, click "Create Landed Costs", select the validated receipt, click "Compute", review the valuation adjustments, then "Validate" to post the entry.
A key requirement: products on the purchase order must be in a category using AVCO or FIFO. In Odoo 20, landed costs can be added to individual products of a transfer, and a new "Valuation Adjustments" menu lists cost adjustments and their impact. For customs brokers, see customs clearance solutions.
Practical setup advice
- Decide the valuation method before the first move. Changing it later is possible but creates revaluation entries and needs accounting review.
- Keep product categories few and clear, and review accounts and costing method in each.
- Reconcile opening balances: load quantities at correct cost and match inventory value with the trial balance before go-live.
- Close monthly: generate closing entries and reconcile the valuation report with the inventory account every month.
- Train the warehouse on the financial impact of their work: a wrong receipt quantity or an unexplained adjustment shows up in the accounts.
- Record import costs promptly, ideally before the goods are sold, so cost of sales reflects reality.
For recent improvements, see Odoo 19 features and our Odoo 20 guide.
FAQ
Which valuation method suits a trading company?
It depends on your products, company policy and external auditor. AVCO and FIFO are both common in trading; decide with your accountant before go-live.
Why does inventory value not match the accounts?
Common causes: closing entries not generated under periodic valuation, categories with different accounts, unreconciled opening balances, or import costs not allocated.
Are landed costs available in every edition?
The stock_landed_costs module is in Odoo's public repository, but full Accounting is an Enterprise app. See Odoo Community vs Enterprise.
Next step
Setting up inventory and accounting together is one of the key decisions in an Odoo project. Maham Pro, an official Odoo partner at Ready Partner level, can design the setup and reconcile balances as part of our Odoo service. See packages or book a free 30-minute introductory session.
Sources: Inventory valuation, Landed costs, Valuation cheat sheet, Odoo 20 Release Notes. Reviewed November 2026.
