Free AuditEnterprise AIShelfSense
Back to Blog
GroceryMar 202614 min read

Grocery E-Commerce: Stop Sending Near-Expiry Items

Online orders get the shortest-dated product because pickers follow shelf FEFO. The picking rules and inventory integration that fix this.

The customer who ordered groceries online and received yogurt that expires tomorrow is not going to tell you about it

They are going to tell everyone else. The one-star review writes itself: "Received items expiring in 2 days. Would never buy these off the shelf. Won't order again." And here is the thing — the customer is right. If they were standing in your dairy aisle, they would reach past the front row and grab the carton with the longest date. Every shopper does this. It is economically rational behavior. But when they order online, they have outsourced that selection to your picker, and your picker grabbed the front carton because it was the fastest way to fill the order and move on to the next one.

This is one of those problems that looks small in the moment — a single short-dated yogurt in a $150 grocery order — and compounds catastrophically over time. The customer who gets one near-expiry item might not say anything. The customer who gets near-expiry items three orders in a row switches to a competitor and never comes back. And you will not see this in your customer service data, because the overwhelming majority of dissatisfied online grocery customers do not file complaints. They simply leave. Silently, permanently, and at a customer acquisition cost of $30-$50 that you will never recover.

The online grocery business in the United States is now a $95+ billion market. It is also an operationally unforgiving business where the gap between "customer received what they expected" and "customer received something they would not have chosen themselves" is the difference between a repeat buyer and a lost one. And the single most common version of that gap — the one that generates the most complaints per incident, the most social media posts, the most quiet defections — is the near-expiry pick.

Free Tool

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 audit

Why your pickers keep doing this

The fundamental problem is that the incentive structure of grocery e-commerce picking is optimized for speed, and speed is in direct tension with date-code quality.

A typical grocery e-commerce operation measures picker performance primarily on units per hour (UPH). Industry benchmarks for manual picking in a store-pick model run 60-100 UPH, which means your picker has 36-60 seconds per item to locate it, verify the quantity, bag it, and move to the next item on the list. In a warehouse-pick or dark store model, UPH targets are higher — 120-180 units per hour — because the layout is optimized for picking efficiency rather than customer shopping experience. Either way, the time budget per item is extremely tight.

When a picker arrives at the yogurt shelf to fill an order for two containers of Chobani vanilla, they have roughly 45 seconds. The fastest path to filling that line item is to grab the two front-facing containers, scan them, and move on. Checking the date code on those two containers takes an additional 5-8 seconds per unit. Reaching behind the front row to find containers with longer dates adds another 5-10 seconds. On a single item, that is trivial. Across a 40-item order, the date-checking overhead adds 7-12 minutes, which drops UPH from 100 to 70-80 and, in operations where pickers are evaluated on speed, puts that picker at the bottom of the performance rankings.

This is not laziness. It is a rational response to the metrics the operation has chosen to prioritize. You have told your pickers, explicitly or implicitly, that speed matters more than date quality, and they are giving you exactly what you asked for.

The second contributing factor is less obvious but equally important: most picking systems do not surface expiry information to the picker at the point of selection. The picker's handheld or pick list shows the product name, location, and quantity. It does not show "minimum acceptable date code for this item" or "customer date expectation for this category." Without that information, the picker has no way to make a quality judgment even if they wanted to, because they do not know what date code the customer would consider acceptable. Is yogurt expiring in 4 days acceptable? What about 6 days? 10 days? The picker does not know, so they grab whatever is in front of them and hope for the best.

The third factor is that many grocery e-commerce operations use the oldest inventory for online orders as a deliberate (if unstated) strategy. The logic is seductive: online customers cannot see the date code before purchase, so use the online channel to move short-dated inventory that in-store shoppers would leave on the shelf. This is the grocery e-commerce equivalent of serving yesterday's bread at a restaurant and hoping nobody notices. Some customers will not notice. Enough will notice, and the reputational damage compounds in ways that are difficult to reverse.

The reputational math is worse than you think

Let me quantify this, because I think most operators dramatically underestimate the economic impact of near-expiry picks.

A 2024 Grocery Doppio survey found that 67% of online grocery customers cited "product quality and freshness" as the primary factor in their satisfaction with online grocery, ahead of delivery speed, pricing, and order accuracy. A separate Brick Meets Click analysis found that online grocery customers who report receiving short-dated items are 3.2 times more likely to reduce their order frequency than customers with other types of complaints (wrong items, damaged packaging, substitutions).

