Overview
Lot and serial number tracking in Odoo 19 provides full traceability for your products. Lots group multiple units under one identifier (useful for batch manufacturing), while serial numbers uniquely identify individual units. Both are managed through the stock.lot model and tracked at the stock.move.line level.
Prerequisites
- Odoo 19 with Inventory module installed
- Inventory Manager access
Step 1: Enable Tracking on Products
Navigate to Inventory > Products > Products, open a product, and go to the Inventory tab. Set the Tracking field:
- No Tracking — Default, no lot or serial numbers
- By Lots — Group units into lots (e.g., production batch 2026-03-001). Multiple units share one lot number
- By Unique Serial Number — Each unit gets a unique serial number. Enforces quantity of 1 per serial
Step 2: Configure Operation Type Settings
Each operation type (Receipt, Delivery, Internal Transfer) has lot/serial settings. Navigate to Inventory > Configuration > Operation Types and configure:
- Use Create New Lots (
use_create_lots) — Allow creating new lot/serial numbers during this operation. Typically enabled for Receipts - Use Existing Lots (
use_existing_lots) — Allow selecting from existing lots. Typically enabled for Deliveries and Internal Transfers
Step 3: Assign Lots on Receipt
When receiving products tracked by lot:
- Open the receipt transfer from Inventory > Operations > Transfers
- Click on a product line to open the detailed operations
- In the Lot/Serial Number field, enter a new lot number or select an existing one
- Set the Done quantity for this lot
- Add additional lines if the receipt spans multiple lots
- Click Validate to confirm
Step 4: Assign Serial Numbers on Receipt
For serial-tracked products:
- Open the receipt transfer
- Click Generate Serials (if available) to auto-create a sequence of serial numbers
- Or manually enter each serial number on individual move lines — each line must have quantity 1
- Validate the transfer once all serials are assigned
Step 5: Enable Expiration Date Tracking
For perishable products, install the product_expiry module. Then on the product form, enable Expiration Date under the Inventory tab. Configure these date fields:
- Expiration Date — Product can no longer be sold or used after this date
- Best Before Date — Recommended use-by date
- Removal Date — Date when the lot should be removed from stock
- Alert Date — Date to trigger an alert for upcoming expiry
Set default durations (in days from receipt) for each date type on the product form.
Step 6: Traceability Reports
Odoo 19 provides full upstream and downstream traceability. From any lot or serial number:
- Navigate to Inventory > Products > Lots/Serial Numbers
- Open a lot and click the Traceability smart button
- View every stock move involving this lot — from receipt through internal transfers to delivery
Step 7: Removal Strategies
Configure how Odoo selects lots during outgoing operations:
- FIFO (First In, First Out) — Ships oldest stock first
- LIFO (Last In, First Out) — Ships newest stock first
- FEFO (First Expiry, First Out) — Ships products closest to expiration first (requires
product_expiry) - Closest Location — Picks from the nearest location
Set the removal strategy on the product category under Inventory > Configuration > Product Categories.
Best Practices
- Use lots for batch-manufactured products where individual tracking is unnecessary
- Use serial numbers for high-value items, electronics, or regulated products requiring unit-level traceability
- Establish a consistent lot naming convention (e.g., YYYY-MM-NNN) before going live
- Enable expiration tracking for food, pharmaceuticals, and perishable goods
- Use FEFO removal strategy for expirable products to minimize waste