Empty, Occupied, or Unreadable: The Three Answers in Every Inventory Count

Why the third answer matters as much as the first two, and what an inventory system should say when it cannot see a location clearly.

Cycle counts are designed to answer one question: is something there, or not. Almost everything downstream in a DC runs on that determination. Allocation logic, replenishment triggers, the slotting plan, the labor plan, and increasingly the automation itself. Every one of those acts on the answer without asking how it was reached.

Average inventory accuracy in U.S. retail is often put near 63%*, which means roughly one record in three already disagrees with the slot it describes.

But reading a pallet position means contending with everything physical about it, and sometimes the read will fail to confirm what is there. So there are three possible outcomes, not two:

  1. The location is occupied. 

  2. The location is empty. 

  3. The location could not be read.

The answer that gets collapsed

The third outcome is the awkward one, and the temptation is to fold it into the second. No barcode could be identified, so nothing must be there.

But consider what makes a location hard to read: stretch wrap over the barcode, a label facing inward, a load overhanging from the bay next door, product shifted out of position. Every one of those requires a pallet to be present, which means the slot most likely to have something in it is the one getting logged as empty.

What a phantom empty actually costs

When a slot holds product but the label is facing inward, the count records it empty. From that moment the WMS believes the position is open, so it will not count that product toward available inventory, and an order that could have been filled from it gets reported short. If the item is on an expiry clock, that clock keeps running while the record says there is nothing to rotate.

Eventually someone finds it. A replenishment task sends an associate to a slot the record says is empty, and there is a pallet sitting in it, so now they are troubleshooting instead of replenishing on a shift that was scheduled for outbound work. Multiply that across a building where a third of records already disagree with the slot they describe, and the pattern is a floor team spending its day chasing discrepancies that a count created and then declined to flag.

Three answers, three different jobs

Each outcome requires a different operational workflow:

  • Occupied: Validates quantity and updates inventory planning. 

  • Empty: Signals available capacity or triggers replenishment.

  • Unreadable: Routes exception tasks directly to staff for verification rather than triggering automated WMS actions.

Reading the position, not just the label

Telling empty apart from unreadable requires more than one signal. A barcode reader either returns a code or it returns nothing.

Computer vision reads the location itself, not just the label on it. Occupancy comes from a model trained to answer that question on its own, independent of whether any code resolved. Text on the load can be read as text, so an LPN the barcode reader could not decode can still be matched against what the record expects there.

So the count ends with a list of unverified pallet locations to check, not a binary list sorted by occupied and empty. Each exception arrives with the image behind it, so most resolve on screen in seconds and the rest are a short set of positions worth walking to. A bay that comes back unreadable week after week becomes a labeling problem someone can go fix.

Gather AI Vision reads more than ten data points from a single capture, and the identity of the pallet is only one of them. Part of the Physical AI platform for logistics, built to keep the record current in buildings that never stop moving, and to reason across the systems you already run so the right action follows from what is actually on the floor.

Want to see what that looks like across your racking? Request a demo from Gather AI.

*Auburn University RFID Lab, via GS1 US