The lifetime value of an online grocery customer varies by market, but a reasonable estimate for a customer ordering weekly at an average order value of $120 is $6,240 per year. If near-expiry picks cause even 5% of your online customer base to reduce order frequency by half, the annual revenue impact on a 1,000-customer operation is $156,000. If 2% of your customers defect entirely, that is another $125,000. The combined revenue impact — $281,000 — dwarfs the cost of implementing proper picking rules by at least an order of magnitude.

And this is before we account for the asymmetric nature of online reviews. A customer who receives fresh, long-dated product does not typically post a review saying "my groceries were fresh." A customer who receives yogurt expiring tomorrow absolutely posts a review saying so, and that review is visible to every potential customer evaluating your service. The ratio of negative reviews to positive reviews for freshness-related issues runs roughly 8:1 in online grocery, which means a small number of near-expiry incidents generates a disproportionate volume of visible negative feedback.

What customers actually expect (and what the data shows they will tolerate)

The customer expectation for date codes on online grocery orders is not "the absolute freshest item in the store." It is "what I would have selected if I were shopping myself." This sounds like the same thing, but it is not, and the distinction matters for building practical picking rules.

When a customer shops in store, they typically select an item with at least 60-70% of its total shelf life remaining. If a yogurt has a 21-day total shelf life and the customer is shopping on day 7, they will generally select a container with 14+ days remaining (the back of the shelf) rather than one with 7 days remaining (the front). They are not insisting on the absolute freshest container in the store. They are rejecting the oldest ones.

This gives us a workable standard for online picking: ensure that every item picked has at least 50-60% of its total shelf life remaining at the time of delivery. For a 21-day yogurt, that means a minimum of 10-12 days remaining. For a 7-day bag of salad, that means at least 4 days remaining. For a gallon of milk with a 14-day shelf life, that means at least 7-8 days remaining.

These are not arbitrary thresholds. They map closely to what in-store customers self-select and, critically, they are achievable in most stores without fundamentally disrupting inventory rotation or requiring pickers to dig to the back of every shelf. The items that meet a 50% remaining life threshold are typically in the middle or rear of the shelf — one or two positions back from the front row — which adds a modest but manageable time increment to the pick.

The exception category is ultra-short-life items: fresh-baked bread (1-3 day shelf life), cut fruit (2-4 days), prepared deli items (1-3 days), and fresh juice (3-7 days). For these items, a 50% remaining life rule may exclude most or all available inventory, so the rule needs to be adapted. A practical approach: for items with less than 5 days total shelf life, require at least 2 days remaining at delivery. This still gives the customer a usable window while acknowledging the inherent constraints of ultra-perishable categories.

Building picking rules that actually work

The challenge with implementing date-code picking rules is not conceptual. Everyone agrees that customers should receive fresh product. The challenge is operational: how do you enforce date-code standards at the scale and speed of e-commerce picking without destroying picker productivity?

Here are the five components of a picking system that prevents near-expiry selection while maintaining commercially viable UPH.

Component 1: Minimum remaining shelf life by category. Define, for every product category, the minimum acceptable days remaining at the time of delivery. Not at the time of picking — at the time of delivery, because a product picked today for delivery tomorrow has already lost a day. This requires working backward from the delivery window. If delivery is same-day, the minimum at pick time equals the minimum at delivery. If delivery is next-day, add a day to the pick-time minimum. Representative category minimums at delivery: dairy 7 days, meat/poultry 4 days, produce 3 days, bakery 2 days, deli/prepared 1 day, packaged goods 30 days.

Component 2: Date-code scanning at pick. The gold standard is requiring pickers to scan the date code (barcode or manual entry) at the time of pick, with the system rejecting items that fall below the category minimum. This adds 3-5 seconds per item but provides ironclad enforcement. The less disruptive alternative is spot-check scanning — requiring date-code verification on a random 20-30% sample of perishable picks, with the system flagging pickers whose spot-checked items consistently fall below minimums. This adds minimal time while creating accountability.

Component 3: Picking sequence optimization. Instead of routing pickers through the store in a simple geographic sequence (aisle 1 to aisle 12), route them so that perishable and cold-chain items are picked last. This minimizes the time perishable items spend in ambient temperature during the pick walk and reduces the incentive for pickers to rush through the cold aisles because their cart is already half full of warming product. The time savings from reduced cold-chain anxiety roughly offsets the time cost of date-code checking, resulting in neutral net impact on UPH.

