Perishable inventory tracking: expiry dates, FIFO and FEFO
Perishable inventory tracking records the quantity, location and date information of each batch of goods with a limited selling life. A grocery POS that supports expiration tracking connects those records to receiving, shelf rotation and stock adjustments. Tracking only the SKU and its total quantity cannot show which delivery needs attention first.
The practical workflow is to record dates at receipt, identify the physical batch during restocking, review stock that needs action, and record the outcome. This guide explains what to check in that workflow, with illustrative stock records rather than industry spoilage benchmarks.
_Updated October 25, 2026._
What a grocery POS needs to track expiration dates
Start with the receiving record. One SKU can represent several deliveries with different dates. Keep the product identifier alongside the supplier lot, received quantity, accepted quantity, receiving date, printed date and store location. Record the kind of date shown on the label rather than treating every date as interchangeable.
| Field | Why it matters at the store |
|---|---|
| SKU or GTIN | Identifies the product being received |
| Batch or lot | Identifies a production batch within the product |
| Printed date and date type | Preserves the supplier's information for the store's handling policy |
| Accepted quantity | Keeps rejected or damaged goods out of available stock |
| Store and shelf or storage location | Tells staff where the batch can be found |
| Status and adjustment history | Shows whether goods are available, held, returned or written off |
A barcode does not automatically supply all of those fields. GS1 identifies batch or lot data with Application Identifier 10 and expiration date data with 17. The label must actually encode the information, and the scanner and receiving software must understand that encoding. An ordinary product-identification scan does not prove that a batch or date was captured.
Check the incoming package and the item sold at checkout separately. A case label may carry lot information that individual units do not. If staff open a case, preserve the connection between the case's batch and the shelf stock. Our barcode and SKU setup guide covers product identification; batch tracking adds another layer.
When reviewing a POS, ask the supplier to show a real label moving through receipt and stock lookup. Discuss your receiving and date-tracking requirements with the Sandooq team before assuming a particular scanner or workflow is supported.
FIFO vs FEFO: a worked rotation example
FIFO means first in, first out: prioritize the batch received earliest. FEFO means first expired, first out: prioritize the eligible batch with the earliest expiry date. Neither method replaces the store's food-handling, storage or removal policy.
Consider these illustrative records for the same packaged product:
| Batch | Received | Printed expiry | Units accepted |
|---|---|---|---|
| A | November 1 | November 20 | 80 |
| B | November 3 | November 15 | 60 |
FIFO puts batch A first because it arrived earlier. FEFO puts batch B first because its printed expiry is earlier. A store that sorts only by receiving date can miss this difference. The combined balance is 140 units, but the immediate rotation task concerns the 60 units in batch B.
Use the example to test both software and shelf work. Can staff find batch B's location? Does the restocking list distinguish it from A? Can the team record a transfer, return or write-off against the correct batch?
Physical rotation and accounting depletion also need to agree. If checkout reads only the product code, a system may assign the sale to a batch using a rule. That assignment is an assumption unless the physical batch is identified. Do not describe automatic FEFO allocation as proof that shoppers actually picked the intended batch.
For goods with consistent dates, FIFO may produce the same order as FEFO. When dates differ across deliveries, comparing the two makes the operational choice visible. Test a shorter-dated new delivery instead of using two batches whose arrival and expiry dates happen to agree.
Turn date visibility into an action queue
An expiry report needs an owner, a location and a recorded outcome. A list of dates without a shelf task leaves the problem for the next shift. Agree the handling and removal rules with the person responsible for food safety, then configure the inventory workflow around those rules.
| Queue | Question to answer | Record to keep |
|---|---|---|
| Receiving exception | Is the delivered date or condition acceptable under our policy? | Accepted, held or rejected quantity and reason |
| Rotation task | Which eligible batch should be placed first? | Batch, shelf and responsible shift |
| Review task | Can the remaining eligible quantity sell within our selling window? | Quantity, recent sales and proposed action |
| Markdown or transfer | Is the action permitted and practical for this stock? | Approval, destination or price change |
| Removal or write-off | Which quantity is no longer available for sale? | Batch adjustment and reason |
Set review thresholds using the actual label, storage requirements, delivery cadence and store policy. A universal table such as “markdown all dairy three days before expiry” is not a reliable substitute. A transfer also needs enough time for receiving and selling at the destination; moving a batch between stores does not reset its date.
Keep the queue small enough to work through. If every item is flagged immediately after receipt, staff cannot tell which action matters. Review false alarms and missed actions with the team, then adjust the configuration. Follow the record from alert to outcome during a demo, including permissions and what happens if the task is left unfinished.
Connect the handoff to the supplier receipt and discrepancy process, so date exceptions are recorded before stock becomes available.
Measure recorded waste separately from unexplained shortages
Waste is a known stock adjustment with a recorded reason, such as expiry or damage. An unexplained shortage is the difference between expected and counted stock that still needs investigation. Inventory shrinkage can include several kinds of loss; it is not evidence of theft by itself.
Use explicit quantities and denominators in the report. In an illustrative snapshot of one batch with no opening balance or transfers:
- Accepted from the supplier: 100 units.
- Sold: 85 units.
- Written off with an expiry reason: 10 units.
- Remaining on hand: 5 units.
The reconciliation is 100 = 85 + 10 + 5. Recorded expiry waste is 10 / 100 = 10% of accepted units for that batch. This is an example, not a grocery benchmark or a percentage of revenue. A later count of only 3 remaining units creates a separate 2-unit discrepancy; do not silently add it to recorded expiry waste.
For an ongoing category, include opening stock, receipts, transfers and returns, and use a consistent period. Record adjustment values using the store's cost method. Markdown discounts affect the sale's margin; they are not the same measure as units physically written off.
Compare repeated batches before changing ordering. A stock discrepancy may need a targeted physical cycle count; repeated recorded waste may need smaller deliveries or an earlier review task. Keep those investigations separate so the report leads to the right action.
Test the whole workflow before choosing a POS
A feature name is not enough to establish end-to-end batch tracking. Bring one product, two batches and a short delivery to the demo. Ask the vendor to complete these checks in sequence:
- Receive the same SKU twice with different dates and quantities.
- Reject part of one delivery without adding it to available stock.
- Find each batch's remaining quantity and location.
- Show the rotation task for the shorter-dated batch.
- Explain how a checkout sale is assigned when its barcode lacks lot data.
- Transfer or write off a quantity and trace the adjustment to its operator.
- Reconcile the remaining physical quantity with the system record.
Ask which steps are native, which need an integration and which remain manual. Also establish what happens during a network outage and how conflicting stock adjustments are reviewed after reconnection. The retail POS buying checklist helps compare those answers across vendors without assuming all systems behave alike.
Document the result for your store. A spreadsheet may be workable for a small, clearly assigned stock area; a larger operation needs more reliable handoffs and shared visibility. Choose based on the records the team can maintain, rather than a promise that software removes the need for shelf checks.
Frequently asked questions
How do grocery POS systems track perishable items and expiration dates?
A grocery POS with batch support records each delivery's product, lot, accepted quantity, location and date information. It then uses those records for rotation tasks, date reviews and stock adjustments. Confirm how the system identifies the physical batch during receiving and sale. A product barcode or a total SKU balance alone cannot establish which units expire first.
What is the difference between FIFO and FEFO?
FIFO prioritizes the batch received first; FEFO prioritizes the eligible batch with the earliest expiry date. They give different results when a later delivery expires sooner than an earlier one. Both need accurate records and physical shelf rotation. The store's handling and removal rules determine which goods remain eligible for sale; the rotation rule does not decide that.
Can a barcode scanner capture expiry dates automatically?
Only when the barcode contains date data and both the scanner and software support it. GS1 Application Identifier 17 describes an expiration date, while 10 describes a batch or lot. Check the actual supplier label during a demo. If those fields are missing, staff need another supported way to enter or import the information and associate it with the receipt.
How early should expiry alerts trigger?
Set thresholds from the printed date, date type, storage conditions, delivery schedule and your store's handling policy. Allow enough time for an authorized action and assign a person to complete it. There is no single number of days that fits every category or package. Review alerts against recorded outcomes to see whether they create useful tasks.
Is expired stock the same as inventory shrinkage?
Expired stock is a known reason for an adjustment when staff record it. Shrinkage is a broader inventory-loss measure and may include several causes. Keep recorded expiry waste separate from unexplained count differences in operational reports. That distinction helps the team decide whether to investigate ordering, date handling, receiving, transaction records or a physical discrepancy.
What should I ask a POS vendor to demonstrate?
Ask for two batches of one SKU with different expiry dates, a short delivery, a sale, and a write-off. Check the accepted quantities, batch allocation, staff permissions and remaining balance after each step. Ask which actions are manual or integrated. Use your own labels and store workflow so the demonstration tests more than a prepared screen.
Authoritative sources
- GS1 Application Identifiers — the definitions of batch/lot AI 10 and expiration date AI 17.
- GS1 fresh fruit and vegetable traceability guideline — product identification, batch traceability and barcode data at retail.
Related reading at Sandooq
- Purchase orders, accepted deliveries and supplier discrepancies
- Counting selected stock without a full-store shutdown
- Checking barcode and SKU records at receipt
- Investigating unexplained retail stock losses
- Comparing POS systems against your store's actual workflow
- Explore the grocery POS workflow
Book a discussion about your grocery inventory workflow. Bring a sample label and a receiving example so the team can establish which parts of your process Sandooq supports and where another tool or manual control is needed.





