Stock-outs are not a failure state in grocery — they are a Tuesday. What actually damages a customer relationship is not the missing yoghurt, it is finding out about it after the money has already left their card and a stranger has decided what to do instead. A substitution policy is not a workaround for bad forecasting. It is a customer-service moment disguised as an inventory problem.
Ask before you swap, every time
The single rule that matters more than any other: never substitute without the customer seeing and approving the swap first. A picker marking an item out of stock and offering a recommended, related, or full-catalogue alternative is only half the job — the other half is a push notification the shopper can accept, reject, or ask to be replaced with something else entirely. Silent substitution feels like being overcharged for something you did not choose, even when the replacement is objectively fine.
Make the alternative genuinely relevant
A recommended-tab suggestion that is actually close — same brand, next-closest size, same dietary flag — gets accepted far more often than a generic "here is something else in the category" swap. This is where picker training matters as much as the technology: a picker who understands that oat milk is not an acceptable substitute for lactose-free cow’s milk saves the approval conversation before it starts. Give pickers a related-products view scoped tightly enough that the fast option is also the right option.
Record it, and use the record
Every substitution should land on the order item permanently, not just in a chat log that disappears. Over a few hundred orders, that record tells you something forecasting alone cannot: which SKUs run out often enough that they need a safety-stock buffer, and which substitutes customers actually accept versus reject every time. A shop that reviews its substitution log monthly fixes its own stock-outs faster than one that treats each one as a one-off.
Know when to just say no
Not every out-of-stock item deserves a substitute. A single missing garnish item on an otherwise complete order is often better dropped with a small wallet credit than swapped for something the customer never wanted. Give pickers — and the approval flow itself — a clean "remove and credit" path alongside the substitute path, and reserve substitution for items that genuinely change the value of the basket if they are simply missing.
Set expectations before the picker ever touches the order
A substitution policy also has to live on the product page and at checkout, not just inside the picker app. A shopper who sees "substitutions may apply for out-of-stock items" before they pay arrives at the approval notification already primed, rather than surprised that the shop even does this. Pair that expectation with an easy one-tap opt-out — "never substitute this item" on things like a specific brand of baby formula or a medical product — and the handful of categories where any substitute at all is unacceptable stop generating complaints entirely.
The financial case is bigger than it looks
A single badly handled substitution rarely shows up as a complaint — it shows up as a customer who quietly orders from somewhere else next time, which is a far more expensive outcome than the missing yoghurt itself. Acquiring a replacement customer typically costs several times what retaining one does, so the few seconds a well-designed approval loop adds to an order is cheap insurance against losing a repeat buyer over something as small as a swapped brand of pasta. Treat the substitution screen as a retention tool, not a picking inconvenience, and the investment in getting it right justifies itself within the first few hundred orders.
None of this eliminates stock-outs. It removes the part that actually costs a customer: the surprise. A shop that asks first, substitutes well, and keeps the record keeps the customer through the one moment competitors most often lose them.
