Free AuditEnterprise AIShelfSense
Back to Blog
ComplianceOct 1, 20267 min read

How Grocery Stores Track Inventory (and Expiry Dates)

How grocery stores keep track of inventory: POS decrements, receiving, cycle counts, the perpetual vs physical gap, and why expiry dates slip through.

SE

ShelfLifePro Editorial Team

Inventory management insights for retail and pharmacy

The question behind the question

When people ask how grocery stores keep track of inventory, they usually picture someone in a back room with a clipboard. That person still exists. But the clipboard is the backup. The main record is a running number in a computer that goes up when a truck gets unloaded and down every time a cashier scans something.

That running number is pretty good at answering "how many cans of black beans do we have?" It's terrible at answering "which of those cans expire next week?" To see why, you need to follow a product from the dock to the register.

Receiving: where the count starts

Every item's life in the system starts at the back door. A delivery shows up with an invoice or an electronic advance ship notice from the supplier. Someone at receiving checks the cases against the paperwork, notes any shorts or damage, and posts the delivery. Posting is the moment the system adds those units to on-hand stock.

Picture a typical independent store on a Tuesday morning. The dairy truck, the bread vendor and a grocery wholesaler all arrive within an hour of each other. The receiver is counting cases, not opening them. If the invoice says 12 cases of yogurt and 12 cases came off the truck, the system gets +12 cases. Nobody types in the date stamped on the lids, because there's no field for it and the bread guy is waiting.

That's the first place expiry falls through, and we'll come back to it. If you want the dock side in more depth, the receiving dock inspection guide covers what to check before you sign.

The POS decrement

Once product is on the shelf, the point-of-sale system does the heavy lifting. Each scan at the register subtracts one unit from on-hand for that item's barcode. Weighted items like deli meat or bulk produce subtract by weight instead. At the end of the day, receipts minus sales gives the system a new on-hand figure, and that figure drives the reorder report.

The catch is that the barcode on a standard retail package only identifies the product, not the specific batch. According to GS1, the standards body behind retail barcodes, a UPC-A carries the product's GTIN and nothing else — no lot number, no expiry date. So when the register scans that yogurt, it knows "one strawberry yogurt sold." It has no idea whether the cup was the one expiring Friday or the one expiring in three weeks.

Perpetual inventory vs what's on the shelf

The running count is called perpetual inventory. What's physically sitting in the store is the physical count. They drift apart constantly, and every grocer knows it.

Things that move product without moving the number:

  • A dented can tossed in the dumpster without a write-off scan
  • Spoiled produce culled by the department lead
  • Theft, from both sides of the counter
  • Mis-scans — the cashier rings two flavors as one
  • Receiving errors where the invoice and the truck didn't match and nobody caught it

Each one leaves the system thinking you have stock you don't. That's why stores get "phantom inventory": the computer says six on hand, the shelf is empty, and the auto-reorder never triggers. How big that gap gets varies a lot by department — the shrink benchmarks by department post lays out where it tends to pile up.

Free log sheets

Get the department date-check logs

Printable daily date-check logs for produce, dairy, meat and deli — the department discipline printed on each page, plus a fillable Excel version. See what's inside.

Instant download. No spam, unsubscribe in one click.

Cycle counts and the annual physical

To pull the two numbers back together, stores count. There are two flavors.

A full physical inventory is the big one: the whole store counted, often overnight, sometimes by an outside counting service. It resets every on-hand number at once and gives the accountant a valuation for the books.

Cycle counts are smaller and constant. Each day or week, a few aisles or a few categories get counted and corrected. High-value or high-theft items get counted more often; slow center-store items less often. The point is to catch drift before it wrecks the reorder report.

Both of these count quantity. A clerk with a handheld scans the shelf tag and keys in "14." They're not recording that eight of those fourteen expire on the 9th. The step-by-step for running a clean count is in the physical inventory count guide.

Why the expiry date isn't in the system

So here's the structural problem. The date lives on the package, but every step of the system works at the product level:

  • Receiving posts cases, not dated lots
  • The barcode carries the product ID, not the date
  • The register decrements by product, not by batch
  • Counts correct quantity, not age

Nothing in that chain ever asks for a date. Adding one means someone has to read a tiny printed stamp, often in three different formats depending on the manufacturer, and type it in. At a busy dock that step gets skipped first.

There's a slow fix coming. According to GS1's Sunrise 2027 initiative, retailers are being pushed to accept 2D barcodes at checkout, and those codes can carry a lot number and expiry date along with the GTIN. Until suppliers print them and your POS reads the extra data, though, the date stays on the package and off the screen. The POS expiry blind spot post goes deeper on that gap.

How expiry actually gets managed on the floor

If the system doesn't hold dates, how do grocery stores keep track of expiration dates? Mostly with people and routines, not data.

Rotation at stocking. When the night crew fills shelves, new product goes to the back and older product gets pulled forward. That's FEFO — first expired, first out. It only works if the crew actually checks dates instead of just front-loading the fresh cases. Training for that is covered in night crew stocking and FEFO rotation.

Date-check walks. Department leads walk their sections on a schedule — dairy and deli more often, center store less — and pull anything near or past code. Pulled items get marked down, donated, returned for vendor credit, or written off.

Vendor-managed sections. For bread, chips and some beverages, the vendor's route rep handles rotation and pulls stale product. That shifts the work, but it also means the store's own records know even less about those dates.

Markdown stickers. Near-code product gets a reduced-price sticker so it sells before it expires. The markdown is often the only trace in the system that the item was aging.

All of this works when the store is staffed and disciplined. It breaks the week someone's out sick, or a new hire stocks dairy front-to-back.

A routine an independent store can copy

You don't need an enterprise system to get most of the benefit. Here's a setup a small store can run with what it already has.

  • Write the date at receiving for short-life categories. Not every SKU — just dairy, deli, bakery, meat and anything else with a short code. Earliest date on the case, written on the invoice or a log sheet. Thirty seconds per delivery.
  • Keep one date-check log per department. Who walked it, when, what got pulled, where it went. The grocery date-check logs for produce, dairy, meat and deli are free to download.
  • Make the earliest date visible. A sticker or marker on the shelf edge with the next code date means anyone walking by knows when to look again.
  • Scan every pull. Write-offs and markdowns go through the register or a handheld as their own reason code. This keeps perpetual inventory honest and shows you where waste actually comes from.
  • Cycle count the short-life departments weekly. Count quantity and jot the oldest date while you're there.
  • Review once a week. Fifteen minutes: what got pulled, which items keep showing up, and whether you're over-ordering them.

A paper or spreadsheet version of this will catch a lot. The expiry-tracking spreadsheet template is a reasonable starting point. What paper can't do is remind you. It won't tell the dairy lead on Thursday that a batch received last Monday hits code Saturday. Someone has to remember to look, and that's the step that slips.

Where software fits

That reminder problem is what dedicated expiry tools are built around: capture the date once at receiving, then surface the at-risk batches before they turn into shrink, instead of after. For a wider view of what to look for in a system, see the grocery inventory management software guide.

ShelfLifePro serves supermarkets and grocery stores, and it's built around that batch-and-date gap. If you want to see whether it fits how your store already runs, there's a 14-day free trial, no credit card required.

SE

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.

Newsletter

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.