Employee Theft vs Expiry: Reading Shrinkage Data
If your shrinkage is 80% dairy and bakery, it's probably not theft. Pattern analysis that separates real theft from untracked expiry.
For two years, Dan thought someone was stealing from him
Dan runs a 4,200-square-foot independent grocery in suburban Ohio. Three registers, 14 employees across two shifts, and a product mix that skews heavy toward dairy, bakery, deli, and fresh produce -- the high-margin, high-turnover departments that make independents viable against the Kroger two miles down the road. His store does about $38,000 per week in revenue, or roughly $2 million annually. Not a large store. Not a small one. The kind of store where the owner knows most of his customers by name and does his own receiving at 5 AM.
For two years, Dan's shrinkage rate ran at 3.2%. He knew this because his POS system told him: the difference between what he bought (at cost) and what he sold (at cost) left a gap of about $1,200 per week. The National Retail Federation says the average grocery shrinkage rate is around 1.4-1.6%, depending on the year and the methodology. Dan was running at roughly double the benchmark.
He was convinced he had a theft problem. He installed two additional security cameras ($1,100). He started doing random bag checks at shift end. He moved the high-value items -- razor blades, premium cheese, the nice olive oil -- to spots with better sightline from the registers. He even, reluctantly, let go of one employee he suspected was pocketing items, based on nothing more concrete than gut feeling and the fact that shrinkage seemed higher on that person's shifts.
None of it made a measurable difference. Shrinkage stayed at 3.1-3.3%.
Then, on the advice of an accountant who worked with several grocery clients, Dan started tracking why inventory disappeared, not just that it disappeared. He created a simple log -- a clipboard next to the dumpster, really -- where employees recorded every item they threw away, with a date, product name, and reason. Expired. Damaged. Unsellable. He committed to doing this for 90 days.
The results were not subtle. Of his $1,200 weekly shrinkage, approximately $940 was expiry. Product that arrived, sat on a shelf or in a cooler, passed its sell-by date, and went into the trash. Dairy alone accounted for $380 of it. Bakery was $290. Deli and prepared foods covered another $170. Fresh produce added $100.
The remaining $260 per week -- roughly 0.7% of revenue -- was a mix of actual theft (probably), cashier errors, receiving discrepancies, and damage. In other words, Dan's "theft problem" was a perfectly normal amount of operational loss for a store his size. His actual problem was that he was ordering too much perishable product, rotating it poorly, and throwing away money he had already spent. The cameras did not help because cameras cannot see yogurt expiring in the back of a cooler.
Not sure how much you're losing to expiry?
Run a free inventory waste audit — find your bleeding SKUs in 60 seconds. No sign-up required.
Run free auditWhy store owners default to "theft" as the explanation
There is a psychological reason for this, and it matters because the misdiagnosis is expensive.
Theft is a narrative. It has a villain. It has a solution (catch the villain). It is emotionally satisfying to pursue because you are protecting what is yours. When an owner walks through the store and the shelves look well-stocked but the numbers say inventory is vanishing, the human brain reaches for an explanation that involves agency -- someone is doing something to you.
Expiry is not a narrative. It is an accumulation. Nobody stole anything. The yogurt just sat there for 18 days, and on day 19 it was unsellable, and someone threw it in the trash, and maybe they logged it and maybe they didn't, and the $2.80 you paid for it quietly vanished from your P&L. Multiply that by 50 SKUs across 300 days a year and you get $40,000-60,000 in annual loss that never once triggered an alarm, a camera alert, or a confrontation.
The NRF's 2023 National Retail Security Survey attributes approximately 36% of retail shrinkage to external theft (shoplifting), 29% to internal theft (employee), and 25% to "process and control failures" -- which includes but is not limited to expiry, damage, and administrative errors. The remaining 10% is vendor fraud and other causes. But those numbers are for all retail. For grocery specifically, the composition shifts dramatically. Grocery has lower external theft rates than apparel or electronics (nobody is shoplifting 2% milk for resale) and much higher process loss because 30-40% of a grocery store's inventory is perishable.
A reasonable estimate for an independent grocery store: 50-65% of total shrinkage is expiry-related, 15-25% is administrative and receiving errors, and only 10-25% is actual theft of any kind. Dan's breakdown -- 78% expiry, 22% everything else -- is not unusual. It is close to the median for stores that bother to measure.
The pattern signature: how expiry shrinkage looks different from theft
If you are not yet tracking shrinkage by cause, you can still make an educated guess about what is driving your numbers by looking at where the shrinkage concentrates.
Theft has a relatively flat distribution across categories. A shoplifter takes whatever is valuable and concealable. An employee pocketing items takes whatever is convenient. Neither thief has a strong preference for yogurt over granola bars over canned soup. If your shrinkage is spread roughly evenly across departments as a percentage of each department's cost of goods, theft is a plausible explanation.
Expiry concentrates in perishable departments. Dairy. Bakery. Deli. Prepared foods. Produce. Fresh meat. If 75-85% of your shrinkage dollars come from departments that represent 35-45% of your total inventory cost, you almost certainly have an expiry problem, not a theft problem. The concentration is the signal.
Here is a diagnostic framework. Pull your shrinkage numbers by department (most POS systems can do this, even if the report is ugly) and calculate each department's share of total shrinkage versus its share of total COGS.
| Department | % of Total COGS | Expected % of Shrinkage (Theft Pattern) | Expected % of Shrinkage (Expiry Pattern) |
|---|---|---|---|
| Dairy | 12% | 10-14% | 25-35% |
| Bakery | 6% | 5-8% | 18-25% |
| Deli/Prepared | 8% | 7-10% | 12-18% |
| Produce | 10% | 9-12% | 10-15% |
| Meat/Seafood | 15% | 13-17% | 8-12% |
| Center Store (dry goods) | 30% | 28-33% | 5-10% |
| Frozen | 10% | 9-12% | 3-5% |
| Non-food (HBC, GM) | 9% | 8-11% | 1-3% |
If your actual numbers look like the "Expiry Pattern" column -- dairy and bakery dramatically overrepresented, center store dramatically underrepresented -- you are almost certainly looking at spoilage, not stealing. Nobody is stealing $380 a week in yogurt and cottage cheese. That is not how theft works.
Setting up a shrinkage log that actually tells you something
Dan's clipboard-next-to-the-dumpster method is crude but effective. You can do better without much additional effort. The key is capturing four pieces of information for every item discarded:
1. Date. When the item was pulled from the shelf or cooler.
2. Product. Specific enough to be useful. "Dannon Greek Yogurt Strawberry 5.3oz" is useful. "Yogurt" is not. You need SKU-level granularity because the solution to shrinkage is SKU-level ordering adjustments.
3. Reason. Four categories are sufficient for most stores: Expired (past sell-by date), Damaged (dropped, torn packaging, temperature abuse), Unsellable (not expired but no customer will buy it -- bruised produce, stale-looking bakery, deli items past their visual prime), and Unknown (cannot determine reason). If "Unknown" exceeds 15% of your total discards over a 90-day period, your logging discipline needs work.
4. Quantity and cost. How many units and what you paid for them. The cost matters more than the retail price for understanding actual financial impact.
Run this log for a minimum of 90 days. Thirty days is not enough because weekly patterns (weekend vs. weekday sales velocity) and monthly patterns (first-of-month SNAP purchases, holiday weeks) distort shorter samples. Ninety days gives you roughly 13 weeks of data, enough to see genuine patterns versus noise.
What you will learn from 90 days of logging, based on what stores like Dan's have found:
Which SKUs are chronic wasters. In Dan's case, five dairy SKUs accounted for 40% of his dairy waste. Not the whole category -- five specific products that he was consistently over-ordering because his par levels were set based on peak demand, not average demand. Adjusting the par level on those five SKUs by 15-20% cut his dairy waste by a third.
Which days generate the most waste. Expiry waste is not uniform across the week. Most grocery stores see peak waste on Monday and Tuesday -- product ordered for the weekend that did not sell. If you are restocking to the same par levels on Thursday (for the weekend rush) and Monday (for a slower week), you are structurally over-ordering for the first half of the week.
Whether your rotation practices are working. If you are throwing away product that still has two or three days of shelf life remaining, the issue is not expiry -- it is that product is getting buried behind newer stock and customers are not reaching it. This is a FIFO (first in, first out) discipline problem, not an ordering problem, and the solution is different.
Category benchmarks: what "normal" expiry looks like
Knowing your expiry rate is only useful if you know what to compare it against. These benchmarks come from a combination of USDA data, industry trade publications, and aggregated data from independent grocery consultants. They represent the range for well-managed stores, not aspirational targets and not worst-case scenarios.
Dairy: 2-4% of category COGS. A store doing $5,000/week in dairy cost should expect $100-200/week in dairy waste. If you are above 5%, your ordering and rotation need attention. If you are above 7%, something is structurally wrong -- check your cooler temperatures, your receiving practices (are you accepting short-dated product from distributors?), and your par levels.
Bakery (received, not in-store baked): 5-8% of category COGS. Bakery has inherently short shelf life and customer expectations for freshness are high. A 6% waste rate on received bakery is normal. Below 4% usually means you are understocking and losing sales to empty shelves, which is worse than the waste you are avoiding.
Deli and prepared foods: 4-7%. This category is tricky because it includes both received products (pre-packaged deli meats, prepared salads) and items you make in-store (rotisserie chickens, sub sandwiches). In-store prepared items run higher waste because production scheduling is imprecise.
Produce: 4-6%. Produce waste is highly seasonal. Summer stone fruit can run 10% waste even in a well-managed department. Winter root vegetables might run 2%. The annual average is what matters.
Meat and seafood: 2-4%. Meat waste should be low because the cost per unit is high enough that most stores pay close attention to it. If meat waste exceeds 5%, check your case temperatures and your markdown timing -- most meat departments benefit enormously from a consistent "mark down at 2 days before sell-by" policy rather than ad hoc decisions.
Frozen: Under 1%. If you are wasting frozen product, either your freezer is malfunctioning or you are carrying items with negligible demand. Frozen waste is almost never an expiry issue -- it is a planogram issue.
Center store (dry goods, canned, packaged): Under 0.5%. These products have shelf lives measured in months or years. Waste here is usually damaged goods, discontinued items you cannot return, or a receiving error where you accepted product you did not order.
When to actually worry about theft
All of this said, theft is real and some stores do have a genuine theft problem. Here are the indicators that shrinkage is not just expiry:
Your non-perishable shrinkage rate exceeds 1%. If center store and non-food departments are losing more than 1% of COGS, something other than expiry is happening. These products do not expire on any relevant timeline. Either they are being stolen, they are being miscounted at receiving, or your POS is miscoding sales. All three are worth investigating.
High-value items disappear at a disproportionate rate. If your $14 grass-fed steaks shrink at 8% but your $4 conventional ground beef shrinks at 2%, the steaks might be walking out the door. Expiry does not discriminate by price point within a category. Theft does.
Shrinkage correlates with specific shifts or employees. Run the numbers by shift if your POS allows it. Expiry is consistent across shifts because product expires regardless of who is working. Theft often concentrates -- not always, but often enough that a shift-level analysis is worth doing. And to be clear, this is not about suspecting your employees. It is about narrowing down where the loss occurs so you can apply the right solution.
Shrinkage spikes in specific product types that are commonly stolen. In grocery, the highest-theft items are alcohol, premium meat, health and beauty products, baby formula (yes, still), and small high-value items like premium cheese and gourmet chocolates. If these categories shrink at 3-4x your store average and you cannot find them in the expiry log, theft is the likely explanation.
Your expiry log accounts for the majority of shrinkage, but a persistent gap remains. Dan's numbers were instructive: $940 in logged expiry plus roughly $260 in unexplained loss per week. That $260 is 0.7% of revenue. For his store size, anything under 0.8% unexplained is within the range of normal administrative error and minor, opportunistic theft that every store experiences and no store completely eliminates. If the unexplained gap were $500 or $600 per week -- 1.3-1.6% of revenue -- Dan would have reason to dig deeper.
The math of misdiagnosis
The cost of treating an expiry problem as a theft problem is not just the wasted effort on cameras and bag checks. It is the opportunity cost of not solving the actual problem.
Dan spent $1,100 on cameras. He spent roughly 3 hours per week for six months on enhanced security measures -- bag checks, reviewing footage, adjusting product placement for loss prevention. At an imputed value of $35/hour for the owner's time, that is $105/week or $2,730 over six months. Total investment in solving the wrong problem: approximately $3,830.
During those six months, his actual expiry waste continued at $940/week, or roughly $24,440. If he had instead spent those six months addressing the expiry issue -- adjusting par levels, implementing FIFO rotation, setting up markdown timing protocols -- and achieved even a modest 25% reduction in expiry waste, he would have saved $6,110 in the same period. The cameras saved approximately nothing because the cameras were pointing at a problem that did not exist at the scale he imagined.
To be fair, the cameras are not worthless. They deter the baseline level of shoplifting that every retail store deals with, and they are useful for resolving customer disputes and monitoring operational practices. But they were bought to solve a $60,000 annual problem (Dan's framing) that turned out to be a $13,500 annual problem at most. The $49,000 expiry problem was invisible because nobody was measuring it.
How to separate the signal from the noise in 90 days
If you suspect you might be in Dan's situation -- shrinkage above benchmark, uncertain about the cause -- here is a 90-day protocol that will give you clarity.
Days 1-7: Set up your waste log. Physical clipboard or a shared spreadsheet on a tablet near the discard area. Train every employee who touches product disposal. Make it clear this is not about blaming anyone -- it is about understanding where money goes. Log every discard: date, product, reason, quantity, cost.
Days 1-30: Log without changing anything. Do not adjust your ordering, rotation, or markdown practices. You need a baseline. If you change behavior while measuring, you cannot isolate the effect. Thirty days of baseline data will tell you your current expiry rate by department and category.
Day 31: Analyze your baseline. Calculate expiry waste as a percentage of COGS by department. Compare against the benchmarks above. Calculate unexplained shrinkage (total shrinkage minus logged expiry minus logged damage). This is your "theft plus administrative error" number. If it is under 1% of revenue, you probably do not have a meaningful theft problem. If it is over 1.5%, investigate further.
Days 31-60: Implement expiry reduction measures. Adjust par levels on your top 10 wasting SKUs. Implement or enforce FIFO rotation. Set a markdown protocol (mark down at 2 days before sell-by for dairy, 1 day for bakery). Track the log daily.
Days 61-90: Measure the change. Compare your days-31-60 expiry rate against your days-1-30 baseline. A well-executed adjustment should produce a 20-35% reduction in expiry waste. If your total shrinkage drops proportionally, expiry was the primary driver. If total shrinkage stays the same despite lower expiry waste, you may have an emerging theft or administrative issue worth investigating.
After 90 days, you will know -- not guess, not suspect, not assume -- what is driving your shrinkage. That knowledge is worth more than any camera system, because it points you at the problem you actually have.
What Dan learned
Dan's shrinkage today runs at 1.8%. Still above the 1.4% NRF benchmark, but within the range that independent grocers with a heavy perishable mix typically see. His weekly waste dropped from $1,200 to approximately $680. On an annual basis, that is a savings of about $27,000.
He did not achieve this by catching a thief. He achieved it by buying less yogurt on Mondays, rotating his dairy cooler twice a day instead of once, marking down bakery at 4 PM instead of throwing it away at close, and setting up a standing arrangement with a local food pantry that picks up near-expiry items every Wednesday and Saturday (which he writes off as a charitable donation, saving another $3,200 annually in tax benefit at his marginal rate).
The cameras are still there. They work fine. But the clipboard by the dumpster saved him more money than the cameras ever will.
ShelfLifePro tracks expiry-driven shrinkage separately from other losses, so you know exactly where the problem is. Free plan at shelflifepro.net.
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.