Odoo Manufacturing Cost Accounting: Work Order Costing and Overhead
How Odoo 19 and 20 cost a manufacturing order: work center rates, BOM cost roll-up, overhead absorption, WIP and production journal entries, and variance.
Most Odoo manufacturers can say what a product cost to make. Far fewer can say whether that number includes energy, supervision and rent, or whether finance agrees with it. Our Odoo customization services close that gap between the shop floor cost and the general ledger.
This guide is for CFOs, controllers and plant managers on Odoo 19 or 20. It assumes your BoMs and routings exist; if not, start with our guide to Odoo BOM and production planning and return here for the money side.
What does Odoo manufacturing cost accounting cover?
Odoo manufacturing cost accounting covers how a manufacturing order (MO) picks up cost, how that cost becomes stock value, and which journal entries carry it to the ledger. Five settings in four apps decide the result.
| Cost element | Where you set it | What it feeds |
|---|---|---|
| Component cost | Product form, Cost field, driven by purchase orders | Component consumption value on the MO |
| Machine rate | Work center, Cost per hour, per workcenter | Operation cost on every work order |
| Labor rate | Work center per employee rate and employee Hourly Cost | Estimated and real labor cost |
| Extra cost per unit | Bill of materials, Extra Cost field | A flat add-on to every unit produced |
| Accounts | Product category, production location, work center | Stock, Cost of Production and expense postings |
The Odoo docs separate the MO cost from the real cost. The MO cost is what the BoM says production should cost. The real cost is what it did cost once quantities, durations and employee rates are known.
If any input is blank, Odoo still produces a cost. It is just wrong. A work center with no rate makes labor free; a product category with no production account sends labor to the finished product's expense account.
How does Odoo work order costing work?
Odoo work order costing multiplies the time logged on each work order by the work center's cost per hour, then adds the hourly cost of every employee who clocked in. The sequence is simple once the rates exist.
- Set the machine rate. On the work center, the per workcenter field under Cost per hour is the operating cost of the station.
- Set a planning rate for people. The per employee field is used only to estimate the MO cost before work starts.
- Set each employee's real rate. In the Employees app, Settings tab, the Hourly Cost field drives the real cost.
- Give each operation a duration. Set it manually or let Odoo compute it from tracked time on past work orders.
- Run the work order. Odoo prices the recorded minutes at the work center rate plus each employee's own rate.
The two people rates surprise many teams. As the docs note, if the work center says $50 per employee and the operator costs $60 an hour, the estimate uses $50 and the real cost uses $60. Keep both current, or planned and actual cost will never agree.
Work center settings also hold an Expense Account. Odoo credits it for labor when the MO is marked done. If it is empty, the finished product's expense account is used instead, which blurs the P&L.
How does Odoo roll up BOM cost across sub-assemblies?
Odoo rolls up BOM cost by adding component costs, nested sub-assembly costs and operation costs, then dividing by the BoM quantity. The BoM Overview shows the roll-up; Compute Price from BoM writes it to the product.
In the BoM Overview, costs in grey come straight from the component's Cost field. Costs in regular text are computed, from a sub-BoM or from a work center rate times the operation duration. Purchased parts are never recomputed.
Compute Price from BoM resets the product's cost to the BoM estimate. For FIFO and AVCO products this is temporary: the Cost field keeps averaging in the real cost of every completed MO, so the docs warn the button "does not set the price permanently."
Component costs are the weak point in most roll-ups, because the Cost field follows purchase orders and a typed value is overwritten by the next PO. By-products take a share too: each by-product line can carry a Cost Share percentage, and the main product receives the remainder.
What are the overhead absorption options in Odoo?

