Capture Expiry Dates at Receiving: 3 Paths
Inventory expiration tracking breaks when dates are typed by hand. Here are the three capture paths—OCR, 2D barcode, shelf-life rules—that fix it at the dock.
ShelfLifePro Editorial Team
Inventory management insights for retail and pharmacy
Why expiration tracking fails before the stock hits the shelf
The expiry date problem almost always starts at the receiving dock, not the shelf. By the time a staff member pulls a product and notices it expired last Tuesday, the date was already wrong — or missing — in the system from day one.
The root cause is simple: someone typed the date by hand. Maybe they were rushing because the delivery truck was blocking the lane. Maybe the invoice had four hundred line items and the date column was tiny. Maybe they transposed two digits. Whatever happened, the number that entered your system was wrong, and everything downstream — your expiration date tracker, your alerts, your FEFO rotation — was broken from that moment.
Fixing inventory expiration tracking means fixing the capture step. Get the date in once, correctly, automatically. Everything else follows.
What breaks when dates are typed by hand
Picture a mid-size grocery receiving dock handling fifteen supplier deliveries a week. Each delivery has between thirty and two hundred SKUs. The receiver is also responsible for checking temperatures, counting cartons, and signing the delivery note. Typing expiry dates into a spreadsheet or POS is the lowest-priority task in that stack, and it shows.
The errors compound. A product entered with a date twelve months too long sits in the back room looking fine in the system while the physical stock quietly expires. Your automated expiration date alerts never fire because the system thinks you have plenty of time. By the time a shelf-walker catches it, you've got a write-off and a gap on the shelf.
Manual entry also creates a second problem: inconsistent formats. One receiver types `06/25`, another types `Jun-2025`, a third types `25/06/25`. A system that can't parse those uniformly will either error out or silently store garbage. Either way, your expiry date tracker is useless.
The three capture paths that actually work
Path 1 — Invoice OCR
Your supplier sends a PDF or paper invoice. OCR (optical character recognition) reads the document, extracts the line items, and pulls the expiry date field into your inventory system — no keyboard required.
This path works well when suppliers print expiry dates on invoices, which is common in pharma and packaged FMCG. The receiver confirms the parsed data on a screen rather than typing it. Confirmation takes seconds; full manual entry takes minutes per line. For a deeper look at how invoice scanning fits into the receiving workflow, see OCR invoice scanning and AI stock entry.
The limitation: OCR is only as good as the invoice. If a supplier prints a batch date instead of an expiry date, or omits the field entirely, OCR has nothing to extract. You still need a fallback.
Path 2 — GS1 2D barcode scan
GS1 DataMatrix and QR barcodes encode the expiry date directly in the barcode using Application Identifier 17 (AI 17 = `YYMMDD` expiry). A scanner reads the barcode on the case or unit, and the date goes straight into the system — no OCR, no interpretation, no typing.
This is the cleanest path when it's available. The date is machine-readable, standardised, and unambiguous. Scan the case, move on. For a full breakdown of how 2D barcodes eliminate date-entry errors, how 2D barcodes kill expiry date typing covers the mechanics in detail.
The limitation: not every supplier uses GS1 2D barcodes yet. Smaller local suppliers, regional food producers, and some fresh-goods vendors still ship with plain 1D UPC or EAN barcodes that carry no date data at all.
Path 3 — Shelf-life rule per category
For products that arrive with no machine-readable date — loose produce, fresh bread from a local bakery, unpackaged meat, bulk goods — you set a shelf-life rule at the category or SKU level. When the receiver logs a delivery, the system calculates the expiry date automatically: today's date plus the rule.
Say you receive fresh ground beef. Your rule says ground beef has a two-day shelf life from receipt. The system stamps today's date, adds two days, and records the expiry. The receiver never touches a date field.
Rules require discipline to maintain. If a supplier changes their formulation and the shelf life extends, someone has to update the rule. But for high-velocity perishables where no barcode date exists, this path is far more reliable than manual entry. For a receiving-dock view of how this fits into fresh-goods inspection, see grocery receiving dock perishable inspection.
Get the free expiry-tracking spreadsheet
Batch-level rows, days-left and status formulas, colour-coded alerts, and a live value-at-risk summary. Works in Excel and Google Sheets. See what's inside.
Instant download. No spam, unsubscribe in one click.
Running the paths in parallel
These three paths are not mutually exclusive. A well-set-up receiving workflow runs all three simultaneously and lets the system pick the best available source for each SKU:
- If a 2D barcode with AI 17 is present → use the barcode date (highest confidence)
- If no 2D barcode but an OCR-readable invoice date exists → use the OCR date
- If neither is available → apply the category shelf-life rule
The receiver's job becomes confirmation, not data entry. They look at a screen, verify the parsed dates look reasonable for what just arrived, and approve. That's a fundamentally different cognitive load than typing dates for two hundred line items.
What to do at the dock right now
You don't need to overhaul everything at once. Start with the path that covers your highest-volume, highest-risk products first.
- Pharma and packaged FMCG: Start with invoice OCR. Your suppliers' invoices almost certainly carry expiry dates. Getting OCR working on those invoices eliminates the bulk of your manual entry immediately.
- Fresh and unpackaged categories: Set shelf-life rules today. Open your category list, assign a shelf-life in days to every fresh SKU, and let the system calculate from receipt date. This takes an afternoon to configure and saves daily effort from that point forward.
- Branded packaged goods with GS1 labels: Add a 2D-capable scanner to the dock. Once you're scanning 2D barcodes, the date capture for those products is essentially free — it happens as part of the receiving scan you're already doing.
A notebook and a pen can record dates at receiving. They cannot alert you thirty days later that a batch is approaching expiry, cannot block a sale of an expired unit at the register, and cannot generate a FEFO pick list for your stock rotation. The capture step and the action step have to be connected, and that connection requires a system.
Closing the loop
Inventory expiration tracking is only as accurate as the data that enters it. Every automated alert, every FEFO rotation, every expiry report is downstream of that first capture moment at the receiving dock.
The three paths — invoice OCR, GS1 2D barcode scan, and shelf-life rules — cover the full range of supplier types and product categories. Pick the one that fits your biggest gap first, get it working, then add the others.
ShelfLifePro supports all three capture paths across grocery, pharmacy, FMCG distribution, and the other verticals it serves. If you want to see how it handles your receiving workflow, there's a 14-day free trial, no credit card required.
ShelfLifePro Editorial Team
The ShelfLifePro editorial team covers inventory management, expiry tracking, and waste reduction for pharmacies, supermarkets, and retail businesses worldwide.
See what batch-level tracking actually looks like
ShelfLifePro tracks expiry by batch, automates FEFO rotation, and sends markdown alerts before stock expires. 14-day free trial, no credit card required.
The monthly expiry-tracking brief
One short email a month, only when there is something worth reading. FEFO tactics, markdown math, and real-world waste-reduction wins. Unsubscribe anytime.
No spam. Unsubscribe in one click.