A batch of biscuits leaves your factory. Six weeks later, a retailer calls to say the product is stale the expiry date was three months earlier than expected.
You check your records: a spreadsheet with batch numbers, a production logbook, and a separate file for distribution. Tracing which retail locations received that batch takes two days and four phone calls. By then, the reputational damage is done.
This is the operational reality for dozens of FMCG manufacturers that have outgrown their basic accounting software but haven't yet moved to a proper ERP. Batch tracking, expiry management, and recall readiness aren't nice-to-have features they are the minimum operational standard for any company producing perishable or regulated consumer goods.
This post explains how Odoo handles the full batch production lifecycle for FMCG manufacturers: from raw material receiving through production to warehouse, and from first expiry first out (FEFO) dispatch to end of shelf life alerts.
The FMCG Batch Problem What Usually Goes Wrong
FMCG manufacturers deal with two intersecting tracking challenges that paper-and-spreadsheet systems cannot handle at scale:
Lot to lot ingredient traceability: Which batch of palm oil, sugar went into which production run?
Finished goods shelf life management: Where did each batch go, what is its remaining shelf life, and is any stock approaching expiry?
Without an ERP, companies typically maintain separate records for raw material receiving, production, and dispatch none of which are linked. A quality complaint becomes an archaeological investigation. A regulatory inspection triggers a scramble for documents. A recall means contacting every distributor and hoping the records are accurate.
How Odoo Structures Batch and Lot Tracking for FMCG:
Lot Numbers vs. Serial Numbers Which Does FMCG Use?
Odoo supports two tracking modes. For FMCG, lot tracking is the correct configuration a lot number is assigned to a quantity of identical product produced in the same run, rather than to individual units. A serial number would mean tracking every individual biscuit packet, which is impractical.
In Odoo, lot tracking is enabled at the product category or individual product level. Once enabled, every movement receiving, production, quality hold, dispatch requires a lot number. This creates a complete audit trail automatically, without relying on anyone to remember to fill in a field.
Raw Material Receiving with Lot Capture
When a raw material delivery arrives, the receiving team scans or enters the suppliers batch number and the manufacturing date or expiry date.
Odoo records:
Supplier lot number
Internal lot number
Date of manufacture and expiry date
Quantity received per lot
Quality status quarantine, approved, or rejected
A single delivery of flour might contain two or three different manufacturing dates from the supplier. Each is recorded as a separate lot in Odoo's inventory, with its own expiry and quality status. The system will not allow approved production to consume material from a quarantined lot this is enforced at the workflow level, not by memory or manual checking.
Manufacturing Orders with Lot Assignment
When a manufacturing order is opened for a batch of product say, 500 kg of cream crackers Odoo requires the production team to record which raw material lots they are consuming. This is the core of upstream traceability.
The production interface shows available lots for each ingredient with their expiry dates and quantities. The system applies First Expiry First Out (FEFO) logic by default it suggests consuming the lot with the nearest expiry date first. This is not a suggestion a supervisor gives verbally; it is the order in which Odoo presents and reserves the material.
FEFO in practice: Your warehouse holds two lots of refined vegetable oil Lot A expiring in 45 days and Lot B expiring in 90 days. When a production order is created, Odoo automatically reserves Lot A first. If a production supervisor overrides this and uses Lot B, the system records the override creating an audit event.
The finished goods produced are assigned a new lot number, with an automatically calculated expiry date based on the product's configured shelf life. If your cream crackers have a 12-month shelf life and today's production date is 1 May 2026, Odoo sets the lot expiry to 30 April 2027 without any manual entry.
Expiry Date Management in the Warehouse:
Expiry Alerts Before the Problem
Odoo's inventory module includes configurable expiry alerts. At the product level, you define:
Use time: The shelf life of the finished product
Removal date: When the product must be pulled from stock
Alert date: When the system sends a notification to the warehouse manager
The result: your warehouse team is not chasing expiry dates manually. Odoo surfaces expiring lots in the removal date report and sends email notifications before stock becomes a write off. Lots past the removal date are automatically blocked from dispatch.
FEFO Dispatch Ensuring Retailers Receive Fresh Stock
When a sales order is confirmed and a delivery is processed, Odoo reserves stock using FEFO logic. The lot nearest its expiry date is dispatched first. This is the standard that large FMCG brands contractually require of their distributors and now it can be enforced automatically, not just as a policy.
Delivery documents and the digital packing list record the lot number and expiry date of every item shipped. Distributors and retailers receive documentation showing the exact lot information, enabling them to manage their own shelves accordingly.
GS1 Barcodes and Label Printing:
For FMCG companies supplying modern trade or large distributors, GS1 compliant barcodes on secondary packaging are often a trading condition. Odoo supports GS1 barcode encoding combining the product GTIN, lot number, and expiry date into a single scannable code on carton labels.
Label templates are configured once in Odoo and printed automatically at the end of a production order. The label pulls the lot number and calculated expiry date from the manufacturing order no manual data entry on the packing line.
| Label Field | Data Source in Odoo |
|---|---|
| Product GTIN / barcode | Product master — configured once |
| Lot number | Generated from manufacturing order |
| Manufacturing date | Production order confirmation date |
| Expiry date | Production date + product shelf life |
| Quantity per carton | Product packaging configuration |
Bill of Materials for FMCG Recipes:
Odoo's manufacturing module uses a Bill of Materials (BOM) as the recipe for each product. For FMCG, BOMs typically have two levels:
Level 1 — Finished product recipe: All raw materials and their quantities per batch size
Level 2 — Packaging components: Primary pack, secondary packaging, and tertiary packaging.
The BOM is the single source of truth for production planning. When a manufacturing order is created for a quantity of finished product, Odoo automatically calculates the raw material requirements, issues a purchase order if stock is insufficient, and reserves available stock against the production order.
By Products and Co-Products
Some FMCG processes produce by-products cooking oil refining produces fatty acids, beverage production produces yeast sludge, biscuit production has trim offcuts. Odoo's BOM supports by product and co-product recording, capturing the quantity of secondary outputs per production run. This matters for cost accuracy: the total production cost is apportioned across the primary product and by-products.
Quality Control at the Batch Level
Odoo's quality module integrates with manufacturing orders and goods receipts to enforce batch-level quality checks. For a food manufacturer, typical quality control points are:
Incoming raw material QC: Moisture content, microbiological testing, pH checked before the lot is approved for production use
In-process QC: Weight check per pack, brix reading, temperature at critical control points
Finished goods QC: Organoleptic (taste/smell/color), packaging integrity, weight per carton
Each quality check is linked to the lot being tested. If a batch fails QC, its status is set to quarantine automatically preventing dispatch until the hold is resolved or the lot is written off.
Traceability in practice: A retailer reports that one case of a product had packets with significantly lower fill weight customers complained. In Odoo, the retailer's lot number is located in 20 seconds. The manufacturing order for that lot is opened, revealing which in process weight check was performed, by whom, and what the recorded values were. The data shows two packets in the batch failed the in-process check but were not quarantined a process failure, not a raw material failure. Corrective action targets the specific production shift.
Recall Readiness The Hidden Value of Lot Traceability
A product recall is not a question of if for most FMCG companies it is a question of when, and how prepared you are when it happens. Lot traceability in Odoo means that when a quality alert is raised, you can answer the following questions within minutes:
Which raw material lots were used in the affected production batch?
Which other production batches used the same raw material lot?
Which customers/distributors received the affected finished goods lots?
What quantity remains in your own warehouse, and what has already reached retail?
Production Scheduling and Capacity Planning
Beyond traceability, Odoo's manufacturing module helps FMCG operations teams schedule production against available capacity. Work centers (production lines, ovens, mixers, packaging lines) are configured with their capacity in units per hour or kg per shift. Manufacturing orders are sequenced against this capacity, and the system generates a daily production schedule that accounts for both demand and available hours.
For FMCG companies running multiple SKUs across shared lines a common situation in mid-size manufacturers this prevents the ad hoc scheduling that leads to changeover time waste, line conflicts, and stockouts on fast moving items while slow movers are produced.
Integration with Sales and Inventory
The batch production workflow in Odoo is not isolated in a manufacturing module it flows through the entire system:
A confirmed sales order triggers a check against finished goods inventory
If insufficient stock exists, a manufacturing order is automatically generated for the shortfall
The manufacturing order consumes raw material lots and produces finished goods lots
Finished goods are received into the warehouse with lot numbers and expiry dates
The sales order picks from available stock using FEFO logic
The delivery note includes lot number and expiry date per product
This end to end connection means there is no manual data transfer between systems no re-entering lot numbers from a production spreadsheet into an inventory register. The lot created in manufacturing is the same lot dispatched on the delivery order.
What FMCG Manufacturers Should Look for in an ERP
If you are evaluating an ERP for your FMCG business, these are the batch-related capabilities that separate purpose-built systems from generic accounting software:
Lot/batch tracking enabled at raw material and finished goods level
Automatic expiry date calculation from production date + configured shelf life
FEFO stock reservation for both production and dispatch
Expiry alerts before stock becomes a write off
Upstream and downstream lot traceability in a single query
Quality control checks linked to specific lots with pass/fail/quarantine status
GS1 barcode label generation from production data
By-product recording in the BOM
Odoo covers all of these natively without requiring additional modules or third-party add-ons for standard FMCG operations.
Is Odoo Right for Your FMCG Business?
Odoo is a strong fit for FMCG manufacturers and brand owners in the 20–300 employee range typically companies that have outgrown QuickBooks or Tally and need genuine manufacturing and inventory capability, but are not yet at the scale where SAP or Oracle become relevant.
The configuration required for FMCG multi level BOMs, FEFO, lot tracking, quality control, expiry management is available in Odoo's standard modules without customization in most cases. What matters is implementation: the system must be configured correctly for your specific products, shelf lives, and quality checkpoints.