Odoo Inventory Valuation: FIFO vs AVCO and Which One to Choose

Two businesses can buy exactly the same goods, at exactly the same prices, sell exactly the same quantities — and still report different profits. The difference is not fraud or error. It is the costing method: the rule that decides which purchase cost is attached to a unit when it leaves stock, and therefore what cost of goods sold and what remaining inventory value appear in the accounts. In Odoo that rule is set once per product category, and the realistic choice for most stock-keeping businesses is between FIFO and AVCO. This article runs both methods over the same numbers, shows exactly where they diverge, and gives a decision framework you can apply category by category.

Where the choice lives in Odoo

The costing method is defined on the product category, not on the individual product. Odoo offers three methods:

  • Standard Price — the default. Every product is valued at a cost you define manually on the product form, and that cost is used for valuation even if the purchase price on an order differs. It must be reviewed periodically, or it quietly drifts away from reality.
  • Average Cost (AVCO) — valuation is based on the average cost of the product, recomputed at each receipt. Deliveries do not change the average.
  • First In First Out (FIFO) — incoming and outgoing costs are tracked in real time. The oldest purchase price is used as the cost of the next unit sold until that layer is exhausted, then the next layer's price takes over.

The category also decides how valuation reaches the accounts: manually, with a periodic journal entry, or automatically, with an entry on every stock move.

Odoo's documentation warns that changing the costing method greatly impacts valuation, and advises consulting an accountant first. Decide at setup, not on live stock.

The shared test case

To compare the methods fairly, use the worked example from Odoo's own valuation documentation. The same four operations are applied under each method:

  1. Receive 8 products at €10 each.
  2. Receive 4 products at €16 each.
  3. Deliver 10 products.
  4. Receive 2 more products at €6 each.

Twelve units arrive, ten leave, four remain. Everything that differs between FIFO, AVCO and Standard Price comes from how each rule prices the delivery in step 3 and the stock that remains afterwards.

How AVCO handles it: one blended price for every unit

AVCO treats all units of a product as identical and interchangeable, which, for many products, they physically are. After the first receipt, the average cost is €10 and the stock of 8 units is worth €80. The second receipt brings 4 units at €16, adding €64. The new average is (€80 + €64) divided by 12 units, which is €12, and the inventory value is €144.

The delivery of 10 units is then priced entirely at that average: 10 times €12 is €120 of cost, leaving 2 units valued at €24. Note what did not happen — the average did not change when products left the warehouse. In Odoo's AVCO, the cost is recomputed as each receipt arrives, not on delivery.

Finally, receiving 2 units at €6 adds €12 to a stock worth €24, giving 4 units worth €36 and a new average of €9. Every remaining unit carries that €9, regardless of whether it physically arrived in the €10, €16 or €6 shipment. That is both AVCO's strength and its limitation: margins are smooth and easy to explain, and no individual unit's true purchase cost survives the blending.

How FIFO handles it: layers, consumed in order

FIFO keeps receipts as separate cost layers in a queue. The first two receipts build the same €144 of stock as AVCO — 8 units at €10, then 4 units at €16 — but the layers are remembered individually.

The delivery of 10 units consumes the queue from the front: all 8 units at €10, plus 2 units at €16. That is €80 plus €32, or €112 of cost — €8 less than AVCO charged for the identical delivery. What remains is 2 units at €16, worth €32. The last receipt, 2 units at €6, joins the back of the queue, so the closing stock is 2 at €16 plus 2 at €6, worth €44 in total.

Odoo's documentation makes one clarification that surprises many users: this is a financial FIFO, not a physical one. The first value in is the first value out, no matter the storage location, warehouse or serial number. Your warehouse team can pick any unit off any shelf; the accounts will still consume the oldest cost layer first. FIFO describes the flow of costs, not a picking instruction — although for perishables, the physical and financial flows happily coincide.

Side by side: where the €8 went

  • Cost of the 10-unit delivery: AVCO €120; FIFO €112; Standard Price €100, at the preset €10.
  • Closing inventory, 4 units: AVCO €36; FIFO €44; Standard Price €40.
  • Total accounted for: €156 under both FIFO and AVCO — the €144 received before the delivery plus the €12 received after. The methods create and destroy nothing; they only split the same total differently between cost of goods sold and the balance sheet.

That split is the whole story. In a period of rising purchase prices, FIFO charges older, cheaper layers to cost of goods sold, so reported profit is higher and the closing stock — valued at the newest prices — sits closer to current replacement cost. AVCO charges a blend, so profit and stock value land between FIFO and what a last-in method would produce, and a single expensive receipt nudges margins instead of stepping them. In falling prices the directions reverse: FIFO's older, dearer layers produce higher cost and lower profit, while AVCO again smooths the change.

Standard Price, for contrast, ignores the actual €16 receipt entirely for valuation. That predictability is genuinely useful in manufacturing, where a stable standard lets you isolate price and efficiency variances — but for a trading business buying at fluctuating prices, it reports a cost nobody actually paid.

Choosing, category by category

Because the method lives on the category, you do not need one answer for the whole company. Split the catalogue by how the goods behave:

Choose FIFO when traceability and current stock value matter

  • Perishable, dated or seasonal stock, where selling oldest first is also the physical reality.
  • Products bought in identifiable batches at very different prices, where blending would hide a bad — or good — purchase.
  • Situations where an auditor, lender or buyer will want cost of goods sold traced back to specific receipts. A FIFO layer points at a real receipt; an AVCO average points at a calculation.
  • When you use landed costs: landed costs in Odoo require a FIFO or AVCO category, and under FIFO the freight and duty stay attached to the layer that incurred them.

Choose AVCO when units are fungible and prices are noisy

  • Commodity-like, interchangeable goods — liquids, bulk materials, identical components — where asking which unit sold is meaningless.
  • High receipt volumes at frequently changing prices, where AVCO's smoothing keeps margins and quoted costs stable enough to price against.
  • Teams that need a simple story: one current average cost per product, updated on receipt, easy to check and explain.

Whichever you choose, be honest about the operational cost. Odoo itself notes that FIFO is arguably the most accurate valuation method for a variety of reasons, but is highly sensitive to input data and human error — a receipt booked at the wrong price corrupts a layer that will surface in cost of goods sold weeks later. AVCO forgives a single bad receipt by diluting it, at the price of never being exactly right about any one unit.

Practical rules before you commit

  1. Decide before stock moves accumulate. A category full of transaction history carries its valuation with it. Changing method later means revaluing existing stock and explaining the adjustment — possible, but it is an accounting project, not a settings tweak.
  2. Keep categories granular. A single mixed category forces one method on perishables and commodities alike. Categories shaped around costing behaviour, not just sales reporting, let each product family get the right rule.
  3. Pair the method with automated valuation deliberately. Automated valuation posts on every move and keeps the books continuously correct, but Odoo reserves it for advanced users for a reason: the stock input, output and valuation accounts on the category must be right first, and tested on real receipts and deliveries.
  4. Reconcile after the first cycle. Run the documentation's test on your own data: receive at two prices, deliver, and check that the valuation report and the journal entries match the method you think you configured — before the first month-end depends on them.

Neither FIFO nor AVCO is the correct answer in the abstract. FIFO tells you what the units you sold actually cost, layer by layer, and values what remains at recent prices. AVCO tells you what a typical unit costs, smoothing the noise that would otherwise whipsaw your margins. Pick per category, pick early, and let your accountant see the choice before it is set in stock.

Further reading

Leave a Comment