Every Odoo project we have configured eventually comes down to one question the finance team asks on day one of go-live: why did this product's cost just change. The answer is almost always the costing method attached to the product category, not a bug. Odoo inventory valuation is not a single setting. It is a decision about which of three methods, FIFO, average cost (AVCO) or standard price, matches how your business actually buys, sells or builds things. That decision drives the journal entries behind every delivery and every vendor bill.
We have implemented all three methods across trading companies, distributors and manufacturers in Bangkok, Delhi NCR and New York. The pattern is consistent. A method that works beautifully for a retailer often causes constant variance noise for a factory, and vice versa. Below is how each one actually posts in Odoo, where we have seen it go wrong, and which one we recommend by business type.
How Odoo inventory valuation actually works
Before comparing methods, it helps to separate two things people often confuse. One is the costing method: FIFO, AVCO or standard. The other is the accounting method: periodic versus automated or perpetual. The costing method decides what number gets attached to each unit leaving the warehouse. The accounting method decides whether that number posts to the general ledger automatically on every stock move, or only in bulk at period end through a manual journal entry.
Most of our clients use automated or perpetual valuation. It keeps the balance sheet current without waiting for an accountant to run a month-end script. That choice is set per product category, alongside the costing method itself. A single company can legitimately run FIFO on finished goods and average cost on raw materials at the same time.
FIFO costing in Odoo inventory valuation
FIFO assumes the oldest stock on hand is the first to leave. Odoo tracks this at the level of individual receipt layers. A sales order shipped today could legitimately draw its cost from a purchase made three months ago, if that lot has not yet been fully consumed.
In accounting terms, every delivery order debits Cost of Goods Sold and credits the Stock Valuation account, using the exact cost of the specific incoming layer it consumes. If you sell more units than you have receipt history for, Odoo creates a negative stock layer. It corrects this retroactively once a new receipt is validated. That can quietly adjust a prior period's COGS if your books are not locked. This is the single biggest FIFO trap we see in Thai import businesses that receive containers irregularly and sell steadily in between.
FIFO fits trading and distribution businesses well for a few reasons:
- Landed costs, freight and customs duty attach cleanly to a specific receipt and travel with that layer through to the sale.
- Margin reporting reflects the real cost of the batch sold, which matters when purchase prices swing with currency or commodity movement.
- It satisfies tax authorities in several jurisdictions that expect an actual-cost flow assumption rather than an estimate.
The trade-off is reporting complexity. Two reports run an hour apart on the same day can show different valuation, if a receipt was backdated in between. Finance teams new to FIFO find that unsettling until they understand the layer mechanism.
Average cost (AVCO) as a middle-ground valuation method
Average cost recalculates a single running cost per unit every time stock comes in. It blends the new receipt quantity and value with whatever was already on hand. Every unit leaving the warehouse after that point uses the same blended figure, whether it physically arrived last week or last year.
This produces far smoother journal entries. COGS moves gradually as purchase prices shift, instead of jumping lot by lot, and that makes gross margin trend lines easier to read month over month. We generally recommend AVCO for:
- Wholesale distributors carrying hundreds of SKUs where a cost-per-lot audit trail is not commercially necessary.
- Businesses whose purchase prices are reasonably stable, so the averaging effect does not mask real margin pressure.
- Teams that find FIFO's layer corrections harder to explain to a non-technical finance manager.
One genuine downside is that average cost can mask the impact of a single bad purchase. If a buyer accepts one overpriced shipment, the effect spreads thinly across every future sale of that product, instead of showing up clearly against the batch that caused it. If your purchasing team needs to see that signal immediately, FIFO will surface it faster than AVCO will.
Standard price for Odoo inventory valuation in manufacturing
Standard price fixes a cost per unit that you set manually and review periodically, independent of what you actually paid on the last purchase. Every receipt and every delivery posts at that fixed number. Any difference between the standard cost and the real purchase price lands in a dedicated price difference account, rather than adjusting the product's valuation directly.
This is the method we reach for almost every time a client runs a bill of materials. Manufacturing cost roll-ups depend on stable component costs to produce a usable standard cost for the finished good. If raw material cost moved every time a vendor bill was entered, the BOM cost of every finished product would shift constantly, and that makes it nearly impossible to quote jobs or evaluate production variances cleanly. Standard price keeps the manufacturing cost model still long enough to analyze it.
The honest limitation here is that someone has to own the number. Standard costs that are never revisited drift away from reality. A factory still using a three-year-old steel price will show artificial margin swings that have nothing to do with actual performance. We tell every manufacturing client to put a standard cost review on the calendar, usually quarterly or at each major price change from a key vendor. This is part of the same discipline we apply during Odoo implementation projects, and it matters just as much in Odoo manufacturing environments with multi-level BOMs.
A side-by-side view of FIFO, average cost and standard price
| Factor | FIFO | Average cost | Standard price |
|---|---|---|---|
| Best fit | Trading, import/export | Wholesale, distribution | Manufacturing with BOM |
| Cost volatility reaction | Reflects it immediately, lot by lot | Smooths it gradually | Absorbed into variance account |
| Reporting complexity | Higher, layer-based | Low | Moderate, needs variance review |
| Negative stock risk | Retroactive cost correction | Simpler correction | No correction, fixed cost used |
| Who should own it | Purchasing + finance together | Finance | Manufacturing + finance together |
Where Odoo inventory valuation shows up in the chart of accounts
Regardless of method, automated valuation touches the same core accounts: Stock Valuation (an asset), Stock Interim Received, Stock Interim Delivered, and Cost of Goods Sold. What differs is the number written into those entries and how often it changes. We walk every new client through a handful of real transactions before go-live: a purchase, a sale, a return, a manufacturing order. The finance team sees their own numbers moving through the accounts, not a generic example. That walkthrough matters more than the method choice itself. Teams that understand the mechanism catch valuation issues during the first week, instead of discovering them at the first audit.
Changing your valuation method later
Switching a product category's costing method is a prospective change in Odoo. Stock already on hand keeps its recorded value, and only moves made after the change use the new method. That is good news if you want to migrate gradually. It also means a mixed valuation history sits in your reports for a while. That needs a note to the auditor explaining why the method changed mid-year. We handle these transitions as a scoped phase of work rather than a quick settings change, through our Odoo migration and upgrade engagements, precisely because the accounting history needs to be documented, not just switched.
Our recommendation by business type
If you import finished goods and resell them with fluctuating purchase prices, start with FIFO. Accept the layer-based reporting learning curve that comes with it. If you distribute a wide catalog at fairly stable prices, average cost will save your finance team time without hiding anything significant. If you manufacture, standard price is close to mandatory for usable BOM costing, provided someone owns the quarterly review.
None of these is a universal right answer. We have reversed a client's initial choice more than once. The first month-end close exposed a mismatch between the method and the actual buying pattern. If you are still weighing the options for your own warehouse or plant, our Odoo consultancy team can walk through a few real transactions with you before you commit. Decide based on how your purchase prices behave, not on which method sounds the most precise on paper.