Component 4: Buffer inventory for online orders. The most operationally sophisticated grocery e-commerce operators maintain a small buffer of fresh-dated perishable inventory specifically allocated for online orders. This does not mean a separate inventory pool (which would create complexity and waste). It means the receiving team marks a portion of each incoming perishable delivery as "e-commerce priority," ensuring that those units are shelved in a designated area and picked from that area for online orders before reverting to the general shelf. This is operationally simple, costs nothing in additional inventory, and ensures that online customers consistently receive product from the most recent delivery.

Component 5: Substitution rules that respect date codes. When an ordered item is out of stock and the picker substitutes, the substitute must meet the same date-code minimums as the original item. This sounds obvious but is frequently violated in practice, because the substitution workflow focuses on product equivalency (same brand, similar size, comparable price) without considering date-code quality. A picker who substitutes expired-tomorrow Brand A yogurt with expired-tomorrow Brand B yogurt has technically fulfilled the substitution requirement and completely failed the customer.

The picker speed problem and how to solve it

I said earlier that date-code checking adds 7-12 minutes to a 40-item order. That is a real cost, and operators who ignore it will see either picker pushback, declining UPH, or both. Here is how to manage it.

First, not every item in a 40-item order needs date-code verification. Center store products (canned goods, dry pasta, condiments, snacks) typically have shelf lives measured in months or years. The probability that a picker selects a near-expiry can of tomatoes is essentially zero. Date-code checking should be limited to perishable categories: dairy, meat, produce, bakery, deli, frozen, and beverages with short codes. In a typical grocery order, 40-50% of items are perishable. That cuts the time impact roughly in half.

Second, the physical act of checking a date code can be made faster with simple process changes. Train pickers to check the date code while picking up the item rather than as a separate step. For products where the date is consistently printed in the same location (most dairy, most packaged meat), this becomes muscle memory within a few days of practice. For products with inconsistent date placement (some produce packages, artisan bakery items), a quick-reference card on the pick cart showing where each major brand prints its date code saves 2-3 seconds per item.

Third, adjust UPH targets to account for date-code compliance. If your current UPH target is 100 for a no-date-check pick, a realistic target with date-code compliance on perishables is 80-90. This is not a productivity loss. It is a quality standard with a quantifiable speed cost, just like requiring pickers to check item quantities (which nobody argues against) or to handle produce carefully (which you already train for). Frame it as a quality metric, not a speed reduction, and track picker date-code compliance alongside UPH.

Fourth, and this is the intervention that has the largest impact: eliminate the root cause by ensuring your shelf inventory is properly rotated. If your dairy cooler is consistently FEFO-rotated (first expiry, first out) — meaning the shortest-dated product is always in front — then the picker who grabs the front item is grabbing the item that should be sold next, and the near-expiry problem largely solves itself for in-store pick models. The near-expiry picking problem is, in many operations, a symptom of poor shelf rotation rather than a picking process failure. Fix the rotation, and you fix most of the picking quality issue without adding any time to the pick.

The dark store advantage and the store-pick trap

There is a structural reason why dedicated fulfillment centers (dark stores) consistently outperform store-pick models on date-code quality: in a dark store, the operation controls the entire inventory and can enforce FEFO rotation systematically. There is no conflict between what the in-store shopper wants (long-dated product in front for self-selection) and what the online customer needs (long-dated product picked for their order). The entire inventory exists to serve online orders, so every shelf position can be FEFO-rotated without concern about in-store customer behavior.

In a store-pick model, you are inherently working against the in-store shopper's incentive to leave short-dated product on the shelf. Your shelf merchandising puts the longest-dated product in back to encourage sell-through of older inventory. Your pickers, working from the front of that same shelf, are therefore systematically selecting the oldest items. The store-pick model creates a structural incentive misalignment that no amount of picker training can fully overcome.

This does not mean you should abandon store-pick (the capital investment in a dark store only makes sense above roughly 500-800 orders per week for most markets). It means that if you are running a store-pick model, you need compensating controls — the picking rules described above — that would be unnecessary in a dedicated fulfillment environment. Operators who run store-pick at dark-store quality standards are competing on a structurally uneven playing field, and the picking rules are the mechanism that levels it.

What the complaint data tells you (and what it hides)