Odoo offers four ways to absorb manufacturing overhead: a loaded work center rate, the Extra Cost field on the BoM, landed costs applied to a manufacturing order, and analytic distribution for reporting only. None is a full absorption costing engine, so pick deliberately.
| Option | How it works | Best for | Watch out |
|---|---|---|---|
| Loaded work center rate | Add overhead per machine hour to Cost per hour | Overhead that scales with machine time | Rate needs a yearly recalculation |
| BoM Extra Cost | Flat amount per unit, copied to every MO | Energy, packaging, supervision per unit | Ignores volume swings |
| Landed cost on MO | Service product spread over finished units | Period costs absorbed after the fact | Sub-assembly costs do not flow up |
| Analytic distribution | Work center hours posted to analytic accounts | Cost center reporting and budgets | No effect on stock value |
| Manual period entry | Journal entry to clear WIP or absorption | Standard costers with month-end routines | Manual, and easy to skip |
The Extra Cost field is new in Odoo 20. Odoo describes it as "an additional cost per manufactured unit (e.g. labour, energy, packaging)", copied to each MO. Our Odoo 20 manufacturing release notes list it with the upgrade impact: existing costs do not change.
Landed costs are the older route. A forum user asking how to add rent, insurance and utilities to finished goods was pointed to landed costs on the MO. A later reply flagged the catch: costs added to a sub-assembly MO do not raise the parent MO's material cost.
The landed costs feature needs a service product flagged Is a Landed Cost, a split method such as by quantity or by current cost, and products on FIFO or AVCO. Standard Price products cannot take a landed cost.
Analytic distribution on the work center writes an analytic line for the hours worked at the work center rate, so a cost center report shows where machine time went. It changes nothing in stock value or the general ledger.
Which journal entries does Odoo post for a manufacturing order?
Under perpetual valuation, completing a manufacturing order debits the finished goods stock account, credits the raw materials stock account, and routes the difference through Cost of Production. Periodic valuation posts nothing until the closing entry.
Odoo's valuation cheat sheet uses a finished product at $52 made from a component at $50. The Anglo-Saxon perpetual entry is:
- Debit Manufactured Products Inventory $52
- Credit Cost of Production $52
- Credit Raw Materials Inventory $50
- Debit Cost of Production $50
The $2 left in Cost of Production is the labor added by the work orders. When the MO is done, Odoo posts a second entry: debit the production location's valuation account, credit the work center expense account. That credit is the absorption: expense leaves the P&L and lands in stock.
The product category's Production Account is the key setting. Odoo's field help calls it the valuation counterpart for components and final products, where work center or employee cost "will remain on the account once the production is completed."
The accounting guide shows how to set a Cost of Production account on the production location, so production variations stay separate from receipts and deliveries.
Odoo 19 changed the timing: perpetual valuation now moves the stock account at invoice level, and a closing entry squares the rest. Our Odoo 20 inventory valuation guide covers the upgrade checks.
How does Odoo handle WIP accounting at month end?
Odoo 19 and 20 include a Post WIP Accounting Entry action that books the component value and overhead of open manufacturing orders to a Production WIP account, then reverses it on a date you choose. It is a period-end snapshot, not a running WIP ledger.
Select the open MOs in the list and run the action. Odoo proposes three lines: a credit to stock valuation for components already picked, a credit to the WIP overhead account for work order cost to date, and a debit to Production WIP for the total. You can edit the amounts before posting.
The reversal matters, because the finished goods entry books the full cost when the MO closes. Odoo creates the reversing entry at posting time, so the balance sheet shows WIP on the closing date and nothing doubles up later.
Two accounts need to exist first: a Production WIP Account and a Production WIP Overhead Account on the company. If the overhead account is empty, Odoo falls back to the production account.
Standard cost vs AVCO vs FIFO for manufactured products
For manufactured products, FIFO and AVCO take the real MO cost into stock, while Standard Price takes the standard and leaves the variance in the production account. The choice shapes every report that follows.
| Question | Standard Price | AVCO | FIFO |
|---|---|---|---|
| Finished good value | The standard set on the product | Real MO cost, averaged in | Real MO cost per MO layer |
| Where variance lands | Stays in Cost of Production | None, cost is absorbed | None, cost is absorbed |
| Landed cost on MO | Not allowed | Allowed | Allowed |
| Late component cost changes | No effect on stock | Finished goods revalued | Finished goods revalued |
| Best for | Stable products, variance analysis | Mixed vendors, frequent price moves | Traceable lots, rising input costs |
The operations valuation guide states the rule: a finished good equals the components consumed at their own costing method plus the labor cost of work centers and employees. Its example consumes $278 of components, records $200 of labor, and books a $478 finished good.
Odoo 20 added one more behavior for FIFO and AVCO. When a component's value changes after the MO is done, for example a late landed cost on the receipt, Odoo recomputes the value of the finished goods that consumed it. Standard Price products ignore this by design.
Standard costers get the cleaner variance signal but more month-end work. One forum user running standard costs with labor found that clearing the WIP credit each period left his cost variance at zero. His team now posts a manual absorption entry each month and tracks the trend.
How do you analyze production variance in Odoo?
Production variance in Odoo is the gap between the MO cost on the BoM and the real cost on the MO overview, and the Production Analysis report breaks it down per unit by component, employee, operation and subcontracting. Neither is a formal variance report.
The MO Overview shows expected and real cost side by side while work is in progress. Once the MO is done, the columns match, so snapshot the comparison before closing if you need a record of the deviation.
The Production Analysis report adds the measures a controller needs:
- Cost/Unit: component, employee, operation and subcontracting cost per unit produced.
- Component Cost/Unit and Total Component Cost: the material side of the variance.
- Average Employee Cost/Unit and Total Employee Cost: the labor side.
- Duration of Operations/Unit: the efficiency driver behind labor variance.
- Yield Percentage: produced quantity against demanded quantity.
What you cannot do out of the box is split variance into price and usage, or compare it to a budget. An Odoo 18 user asked how to export the MO cost table and calculate production variance; the answer was a custom report over the production and valuation tables.
Our guide to how Odoo Accounting works covers the ledger-side reports, including the General Ledger filters that isolate the Cost of Production account.
Common Odoo manufacturing costing mistakes
Most Odoo manufacturing costing errors come from blank rates, missing accounts and a costing method chosen without the finance team. These are the ones we fix most often.
- Zero work center rates: labor and machine time cost nothing, so margins look better than they are.
- No production account on the category: labor is credited to the product's expense account and the P&L mixes absorbed cost with real spend.
- Standard costs never reviewed: a standard set at go-live drifts within a year, and the variance account becomes a dumping ground.
- Overhead added twice: a loaded work center rate plus a landed cost for the same rent double-counts overhead.
- Landed cost on a sub-assembly only: the parent MO still consumes the sub-assembly at its pre-landed value.
Several of these appear in our review of why Odoo implementations fail in manufacturing, because a wrong cost model is usually discovered at the first month-end, not in UAT.
Odoo manufacturing cost accounting by industry
Overhead behaves differently by industry, so the absorption route should match the cost driver, not the default setting. The table shows where each approach usually lands.
| Industry | Pain or cost driver | Odoo approach | How iVentureTeam helps |
|---|---|---|---|
| Plastics and molding | Energy and machine hours dominate | Loaded work center rate per press hour | Build the rate model, map presses to work centers |
| Food and beverage | Yield loss, by-products, batch utilities | By-product cost share plus BoM Extra Cost | Configure cost share, lots and scrap accounts |
| Metal fabrication | Subcontracted finishing, scrap | Subcontracting cost on receipt, scrap location | Set up subcontract BoMs and scrap valuation |
| Electronics assembly | Fast component price moves | AVCO with retroactive revaluation | Vendor price sync, cost change controls |
| Furniture and wood | Multi-level BoMs, manual labor | Employee hourly cost, BoM roll-up | Roll-up audits, labor rate upkeep |
| Pharma and chemicals | Lot valuation, batch overhead | Valuation by lots, landed cost on MO | Lot-level costing design, audit trail |
For how production, stock and finance fit on one database, see our page on Odoo ERP for the manufacturing industry and our comparison of ERP options for manufacturing.
How iVentureTeam helps with Odoo manufacturing cost accounting

