Every retailer who sells something with a date on it eventually meets the same morning: a customer emails a photo of a jar whose best-before code passed four months ago, a supplier calls about a problem in a specific production run, or a marketplace suspends a listing pending proof that dated stock is being rotated. The question is always identical. Which units came from which run, where did they go, and how fast can you answer?
That is what lot and expiry tracking answers. It is not a feature you bolt on when revenue justifies it. For perishables, supplements, cosmetics and anything with a stability limit, it is the minimum record-keeping that makes a recall survivable and a markdown decision rational rather than panicked.
In short
- A lot number is the unit of traceability, not the SKU. One SKU can contain twenty lots with twenty different expiry dates sitting in the same bin, and any system that only counts SKUs cannot tell them apart.
- FEFO beats FIFO whenever shelf life varies between deliveries. First-in is a proxy for first-expiring, and it is a proxy that fails precisely when it matters most.
- Capture happens at receiving or it does not happen at all. Every lot record that is not created when the pallet lands becomes a reconstruction exercise later, and reconstruction is where recalls go wrong.
- Markdown timing is a shelf-life percentage decision, not a calendar decision. A 30 day discount trigger is either far too early or catastrophically late depending on the product.
- You do not need an enterprise WMS to do this. A disciplined spreadsheet with lot rows, a label printer and a bin naming convention clears the bar for most brands under roughly 2,000 orders a month.
When lot tracking becomes necessary
There are two separate triggers, and retailers usually notice the second one first. The regulatory trigger is that a category, a customer or a channel requires it. The operational trigger is that you have started losing money to stock that aged out unnoticed.
On the regulatory side, the rules depend on what you sell and where. In the United States, the Food and Drug Administration’s Food Traceability Rule, issued under Section 204 of the Food Safety Modernization Act, sets record-keeping requirements for entities handling foods on the agency’s Food Traceability List, and the FDA has published extended compliance dates for them. In the European Union, cosmetic products fall under Regulation (EC) No 1223/2009, which requires a batch number on the product and a product information file held by a Responsible Person. US meat and poultry sit with the Food Safety and Inspection Service rather than the FDA. Dates, thresholds and exemptions in all of these change, and which version applies depends on your category, your role in the supply chain and your revenue, so verify the current text at the regulator’s own site before designing a process around it.
The operational trigger is easier to measure and often more expensive than the regulatory one. It arrives when three symptoms show up together.
The three symptoms of a dating problem
The first is write-off surprise: you discover expired units during a count rather than predicting them weeks ahead. If your shrink line moves in unexplained jumps, the cause is usually stock whose remaining shelf life nobody was tracking.
The second is customer-reported dates. One complaint about a short-dated delivery is noise; a pattern of them means your picking is not date-aware, and the units nearest the packing bench are going out regardless of what is stamped on them.
The third is an unanswerable supplier question. A vendor says production run 4471 had a problem, and you cannot say whether you ever received it. That is where the cost of not tracking becomes unbounded, because your only safe response is to treat every unit of that SKU as suspect.
Any one of these on its own justifies the two or three days of setup work that lot tracking requires. If you are still building out the wider operation, the sequencing question is covered in our guide to modern retail logistics from warehouse to doorstep, which puts date control in the context of receiving, storage and outbound flow rather than treating it as a standalone compliance project.
Products that need it sooner than owners expect
Fresh food and chilled goods are obvious. The surprises are the categories where the stability limit is real but invisible.
- Cosmetics and skincare: preservative systems degrade, and batch codes are a standard expectation in the EU market under Regulation 1223/2009.
- Supplements and vitamins: potency claims are only defensible for the tested shelf life, which makes the lot the unit of liability.
- Batteries, adhesives and aerosols: performance and safety both drift over time.
- Pet food and treats: regulated like human food in many jurisdictions, and a frequent source of voluntary recalls.
Batch codes, best-before dates and what to record
The vocabulary matters here because suppliers, regulators and software all use these words slightly differently, and a mismatch between what your supplier prints and what your system stores is the most common failure in the whole process.
A lot or batch is a quantity of product made under uniform conditions, typically one production run. The lot number is the supplier’s identifier for it. A best-before or best-by date is a quality statement: the product is expected to remain at full quality until then. A use-by or expiry date is a safety or efficacy statement. A sell-by date is an instruction to the retailer, not to the consumer, and it usually sits well before the point of quality loss.
Treating these as interchangeable is what produces the two classic mistakes: discarding perfectly saleable stock that passed a best-before date, and shipping past a use-by date because the system recorded it as a quality guideline.
The minimum viable lot record
You need fewer fields than most software vendors suggest. The table below is the set that supports both FEFO picking and a same-day recall trace. Anything beyond it is useful but optional.
| Field | Example | Why it is required |
|---|---|---|
| SKU | SER-VITC-30 | Links the lot to the sellable item |
| Lot or batch number | L4471A | The supplier’s identifier, and the only key that matches their recall notice |
| Date type | use-by | Decides whether the date is a quality or safety boundary |
| Date value | 2027-03-31 | Drives FEFO sequence and markdown triggers |
| Quantity received | 480 | Baseline for reconciliation |
| Quantity remaining | 112 | Tells you recall exposure still on hand |
| Receipt date | 2026-06-02 | Separates shelf life consumed in your warehouse from shelf life consumed upstream |
| Supplier and purchase order | Acme, PO-2214 | The route back upstream when a defect is found |
| Storage location | C-04-2 | Lets a picker or auditor physically find the units |
Two conventions save a disproportionate amount of trouble. Store dates in ISO format (2027-03-31), because supplier codes arrive in every regional order imaginable. And store the lot number exactly as printed, including leading zeros, as text rather than as a number: a lot code of 004471 that your spreadsheet silently converts to 4471 will not match the supplier’s recall notice, which is the one circumstance where the match has to be exact.
Where a small or private-label supplier ships with no legible code, ask them to print one, and until they do, treat each delivery as a lot with an internal code of supplier initials plus receipt date. Record which method you used, because an internally assigned lot is weaker evidence than a supplier lot and any auditor will want to know the difference.
FEFO picking and why FIFO is not enough
FIFO, first in first out, ships the oldest receipt first. FEFO, first expired first out, ships the unit with the nearest date first. When every delivery of a SKU arrives with the same remaining shelf life, the two produce identical pick sequences. That condition almost never holds.
Shelf life at receipt varies because your supplier’s rotation is not yours. A supplier clearing older inventory sends units with nine months left; the next delivery, from a fresh run, arrives with twenty. Under FIFO you ship the nine-month units first, which happens to be correct. Reverse the arrival order and FIFO ships twenty-month stock while nine-month stock ages behind it toward a write-off.
A worked example
Assume three lots of one SKU on hand, and today is 2026-08-16.
| Lot | Received | Use-by | Qty on hand | FIFO rank | FEFO rank |
|---|---|---|---|---|---|
| L4390 | 2026-04-10 | 2027-06-30 | 140 | 1st | 3rd |
| L4471 | 2026-06-02 | 2026-11-30 | 112 | 2nd | 1st |
| L4502 | 2026-07-21 | 2027-02-28 | 300 | 3rd | 2nd |
FIFO ships L4390 first and leaves 112 units of L4471 to expire in fifteen weeks. FEFO clears L4471 first, and at a typical sales rate those units go out with room to spare. The difference between the two policies here is the entire value of lot L4471, produced only by the order in which two deliveries happened to arrive.
The inverse case matters too. FEFO with no guard rail will ship a unit with four days of shelf life left to a customer whose delivery takes five. That is why FEFO needs a floor, not just a sort order.
Setting the minimum remaining shelf life rule
A minimum remaining shelf life rule says that stock below a threshold is not pickable for normal orders. Three thresholds are worth defining separately, because they answer different questions.
- Direct-to-consumer floor: transit time plus the period the customer reasonably expects to use the product. For a consumable bought monthly, 30 to 45 days is a common working floor.
- Wholesale and retail floor: usually contractual. Grocery and pharmacy buyers routinely specify a percentage of total shelf life remaining on delivery, and shipping below it triggers rejection at the door.
- Hard block: the point past which stock cannot ship at all and must be quarantined for disposal or donation.
Express the first two as a percentage of the product’s total shelf life rather than as a fixed day count. A 30 day floor is aggressive on a product with a 24 month life and meaningless on fresh bakery. A rule of one third of total shelf life remaining scales across a mixed catalogue without per-SKU maintenance.
Where FEFO breaks in practice
Three failure modes recur, and none of them are software problems. Mixed lots in one bin is the first: if two lots of the same SKU share a location with no physical separation, the picker cannot execute FEFO regardless of what the pick list says.
The second is the forward pick face. Whoever restocks it decides the effective picking order, so the rule has to apply to internal moves and not only to customer orders. The third is partial cases, where an opened case becomes the convenient one to pick from for weeks while sealed cases with nearer dates sit untouched. Labelling opened cases with their lot and date, and placing them at the front, resolves it without any system change.
Receiving: capturing lot data without slowing intake
Receiving is where lot tracking programs die. The logic is correct, the spreadsheet exists, and then a busy delivery day arrives and someone books in 14 pallets without lot codes because the queue at the dock was more urgent. Every gap created that afternoon is permanent.
The fix is to reduce the work per line to a few seconds rather than to insist on discipline. Four things do most of that work.
Ask for lot data on the advance shipping notice
If your supplier sends lot numbers and dates in the shipping paperwork, even as a column in an emailed packing list, receiving collapses from transcription to verification, which is faster and considerably more accurate. Most suppliers can accommodate the request, because the data already exists in their production records.
Scan rather than type
Where supplier cases carry a GS1-128 barcode, the lot number and expiry date are usually already encoded in it under application identifiers 10 and 17. A cheap 2D scanner that reads those fields removes the two most error-prone keystrokes in the process. Where there is no barcode, print your own lot label at receipt, which shifts the transcription cost to one moment and one person.
Define one location per lot where it is affordable
One lot per location makes every downstream step trivial: the pick list names a bin, the bin holds one date, and a count reconciles against one number. It costs space, so the working compromise is one location per lot for dated stock and shared locations only for the rest. Our piece on warehousing basics for retail brands that just outgrew the garage covers bin naming and zoning before volume forces a rebuild.
Record the date of receipt separately from the expiry
Two deliveries with the same expiry date are not equivalent if one arrived four months earlier. The receipt date tells you how much shelf life was consumed before the stock reached you, which is a supplier performance metric rather than an inventory one. Brands that track it usually find one or two suppliers account for most of their short-dated arrivals, and that conversation is easier to have with a number attached.
The receiving checklist
- Match the delivery to the purchase order before touching lot detail.
- Capture lot number, date type and date value for each line.
- Flag any line arriving below your inbound shelf life threshold, and decide accept or reject before the driver leaves.
- Assign a storage location and write it into the lot record.
- Label cases with lot and date where the supplier’s printing is unclear or absent.
- File the packing list against the purchase order as evidence if the lot record is later challenged.
Step three is the one most often skipped and the most valuable. Rejecting short-dated stock at the dock is free; discovering it six weeks later is a write-off you own.
Markdown timing for stock approaching expiry
A markdown is a decision about which loss you prefer. Discount too early and you give away margin on stock that would have sold anyway; discount too late and you recover nothing. The decision gets easier once you stop counting calendar days and start using two numbers: remaining shelf life as a percentage, and days of cover at the current sales rate.
Days of cover is remaining quantity divided by average daily units sold. A lot of 112 units on a SKU selling 4 a day is 28 days of cover. If it expires in 40 days it clears by itself; if it expires in 20 days, roughly half will not sell, and that gap is what a discount has to move.
A markdown ladder
The ladder below is a default for products with a shelf life of six to twenty-four months. Compress the whole sequence into days for fresh categories.
| Remaining shelf life | Action | Typical discount | Channel |
|---|---|---|---|
| Above 50% | Sell normally, no flag | None | All |
| 50% to 33% | Watch: compare days of cover to days remaining | None | All |
| 33% to 25% | Promote without cutting price: bundle, gift-with-purchase, email feature | 0% to 10% | Owned channels first |
| 25% to 15% | Active markdown, prioritise volume | 15% to 30% | Marketplace and clearance |
| Below 15% | Liquidate, wholesale in bulk, or donate | 40% or more | Clearance, B2B, donation |
| Below the hard block | Quarantine and dispose | Not saleable | None |
Two refinements matter more than the exact percentages. Use non-price levers first: a bundle, a bonus size or an email feature moves dated stock without teaching customers to wait for a discount. And keep short-dated stock out of your main channel where you can, disclosed as a separate labelled variant, because a short-dated unit sold at full price to a subscriber costs more in trust than the margin is worth.
Feed the result back into buying
Markdowns are a symptom. Repeated markdowns on the same SKU mean the order quantity is wrong relative to the shelf life, and no amount of clever discounting fixes a purchasing problem. Compare order quantity in days of cover against total shelf life at receipt: if you are buying 300 days of cover of a product with 400 days of life, the write-off is already in the purchase order.
That comparison is also the cleanest reason to care about turnover on dated stock specifically, which we cover in inventory turnover and why retailers obsess over it, and it is why forecasting matters more for perishables than for anything else in the catalogue. Our walkthrough of forecasting demand without an enterprise tool covers the sales-rate estimate that days of cover depends on.
Recall readiness: tracing a lot in under an hour
A recall is a data retrieval problem under time pressure. The trace runs in two directions, and you need both.
The backward trace answers where a defective unit came from, and needs lot number, supplier, purchase order and receipt date. The forward trace answers where a defective lot went, and needs every order that shipped a unit of it plus whatever remains on hand.
The forward trace is the one most small retailers cannot run, because they record the lot at receipt and lose it at dispatch. Without that link, a recall means contacting everyone who bought the SKU in the window, which is more alarm, more refunds and more reputational damage than the problem warranted.
The missing link: lot at dispatch
Recording which lot went into which order is the single highest-value habit in this entire process, and it is cheap at low volume. Three approaches, in increasing order of effort:
- One lot at a time: designate the active lot per SKU and record the date range it was active. Any order in that range shipped that lot. Approximate but defensible, with no per-order data entry.
- Lot noted on the pick list: the picker writes or scans the lot they picked, and it is stored against the order. Accurate, and adds a handful of seconds per line.
- Scan at pack: the packer scans the case or unit barcode, and the lot is captured automatically. Best accuracy, needs a scanner and a place to put the data.
The first option is genuinely adequate for most brands, and it is the one to implement today if you have nothing. Its weakness is lot changeover days, where two lots were in play at once, so record the changeover moment as precisely as you can.
The one-hour drill
Run this twice a year with a lot chosen at random, and time it. A drill finds the gaps while they are free to fix.
- Pick a lot number and state the SKU, supplier, purchase order and quantity received. Target: 5 minutes.
- State the quantity still on hand and its physical locations. Target: 10 minutes.
- List every order that shipped a unit of that lot, with customer contact details. Target: 20 minutes.
- State the quantity sent to wholesale or marketplace fulfilment, and who to contact at each. Target: 10 minutes.
- Draft the customer notification text and the quarantine instruction for the warehouse. Target: 15 minutes.
The failure point in almost every first drill is step three. If you cannot complete it, implement the active-lot date-range method before anything else on this list.
Quarantine before you communicate
When a genuine problem surfaces, stop the stock moving first. Move the affected lot to a physically separate location, mark it clearly, and block the SKU in every channel including marketplaces, which usually need a separate action from your own store. A recall that keeps shipping the affected lot for six hours while the team drafts an email is a recall that got materially worse.
Then notify, in this order: the regulator if the category and jurisdiction require it, the supplier, wholesale and marketplace partners, and finally end customers. Keep a written log of what you did and when, because regulators and insurers both ask for the timeline and a contemporaneous log is worth more than a reconstruction.
Doing this without an enterprise WMS
Nothing above requires warehouse management software. It requires a place to store lot rows, a way to label stock, and a rule about which unit gets picked. Most brands can run it on tools they already pay for.
The spreadsheet version
One sheet, one row per lot, with the nine fields from the earlier table. Add three calculated columns and it becomes a control system rather than a record: total shelf life in days, remaining shelf life as a percentage of total, and days of cover from remaining quantity divided by your sales rate. Sort by remaining percentage ascending and the top of the sheet is your Monday action list. Conditional formatting on that column does the alerting: amber below one third, red below 15 percent.
The limits are worth stating plainly. A spreadsheet does not decrement quantity when an order ships, does not enforce FEFO at the pick face, and does not link a lot to an order, so the active-lot date range has to live alongside it. Those limits are fine at low volume and become painful around a few thousand orders a month, which is where the tooling question changes, as we set out in WMS for growing retail brands: when a spreadsheet stops working.
Check your 3PL contract before buying software
If you use a third-party logistics provider, this is a contract question. Ask whether they capture lot and expiry at receipt, can pick FEFO, can report lot by outbound order, and how fast they can quarantine a lot on your instruction. A 3PL that cannot do the last one leaves you exposed no matter how good your own records are.
Sequencing: what to do in the first week
If you are starting from nothing, this order gets you the most protection per hour spent.
- List your dated SKUs and their total shelf life. One afternoon.
- Build the lot sheet and back-fill current on-hand stock by walking the shelves. One day, and it doubles as a stock count.
- Add the lot capture step to receiving, and write it into the receiving checklist people actually use.
- Start the active-lot date range log, so forward tracing works from today onward.
- Set your three shelf life thresholds and the markdown ladder.
- Run the one-hour drill on a real lot and fix whatever it exposes.
Steps one through four are the ones that matter, and four least of all can wait: every day you delay it is a day whose orders can never be traced. Once the basics hold, our overview of modern retail logistics from warehouse to doorstep maps how date control connects to picking, packing and carrier choice.
General information, not compliance advice
This article is general information about inventory practice and is not legal, regulatory, food safety, customs or tax advice. Traceability and labelling obligations depend on your product category, your role in the supply chain, your revenue and the jurisdictions you sell into, and they are amended regularly. Named requirements referenced here, including the FDA’s Food Traceability Rule under Section 204 of the Food Safety Modernization Act and EU Regulation (EC) No 1223/2009 on cosmetic products, should be read in their current official text, and the FDA has published compliance dates that have been extended since the rule was issued. Official sources include the US Food and Drug Administration for food, the Food Safety and Inspection Service for meat and poultry, and the European Commission for EU cosmetic and food rules.
Nothing here tells you what your own obligations are. For a determination that applies to your business, consult a qualified food safety or regulatory consultant, a licensed customs broker for import questions, or a lawyer admitted in the relevant jurisdiction. Background on the underlying concept is available at Wikipedia’s overview of shelf life.
FAQ on lot and expiry tracking
Do I legally have to track lot numbers?
It depends entirely on your product category and jurisdiction, and it is not a question this article can answer for your business. Food businesses in the United States may fall under the FDA’s Food Traceability Rule depending on whether their products appear on the Food Traceability List and whether an exemption applies. Cosmetic products placed on the EU market are subject to Regulation (EC) No 1223/2009, which includes batch identification requirements. Check the current official text for your category and take professional advice on your specific position.
Can I use FIFO if all my products have the same shelf life?
Only if the remaining shelf life at receipt is also the same on every delivery, which is a stronger condition. Suppliers ship from their own stock at varying ages, so two deliveries of an identical product can arrive months apart in remaining life. If you cannot confirm that remaining life is consistent, FEFO is the safer default.
How do I handle stock that is past its best-before date but still safe?
A best-before date is a quality indicator rather than a safety limit, so the product may still be saleable in some jurisdictions and unsaleable in others, and marketplace policies differ from the law. Common practice is to move it to a clearly labelled clearance channel with the date disclosed, or to donate it where a food bank accepts post-best-before stock. Confirm what your jurisdiction and your sales channels permit before you list it.
What minimum remaining shelf life should I require from suppliers?
Express it as a percentage rather than a day count. Requiring at least 75 percent of total shelf life remaining on inbound delivery is a common starting point for packaged goods, and it is a term you can put into a purchase order. Write down what you will do when a delivery arrives below it, because the decision is much harder to make at the dock.
How long should I keep lot records after the stock is gone?
Retention periods are set by the applicable regulation and by your insurer, and they commonly extend for a period beyond the product’s shelf life rather than beyond the sale date. Since the storage cost of a spreadsheet row is effectively nothing, keeping lot records indefinitely is the simplest way to avoid getting this wrong. Verify the required minimum for your category with the relevant regulator.
Does a 3PL handle lot tracking for me?
Some do and some do not, and the difference is rarely obvious from the sales material. Ask four specific questions: do you capture lot and expiry at receipt, can you pick FEFO, can you report which lot shipped on which order, and how fast can you quarantine a lot on instruction. Get the answers in writing before you move dated stock to a new provider.
What is the fastest way to start if I have nothing in place?
Build a one-row-per-lot spreadsheet, walk your shelves to back-fill what is on hand, add lot capture to your receiving checklist, and start logging which lot is the active pick lot for each SKU with the date it became active. Those four steps take about two days and give you both a FEFO sequence and a workable forward trace.
How often should I run a recall drill?
Twice a year is a reasonable cadence for most brands, plus once after any material change to your warehouse layout, your 3PL or your order management system. Time the drill and note where it stalls. The gaps a drill exposes cost nothing to fix; the same gaps found during a real recall are expensive.