Most grocery e-commerce operations track complaint rates by category: wrong item, missing item, damaged item, quality issue. "Quality issue" is the bucket where near-expiry complaints land, and it is almost always the second or third largest complaint category, behind wrong/missing items.

But complaint rate dramatically understates the actual incidence of near-expiry picks. Industry data from Mercatus and Brick Meets Click suggests that only 8-15% of customers who receive near-expiry items actually file a complaint. The rest either do not notice (unlikely for items they plan to use within a day or two), accept it as part of the online grocery experience (common among early adopters, decreasingly common as the market matures), or simply reduce their order frequency without telling you why.

If your reported quality complaint rate is 3% of orders, and you assume that represents 10% of actual near-expiry incidents, then roughly 30% of your orders contain at least one item the customer considers unacceptably short-dated. One in three orders. That number should alarm you, because it means a third of your customer base is having a negative freshness experience on every order, and you are only hearing from a small fraction of them.

The useful diagnostic is to look at your complaint data not just by rate but by recency of customer. New customers (first 3 orders) complain at a higher rate about date codes than established customers, not because they receive worse product, but because they have not yet decided whether your service meets their standards and are paying closer attention. If your complaint rate among new customers is meaningfully higher than among established ones, you are losing customers during the trial period that determines whether they become regulars, and date-code quality is likely a contributing factor.

The competitive landscape is shifting against tolerance for short-dated picks

Two years ago, online grocery customers had limited options and correspondingly high tolerance for imperfect orders. The competitive landscape in 2026 is different. Instacart, Walmart, Amazon Fresh, and regional players have all invested in quality scoring systems that penalize pickers for short-dated selections. Walmart's store-pick system now requires date-code scanning on all perishable items and automatically rejects picks below category-specific freshness thresholds. Amazon Fresh's fulfillment centers use automated inventory rotation that structurally prevents near-expiry product from reaching pick locations.

If you are an independent grocer or regional chain running e-commerce on a store-pick model without date-code picking rules, you are competing against operations that have systematically eliminated the near-expiry problem. Your customer does not know or care about the operational differences. They know that their Walmart pickup order consistently arrives with 10+ days on the milk, and your order consistently arrives with 4 days on the milk. They will draw the obvious conclusion, and they will act on it.

This is the competitive reality: date-code picking quality is no longer a differentiator. It is table stakes. The stores that do not implement picking rules are not falling behind the leaders. They are falling below the minimum acceptable standard that customers now expect from any online grocery operation.

The implementation roadmap

If you are running an online grocery operation and you have read this far, here is the practical sequence for fixing the near-expiry picking problem.

Week 1: Audit your current state. Pull 20 recent online orders across different days and pickers. For every perishable item, record the date code at the time of pick and calculate the percentage of remaining shelf life. If more than 15% of perishable items have less than 50% of their shelf life remaining, you have a systemic problem.

Week 2-3: Define category-level minimum remaining shelf life standards. Start with the numbers I suggested above and adjust based on your actual inventory reality. Communicate these standards to your picking team. Do not yet enforce them with system controls — just establish the expectation and begin tracking compliance.

Week 4-6: Implement system-level controls. If your picking platform supports date-code validation, enable it. If it does not, implement a manual spot-check process where a quality checker verifies date codes on 25% of perishable items in each order before release. Track and report picker-level compliance weekly.

Week 7-8: Adjust UPH targets to reflect the new quality standard. Evaluate the speed-quality tradeoff with real data from your operation. Identify pickers who maintain both high UPH and high date-code compliance and study their techniques. Standardize those techniques across the team.

Ongoing: Monitor customer complaint data for quality-related issues. Track the complaint rate among new customers specifically, because that is your leading indicator of whether date-code quality is affecting customer retention. Adjust category minimums based on seasonal shelf-life variation (summer dairy spoils faster than winter dairy) and customer feedback patterns.

The total investment is roughly 4-6 weeks of process development and 3-5% reduction in peak picker UPH. The return is measurably lower customer attrition, fewer negative reviews, and competitive parity with operations that have already solved this problem. The math is not close.


[ShelfLifePro](https://shelflifepro.net/get-started) tracks every batch by expiry date and provides FEFO pick lists that ensure your online orders are fulfilled with the freshest available inventory — not whatever happens to be in front. Combined with [daily alerts](/alerts) for approaching expiry and automated markdown triggers, it gives your picking operation the date-code intelligence that prevents near-expiry complaints before they happen. See how it works for [grocery retail](/get-started).

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.