iVentureTeam sets up Odoo work order costing, overhead absorption and production accounting so the cost on the MO is the cost in the ledger. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.
- Cost model workshop: we map your cost drivers to work center rates, BoM extra cost, landed costs and analytic accounts, and document the choice.
- Accounting configuration: product categories, production locations, WIP and expense accounts set and tested with real MOs through our Odoo implementation services.
- Variance reporting: custom pivot or SQL reports that split variance by material, labor and overhead, built as upgrade-safe modules.
- Month-end routine: a documented WIP, closing and accrual sequence, with training from our Odoo ERP training team.
Budgeting the work? Our published implementation ranges run from $3k to $9k for a small project to $27k to $150k+ for a large one. Size your own scope in the Odoo implementation cost calculator.
Odoo manufacturing cost accounting case study: Mechanical Products IL
A US precision components manufacturer fixed the input that breaks most Odoo cost roll-ups: component prices that never matched the vendor sheet. Mechanical Products IL machines and assembles custom parts on Odoo 17, with a large catalog and frequent vendor price revisions.
Their product lifecycle ran on manual Excel imports. Sales and cost prices did not update on import, purchase orders created from sales orders did not pick up the latest vendor price, and every pricing error eroded margin.
iVentureTeam built a custom product-lifecycle module that refreshes standard and cost prices from the uploaded sheet, creates missing products and archives retired ones. Scheduled actions keep the standard_price field in sync, and every PO now pulls the current vendor price.
The result: 90% less manual import effort, 100% vendor-price accuracy on POs and zero pricing mismatches since go-live, delivered in six weeks. Read the full Mechanical Products product data automation case study.
The bottom line on Odoo manufacturing cost accounting
Odoo can carry a complete manufacturing cost from work order to ledger, but only if work center rates, overhead routes and production accounts are set on purpose and reviewed every year. The software does the arithmetic; the cost model is yours to design.
Start with rates that include overhead, choose one absorption route per cost type, give every product category a production account, and run the WIP entry at each close. Then compare MO cost with real cost monthly, and let the trend tell you when a standard or a rate needs a change.
Ready to make your Odoo production costs match your ledger?

