Skip to main content

Item Substitutions

Grace Pepetone avatar
Written by Grace Pepetone
Updated this week

Product availability can shift rapidly, but out-of-stock items shouldn't lead to missed sales or interrupted kitchens. Substitutions solve inventory issues by replacing unavailable products with similar alternatives, ensuring orders remain complete and operations stay on track. This process provides an intuitive way to handle inventory gaps while maintaining accurate billing and a professional experience for both distributors and operators.

Note: Item Substitutions are available to users with Pepper Plus or Enterprise plans. Because this feature relies on real-time availability, accurate inventory and substitution data is essential. If you would like to enable substitutions, please contact Customer Success.

The User Experience

How it Works:

Step 1: Create necessary data feeds

For item substitutions to work, the system requires two synchronized data streams from the ERP:

  • Primary-to-substitute item mappings

  • Current “Available to Sell” and “Expected” inventory levels

Respecting "No Substitute" Policies: If the ERP flags specific customers or chains as ineligible for substitutions, Pepper reads these rules directly. If a "No Substitute" flag is found, the system bypasses the substitution workflow for that customer, regardless of inventory levels.

Step 2: Customer triggers substitution

Real-Time Trigger: The substitution prompt activates the moment a customer’s requested quantity exceeds the available inventory in their cart.

Warning message "1 item in your order has low inventory. Please review below":

If an item is low-quantity or out-of-stock (based on availability data), the user is prompted to resolve the discrepancy. Any action they take is reflected in the order confirmation email sent to the distributor.

Step 3: Configure Substitution Options

Customer Choice (In-Cart): Unlike warehouse-level swaps, Pepper presents the available alternatives directly during checkout, giving the option to accept or decline the replacement:

Option 1: “Choose Substitute”: Users are taken to a list of available options, provided by the distributor:

Partial Fulfillment: If a customer needs 40 pounds but only 20 are in stock, the system allows them to keep the original 20 items and choose a substitute for the remaining 20:

Option 2: Choose “Don’t substitute”: Users can still order the item, even if it is out of stock, though it might not be fulfilled. They will be alerted again when they place the order:

If the user fails to follow the substitution prompt upon clicking ‘Place order’, they are given the option to choose a substitution before the order can be placed:

When to Use Them (and When to Wait)

While substitutions work well in many scenarios, they are not universally applicable. The table below outlines when they are the right fit for existing operations and data configurations:

Best Used When…

Consider Holding Off If…

Data is accurate: Inventory is accurate, up-to-date, and maintains clear "Item A = Item B" mappings.

Data is inconsistent: Inventory counts are often incorrect or sync slowly. This leads to poor suggestions.

Choice is a priority: The user should be able to pick their own replacement during the checkout process.

"Forced Subs" are used: The warehouse automatically swaps items without asking the customer first.

OOS (out of stock) items are visible: Users can see and add out-of-stock items to their cart to trigger the suggestion.

OOS items are hidden: Users are blocked from adding out-of-stock items entirely. (The prompt won't trigger).

Saving the sale is a goal: The objective is to protect revenue on staples like proteins, dairy, and produce when stock is low.

Strict contracts apply: Service includes schools or hospitals that have rigid "No Substitute" brand requirements.

Freeing up DSRs is desired: A self-service way to handle shorts is needed so Sales can focus on selling, not fixing orders.

Manual control is required: DSRs are preferred to call or text every time an item is unavailable.

Did this answer your question?