Lot Tracking and Expiration Dates in Odoo for Food and Beverage Companies
Illustration: the people shown are AI-generated and fictional.
For a food or beverage business, “how much do we have?” is never enough. You also need to know which batch it came from and when it expires, because shipping an old lot first is lost margin and shipping an expired one is a customer problem.
Odoo answers both with lot numbers, expiration dates and the FEFO removal strategy. This guide covers how they work together in Odoo 19 and the order to set them up in.
Odoo Lot and Expiry Tracking at a Glance
- Lots identify a batch. Each lot groups units that share properties, so you can trace them through receipt, storage and shipment.
- Expiry needs lot tracking. Only lot- or serial-tracked products can carry expiration information.
- Four dates per product. Expiration, plus best-before, removal and alert dates set as days before expiry.
- FEFO ships the right lot. First Expired, First Out picks the lots with the earliest removal date first.
- Lots on delivery slips. An option prints lot numbers on what you send, which helps recalls and audits.
Lot Numbers: Knowing Which Batch Is Which
Lots represent a batch of products that were received, stored, shipped or made together. Odoo’s documentation describes them as the basis for end-to-end traceability, especially for recalls and expiration dates. Turn them on under Inventory › Configuration › Settings › Traceability, then set Track Inventory to By Lots on each product that needs it.
- On receipt: assign new or existing lot numbers to incoming goods.
- On delivery: choose which lots go to the customer on the delivery order.
- Existing stock: use an inventory adjustment to give lot numbers to what is already on the shelf.
Expiration, Best-Before, Removal and Alert Dates
With lots on, an Expiration Dates option appears in the same settings. On each perishable product, tick Expiration Date in the Inventory tab and set the related dates:
- Best Before Date: days before expiry when goods start deteriorating, without being dangerous yet.
- Removal Date: days before expiry when goods should be removed from stock.
- Alert Date: days before expiry when Odoo raises an alert on the lot.
Set these from your product specifications and customer agreements, not a single company-wide default. A retailer that requires a minimum shelf life on arrival is really setting your removal date for you.
FEFO: Shipping the Oldest Stock First
First Expired, First Out picks stock based on each lot’s removal date, so the lot that has to leave soonest is picked first. You set the strategy on a storage location (Inventory › Configuration › Locations) or on a product category, so it can apply to a whole cold room or to every product in a category.
FEFO is different from FIFO, which goes by when stock arrived. For perishables, a lot that arrived later can still expire sooner, which is why FEFO is usually the right choice.
A Setup Order That Works
- Turn on Lots & Serial Numbers. Then Expiration Dates, and Display Lots & Serial Numbers on Delivery Slips.
- Set tracking on each product. By Lots for batches, with Expiration Date ticked on perishables.
- Enter the four dates. Using real shelf-life data for each product.
- Apply FEFO. On the locations or product categories that hold perishable stock.
- Give existing stock lots. With an inventory adjustment, before the first FEFO pick.
Lots also make recalls manageable; see recall-ready traceability in Odoo. For the full picture, see Odoo for food and beverage producers.
Odoo Lot and Expiry Tracking: FAQ
Do I need lot numbers to track expiration dates in Odoo?
Yes. Only products tracked by lots or serial numbers can carry expiration information, so turn on Lots & Serial Numbers in Inventory settings first; the Expiration Dates option appears after that.
What dates can Odoo store for perishable products?
Four: the Expiration Date, a Best Before Date (when goods start deteriorating without being dangerous), a Removal Date (when they should come out of stock) and an Alert Date (when Odoo should raise an alert on the lot). The last three are set as a number of days before expiry.
What is FEFO in Odoo?
First Expired, First Out is a removal strategy that picks stock based on each lot’s removal date, so the lots closest to expiring are picked first. You set it on a storage location or a product category.
Can lot numbers be assigned on receipts?
Yes. Lot numbers are assigned to incoming goods on the receipt, and specific lots can be chosen for outgoing goods on the delivery order. Existing stock can be given lots with an inventory adjustment.
Can lot numbers be printed on delivery slips?
Yes. Once Lots & Serial Numbers is on, Odoo offers a Display Lots & Serial Numbers on Delivery Slips option, which helps customers and auditors trace what they received.
Losing stock to expiry?
Our Odoo inventory team can set up lot tracking, shelf-life dates and FEFO picking for your perishable products.
Talk to Our Odoo Team