Get a cost model review from a team that configures both the shop floor and the books. Request an Odoo costing and overhead review, call +91-90235-15208, or email business@iventureteam.com.
Frequently Asked Questions
How does Odoo calculate manufacturing cost?
+
Odoo adds consumed components at their own costing method, work order time at the work center cost per hour plus each employee's hourly cost, and any Extra Cost per unit on the BoM. The total, less any by-product cost share, becomes the finished product's value.
Does Odoo support overhead absorption?
+
Partly. You can load overhead into work center rates, add a flat Extra Cost per unit on the BoM, apply landed costs to a manufacturing order, or post overhead to analytic accounts. There is no automatic overhead rate by volume, so standard costers usually add a month-end entry.
What is the difference between MO cost and real cost in Odoo?
+
MO cost is the expected cost from the BoM: component quantities, operation durations and the work center per employee rate. Real cost uses actual quantities, actual durations and each employee's own hourly cost. They match once the MO is marked done.
Which journal entries does Odoo create when a manufacturing order is done?
+
With perpetual valuation, Odoo debits the finished goods stock account and credits the raw materials stock account, both against Cost of Production. A second entry debits Cost of Production and credits the work center expense account for labor. Periodic valuation posts at closing.
How does Odoo handle WIP accounting?
+
Odoo 19 and 20 include a Post WIP Accounting Entry action. It debits a Production WIP account for the component value and work order cost of open MOs, credits stock valuation and WIP overhead, and posts an automatic reversal on the date you set.
Should manufactured products use standard cost, AVCO or FIFO in Odoo?
+
Use Standard Price when you want variance analysis and stable products. Use AVCO when vendor prices move often and you want real cost absorbed automatically. Use FIFO when lots must be traced and input costs are rising. Landed costs need AVCO or FIFO.
Can I add landed costs to a manufacturing order in Odoo?
+
Yes. The landed cost form can target manufacturing orders as well as transfers, spreading a service cost across the finished units. Products must be on FIFO or AVCO, and a cost added to a sub-assembly MO does not flow up to the parent MO.
How do I see production variance in Odoo?
+
Compare MO Cost with Real Cost on the MO Overview before the order closes, then use Production Analysis measures such as Cost/Unit, Component Cost/Unit and Total Employee Cost. Price and usage splits need a custom report.
Free manufacturing walkthrough
Running manufacturing on Odoo?
Our manufacturing consultants map your BoMs, routings and planning in Odoo and show what to configure first.
Free, with no obligation. A senior consultant replies within 12 business hours.
Free Odoo tools
All tools- Odoo Health CheckVersion, modules, findings and upgrade cost
- Odoo App SelectorWhich apps you need, by industry
- Odoo Project EstimateIndicative cost and timeline in minutes
- Odoo Implementation Cost CalculatorImplementation cost and timeline, in minutes
- Odoo Migration Cost CalculatorVersion jump or legacy ERP, priced in minutes
Continue reading
Odoo 20 Inventory Valuation: Changes, FIFO vs AVCO and Upgrade Checks
Odoo 20 inventory valuation explained: what changed since Odoo 18 and 19, FIFO vs AVCO, Anglo-Saxon perpetual setup, reports and upgrade checks to run.
Odoo vs AutoCount for Malaysian SMEs: Odoo 20, MyInvois and Cost
Odoo vs AutoCount for Malaysian SMEs: Odoo 20 features, MyInvois setup, SST, payroll gaps, AutoCount Cloud pricing and a three-year cost comparison.
Odoo Internal Controls: Access, Approvals, 3-Way Match, Audit Trail
Set up Odoo internal controls in Odoo 19 and 20: access rights, segregation of duties, purchase approvals, three-way match, lock dates and the audit trail.
