Shopify Inventory Management for Food and Beverage
Food and beverage products expire, so inventory has two risks instead of one: running out, and holding more than you can sell before the date. This guide covers the planning methods that matter most for perishable stock on a Shopify store.
This is planning guidance, not compliance advice. Follow the labeling, storage and recall rules for your product and region, and treat any date printed for safety reasons as a hard stop.
What changes when stock expires
- Shelf life caps how much you can hold. Buying more than you can sell before the cutoff turns the extra units into a write-off, however good the unit price.
- Stock ages while it waits. Two units of the same product can have different remaining life, so you need to know which lot is which.
- Holding cost can be higher. Cold storage, heavy cases and extra handling add to what it costs to keep a unit, which pushes toward smaller, more frequent orders (see inventory carrying cost).
- Demand can be seasonal, and where it is, the amount you can safely hold changes through the year.
Track lots and expiry dates
For each lot received, record the lot or batch code, production date, expiry date, quantity, and where it is stored. Keep the register wherever your team will actually maintain it. Every method below depends on it, and it makes a recall or quality check faster.
Define a sellable cutoff for each product: the last day you are willing to ship a lot, set a number of days before expiry. The cutoff reflects the customer's experience of the product, the shipping time, and any minimum remaining life that wholesale or retail accounts specify. Different channels can have different cutoffs. Confirm each account's requirement and treat it as that channel's date.
Ship by FEFO (first expired, first out) rather than plain FIFO (first in, first out). They match when newer stock always expires later, but FEFO protects you when lots differ in shelf life. Count stock against your register on a schedule, because mismatches between records and shelves are a form of inventory shrinkage.
Cap order size by shelf life
Under steady demand and FEFO shipping, every unit on hand has to sell before the cutoff. The last unit of an order waits behind the safety stock and the rest of the lot, so it sells roughly (order quantity + safety stock) ÷ daily demand days after arrival. That has to fit inside the sellable window.
Sellable days after receipt are the days of life left when the lot arrives, minus the days between the cutoff and expiry. This is a sanity check, not a full model: it assumes demand stays near the current rate.
Hypothetical example. A product sells 12 units per day. Lots arrive with 150 days of life left and the sellable cutoff is 30 days before expiry, so there are 150 − 30 = 120 sellable days. Safety stock is 7 days of demand, or 84 units.
- Maximum stock on hand = 12 × 120 = 1,440 units.
- Maximum order quantity = 1,440 − 84 = 1,356 units.
The economic order quantity formula, EOQ = √(2 × D × S ÷ H), uses annual demand D, ordering cost per order S, and holding cost per unit per year H. With D = 12 × 365 = 4,380 units, S = $200 and H = $0.50, it gives √3,504,000, about 1,872 units. EOQ ignores shelf life, and 1,872 is above 1,356, so the cap decides: order no more than 1,356 at a time. See economic order quantity for the formula and its assumptions.
If freight or supplier minimums push you toward larger orders, combine several products from one supplier into a single order instead of enlarging each product's quantity. Each product still has to respect its own cap.
Reorder points and safety stock for perishables
The standard reorder point still applies. Use the demand rate that is expected during the lead time, which for seasonal items is not the annual average.
Safety stock for perishables is a trade-off. More of it lowers the chance of a stockout, but it also ages in the warehouse, and the cap above counts it. Statistical safety stock is explained in the safety stock formula guide, and the reorder point in reorder point formula.
When you make a single buy for a selling window
Some products are bought or produced once per window: a seasonal batch, a limited run, a holiday gift box. The standard approach for that case is the single-period (newsvendor) model.
Cu is the cost of having one unit too few: the lost margin, which is the selling price minus the unit cost. Co is the cost of one unit too many: the unit cost minus whatever you recover from an unsold unit (zero if it is discarded). The order quantity is the expected demand plus z × σ, where σ is the standard deviation of demand over the window and z is the standard normal value that matches the critical ratio (z = 0 at 0.50, about 0.18 at 0.57, about 0.84 at 0.80).
Hypothetical example. Expected demand over the window is 500 units with σ = 80.
- Price $14, cost $6, nothing recovered if unsold: Cu = 8, Co = 6, ratio = 8 ÷ 14 = 0.57, z ≈ 0.18. Order about 500 + 0.18 × 80 = 514 units.
- Price $20, cost $4, nothing recovered if unsold: Cu = 16, Co = 4, ratio = 16 ÷ 20 = 0.80, z ≈ 0.84. Order about 500 + 0.84 × 80 = 567 units.
The higher the margin relative to the cost of waste, the more buffer is justified.
Plan for seasonal demand
Use seasonal indexes to scale the expected demand in the reorder point, as described in seasonal inventory planning. Two perishable-specific points:
- Build up only as far as the cap allows. Shelf life limits how much you can stock ahead of a peak, so spread arrivals over the weeks before it.
- Time the final buy to the end of the season. The last order should arrive with enough days left to sell before the season ends or the cutoff arrives, whichever is first.
Focus effort with ABC analysis
ABC analysis ranks products by revenue and groups them by cumulative share. One common convention puts the first 80% of revenue in A, the next 15% in B and the last 5% in C; the thresholds are a choice, not a law. See ABC analysis for ecommerce.
- A items: review often, use smaller and more frequent orders, and set a high service-level target.
- B items: a moderate review schedule and service level.
- C items: order less often and accept a lower service level, since slow sellers are the ones most likely to expire on the shelf.
Deal with stock that will not sell in time
For each lot, compare what you expect to sell before its cutoff with what you hold. Under FEFO the oldest lots sell first, so a lot only starts selling once the older lots ahead of it are gone, and its stock has to be counted together with theirs. Here daily velocity is the product's units sold per day.
For the oldest lot this is the same as the single-lot version: units in the lot − (daily velocity × days until cutoff). A result of zero or below means no units in that lot are at risk.
Hypothetical example. A single lot of 600 units is on hand, with no older lots, and it is 60 days from its cutoff. The product sells 6 units per day. Expected sales are 6 × 60 = 360 units, so 600 − 360 = 240 units are at risk. Clearing the lot in time needs sales of 600 ÷ 60 = 10 units per day.
When several lots are on hand, work through them in expiry order, since FEFO sells the oldest first. For each lot, count its units plus the units in every older lot against the sales expected before that lot's cutoff, as in the formula above. Decide the response ahead of time, using days left rather than a date on the calendar:
- Bundle or promote the lot, for example by pairing it with a faster seller.
- Discount in steps tied to days left. Weigh each step against the alternative: a unit that expires unsold recovers nothing and can cost money to dispose of. Say your unit cost is $6 and your price is $14 (hypothetical figures): a 30% discount brings the price to $9.80, still above cost. Discounts too early can pull sales from full-price units, so start the first step only when the at-risk number says you need it.
- Move it through other outlets where that is allowed, such as wholesale accounts or donation, within the date rules for your product.
The longer-term fix is smaller, more frequent orders and better forecasts. See dead stock management for clearance planning.
Set alerts from lead time and expiry
Use days of cover, the units available divided by daily velocity, instead of one fixed day count for every product (see sales velocity tracking).
- Urgent: days of cover are below the supplier lead time. A new order cannot arrive before you run out.
- Reorder: days of cover are at or below lead time plus safety days, meaning you are at the reorder point.
- Expiry: units at risk are above zero for any lot.
If a stockout does happen, a clear policy for orders you cannot fill limits the damage (see backorder management and preventing stockouts).
Several channels and locations
If one pool of stock serves your online store, wholesale accounts and other channels, decide which channel gets first claim on each lot and apply that channel's cutoff. Shopify tracks inventory per location, so keep reorder points and lot records per location too. See multi-location inventory management.
New products with no history
For a new item, borrow the sales pattern of a comparable product (similar category, price and seasonality), buy a small first lot, and replace the borrowed numbers with real velocity as it accumulates over the first few weeks.
Track your waste rate
If you discarded $1,800 of stock in a month in which you received $60,000 of stock, the waste rate is $1,800 ÷ $60,000 = 3%. Watch the trend and which products drive it. A rising rate on one product often points to an order size too large for its shelf life, or a forecast that runs too high.
Getting started
- Set up a lot register with expiry dates and decide each product's sellable cutoff.
- Calculate each product's cap on stock on hand.
- Set reorder points from expected demand over the lead time.
- Set review frequency by ABC class.
- Calculate units at risk for each lot weekly and agree a response in advance.
- Track the waste rate monthly and review the products behind it.