Inventory Valuation with Actual Costing Method: Complete Workflow Guide
Why Standard Odoo Costing Methods Aren't Always Enough
Most businesses running Odoo for inventory can get by with Standard, Average, or FIFO costing. But there's a category of business where none of those methods tell the true story and that's any operation where the same product is purchased at different prices across different batches, and where you need to know the exact cost of each specific lot or serial number when it moves, sells, or gets returned.
Think about a food distributor buying organic olive oil at different prices depending on the harvest season. Or a pharmaceutical wholesaler receiving medications at varying unit costs across different manufacturer batches. Or a manufacturer sourcing raw materials from multiple suppliers at different negotiated rates. In all of these cases, FIFO gives you a queue-based approximation, Average gives you a blended number, and Standard gives you a fixed assumption but none of them give you the actual cost of the specific batch you just sold. That's the problem the Actual Costing Method module for Odoo by Creyox solves. It ties the real purchase or manufacturing cost to every lot or serial number in your system and carries that exact cost through every inventory movement, sale, delivery, refund, and journal entry, all the way through to your accounts.
Overview
The Actual Costing Method module extends Odoo's inventory valuation to support true lot-level and serial-number-level cost tracking. Instead of calculating the cost of a sale based on a formula (as FIFO does) or a running average (as Average costing does), this module stores the actual purchase price paid for each specific lot or serial number and uses that exact figure every time that lot moves. When you receive stock on a purchase order, each lot is recorded with the real unit cost from that order line. When that lot is later delivered on a sale order, the cost of goods sold reflects what you actually paid for that specific batch not an average, not a queue position, not a preset standard. The same logic carries through to refunds, returns, and the journal entries generated for each movement, so your accounting always reflects reality.
The module sits on top of Odoo's FIFO framework and introduces a Costing Level setting at the Product Category level. Set it to Lot/Serial Number, configure your products with the appropriate traceability, and the system handles the rest automatically calculating, storing, and applying the actual cost at every step without any manual override. This is available for Odoo Community Edition the edition that typically lacks the most advanced costing capabilities making it particularly valuable for Community users who need enterprise-grade financial accuracy in their inventory operations.
Features
- Inventory Valuation base on Costing Level of Product Category.
- Effectively reflect the Actual cost of goods based on actual purchase cost.
- Easy to track the valuation of goods based on Lot/Serial Number.
- Utilize the Actual cost of goods while generating Purchase & Sale for it.
- User can manage the Refund functionality with the Actual Costing Method.
- Generate Journal Entries for the Purchase & Sale with actual purchase cost.
- Automatic calculation of product pricing based on specified Lots or Serial Numbers.
- Support for various costing methods, such as Standard, FIFO, and Average.
- Supported in Community Edition Only.
Setup Workflow
- Navigate to Inventory >> Configuration >> Product Categories.
- Here user can create a Category or Select the Existing Category with Storeable Products.
- User need Change Costing Method to First In First Out(FIFO) and Costing Level to Lot/Serial Number.

- Navigate to Inventory >> Products >> Products.
- Here user have to set the Product Type as Storeable Product & Product Category which has the costing level set as Lot/Serial Number.

- Also user have to set the Traceability to By Lots from the Inventory Tab

- Now Navigate to Purchase and create 2 Purchase Orders with the storeable product of previously Created or Selected Product Category and different Unit Price.
- Clicking on Confirm Order button user will see a Smart Button of Receipt and state as Purchase Order.


- Click on Receipt Button and enter Lot/Serial Number for the Product.


- When user will click on Validate it will create a Inventory Valuation entry for it as WH/IN.
- To check the Inventory Valuation entry navigate to Inventory >> Reporting and then Valuation.

- Now Navigate to Sale and create 2 Sale Orders with the storeable product of previously Created or Selected Product Category.
- Clicking on Confirm Button user will see a Smart Button of Delivery and state as Sale Order.


- Click on Delivery Button and select Lot/Serial Number for the Product.


- When user will click on Validate it will create a Inventory Valuation entry for it as WH/OUT.
- Coming back to Inventory Valuation entry, Here user will see the entry for WH/OUT.
