Warehouse Operations
FEFO vs FIFO and lot tracking
How FIFO and FEFO differ and when expiry dates should drive what your team picks.
Last updated September 16, 2026
FIFO is a proxy. FEFO is the rule if the product has a date.
First-in-first-out only matches first-expiry-first-out when every inbound has the same remaining shelf life. It does not. Short-dated leftovers and mixed-date containers are normal. Use receipt date to rotate putaway. Use expiry to decide what gets allocated and picked.
Where FIFO and FEFO disagree
Work one SKU. Day 1 you receive 100 units with 90 days left. Day 30 you receive 80 units with 45 days left, a short-dated leftover. FIFO by receipt date picks the day-1 lot, 60 days of life still on it. FEFO picks the day-30 lot, 45 days left. If you leave FIFO on, the short-dated 80 sit until they expire. Wholesale often needs 180 days remaining. Both lots fail that floor, so neither should allocate to the retailer. DTC may accept 30 days. The day-30 lot can ship DTC. Do not publish the 45-day units to the wholesale channel.
Capture lot and expiry at receiving
Capture lot and expiry on the inbound line, not later. Make both required at receiving. One PO can split into two lots when dates differ. Lot codes must be unique per SKU and per receipt. One lot per SKU forever is a rubber stamp. Using the expiry date as the lot code is a shortcut that breaks a recall: two receipts that share a date become one lot, and you cannot pull only the bad one.
Bind the lot at allocation
Bind the lot at allocation. The system should assign the earliest-expiring lot that still clears your minimum remaining shelf life. The picker scans to confirm. A dropdown at the bin is where FEFO leaks, and a pop-up on every pick is where throughput dies. Lot barcodes fix both. If the minimum shelf-life field is blank, earliest-expiry will cheerfully ship expired units. Expired stock does not auto-block. Someone has to quarantine it.
Earliest expiry for kits and returns
The same earliest-expiry rule applies when you consume components into a kit or a production order. Do not pick fresh components while older lots sit behind them. A three-unit line can span two lots, 2 from lot A and 1 from lot B. Each lot must decrement. If the process can only record one lot per line, you have phantom inventory: lot A goes negative or lot B never moves.
Returns are the hole. A restock without lot and expiry puts an unknown date back into the FEFO pool. Recapture both, or quarantine until you can.
Do not mix this with serials. A lot is a batch. A serial is one unit. Different problem.
Connect Claude or ChatGPT to your Fulfil data with the Fulfil MCP, then run this prompt on your own numbers.
You are a warehouse lead for a DTC brand selling dated goods (food, cosmetics, or supplements). Here is: sku, location, lot, expiry, qty, channel, min_remaining_shelf_life_days, last_receipt_date. [paste a recent inbound and a recent return] Produce: 1. FIFO pick vs FEFO pick for each SKU, and where they disagree. 2. Lots that fail the channel's minimum remaining shelf life. 3. Expired or unknown-date units that should be quarantined (including returns missing lot/expiry). 4. Any SKU still living as "one lot forever," or using expiry as the lot code. Do not treat serial numbers. Lots only.
Explore this in Fulfil
More on Warehouse Operations
Warehouse bin numbering and sequencing
Designing bin labels and pick sequence so pickers move through the warehouse efficiently.
Zone picking vs batch picking vs multi-order picking
Choosing the picking method that fits your order profile and warehouse layout.
Ecommerce returns: restock, quarantine, or write-off
Deciding whether each returned item goes back to stock, into quarantine, or gets written off.
See it run on
your data.
Fulfil runs inventory, fulfillment, purchasing, and accounting for scaling DTC brands in one system.