Batch tracking and recalls: FEFO, expiry and traceability
Batch tracking means every batch keeps its own dates, quantity and cost at each location, every movement names the batch, and every production run links input batches to output batches. With that record, three questions get exact answers: which batch to ship first (first expired, first out), what to do with stock before it expires, and — if a batch is blocked — which products and customers it reached. In the example below, a small cosmetics maker blocks one bulk batch and follows it to 1 finished batch and 3 customers, and finds that selling a near-expiry batch at a lower price leaves $45 more than a smaller markdown.
Why expiry dates alone are not enough
A red date on a shelf is a warning, not a plan:
- The usable date can be earlier than the printed one. A rule after opening can shorten it.
- Customers may require remaining life. A batch that is still valid can be too short for a particular buyer.
- Blocked stock must stay out of orders. A reservation made before the block still points at that batch.
- Ingredients become products. A problem in one input batch travels into everything made from it.
- Gaps in the record hide risk. A missing link does not mean nothing was affected.
The formula
- Usable through = the earlier of the valid-through date and the limit after opening.
- Remaining life = usable through − today.
- FEFO order = eligible batches sorted by usable-through date, then received date; blocked, quarantined, undated or too-short batches are skipped with the reason.
- Extra cash of a plan = units sold × (price − extra cost per unit) − fixed costs.
- Economic result = extra cash − remaining book value of the batch.
A worked example
The numbers come from the demo of Expiry, Batch & Recall Control: a fictional maker of creams, serums and lip balms with 12 batches in stock worth $3,171.13 at cost. Batches worth $714.20 are usable for 45 days or less, $409.38 is blocked or in quarantine, and 1 customer return waits for a check before it can be used.
First expired, first out. Three batches of one product sit in the same room. Batch 1 is usable through October 20, batch 2 through October 30, and batch 3 through October 18 but is blocked. On October 15 an order for 15 units takes 10 from batch 1 and 5 from batch 2; batch 3 is skipped even though it expires first. A second customer requires at least 10 days of remaining life and orders 5 units: batch 1, with 5 days left, is rejected, and batch 2 is used.
What to do before a batch expires. A batch of 50 face mists cost $4 each, $200 in total. You expect regular buyers to take 30 at $10 or 45 at $8; each sale costs $1 extra, and the rest is written off at no cost.
| Plan | Units sold | Extra cash | Written off | Economic result |
|---|---|---|---|---|
| Sell 30 at $10 | 30 | $270 | 20 units ($80) | $70 |
| Sell 45 at $8 | 45 | $315 | 5 units ($20) | $115 |
The lower price leaves $45 more. The two plans cannot be added together, because they draw on the same buyers. The demand figures are your own assumptions; the tool compares plans within them and does not predict sales.
Block and trace. One bulk batch of cream base is blocked with 22 kg still in the stockroom. The trace shows 1 batch of hand cream made from it, with 378 pieces left, and 3 shipments: 120 pieces to a stockist, 60 to a pharmacy and 2 on a web order. A shipment that had reserved 40 pieces of the hand cream is flagged as a conflict instead of being moved quietly to another batch. Because some links are missing, the trace is marked incomplete.

Step by step: set up batch tracking you can trace
- Give every receipt a batch with its supplier lot, valid-through date, quantity, cost and location.
- Write each product's rules: unit, minimum remaining life and the rule after opening.
- Record every movement by batch: transfers, production, shipments, returns and write-offs.
- Link production from input batches to output batches, with the cost split and any loss.
- Allocate orders by FEFO, respecting each customer's remaining-life requirement.
- Review near expiries every week and compare markdown, return to the supplier, transfer or disposal before the date.
- Block a batch the moment you doubt it, and resolve every reservation that points at it.
- Run a test trace now and then, and close the gaps it lists.
Common mistakes
- Shipping by received date instead of usable date. The newest delivery may expire first.
- Ignoring the rule after opening. A bulk container can expire long before its printed date.
- Leaving reservations on a blocked batch. The next pick list will still send it.
- Mixing batches in production without recording them. The trace then stops at the mixing bowl.
- Calling a trace complete when links are missing. Name the gaps instead.
- Choosing a markdown by revenue. Compare the result after what the batch already cost.
When a tool helps
A spreadsheet can hold a list of lots. It rarely calculates the usable-through moment, allocates by FEFO with each customer's requirement, links production batches with their cost, compares plans before expiry, and follows a blocked batch to every shipment while listing the gaps. Expiry, Batch & Recall Control does, and every result opens to its formula. It uses the dates and rules you enter; it does not decide whether a product is safe or certify regulatory traceability. Exact arithmetic, no AI guesses. To plan what to make and when, see Maker Batch & Order Planner.
Open the demo with the cosmetics maker above — every screen, no sign-up — then enter your own products, batches and movements.
Related guides: small-batch production planning, how to calculate a reorder point and the cost of poor quality.
FAQ
What is FEFO?
First expired, first out: suitable batches are used in order of their usable-through date. A batch is skipped if it is blocked, has no checked date or is too short for the customer's minimum remaining life.
How do I trace a batch for a recall?
Start from the batch, follow every production record to the batches made from it, then every shipment of those batches to customers. List the links you could not follow; a missing link means the chain is incomplete, not that nothing was affected.
Should I discount stock that is about to expire?
Compare the plans by their result after the cost already spent. In the example, selling 45 at $8 gives $115 against $70 for 30 at $10, under the demand you assume.
What does "usable through" mean if the product was opened?
It is the earlier of the printed date and the limit after opening. A container opened today with a short rule after opening becomes unusable before its printed date.
This is decision support, not legal or regulatory advice: product safety and recall duties are decided by you and the rules that apply to you.
Tools mentioned in this guide
Interactive tool
Expiry, Batch & Recall Control
Know which batch to use first, what may expire unsold and which orders are affected when a batch is blocked.

