Blog · Forecast and pipeline · Supply chain
Demand forecasting for perishable goods must match demand to the period when inventory can still be sold. Work through a lot-level example, spreadsheet formulas, and a reconciliation that separates forecast error from excess supply.
Demand forecasting for perishable goods matches expected demand to the window when a product can still be sold. Compare the supplied forecast with sales, availability, and spoilage within that window, rather than against a calendar total that includes demand after the stock's last-sale date. The useful result is a quantity reconciliation that explains what expired and why.
A forecast can be accurate for a month and still leave inventory unsold. Demand arriving after a lot's last-sale date cannot absorb that lot, and a late delivery cannot satisfy customers who needed it earlier.
Use the last-sale date approved by your company's quality or food-safety process. Forecasting does not establish a safe shelf life or authorize a date extension. For food businesses, the FDA Food Code provides a reference for retail and food-service safety provisions; the analysis here takes approved dates as inputs.
Define the product, location, unit of measure, availability start, and last-sale date before comparing figures. Keep temperature-related holds and other unavailable inventory outside sellable supply. For the broader planning question, use the demand forecasting guide; this check concerns timing within usable life.
Bring a dated forecast export, lot receipts, sales or fulfilled-order rows, spoilage adjustments, and opening and closing inventory. Retain the forecast issue date so later revisions do not replace the forecast that informed the purchase.
Match the forecast to the product and location, then sum its daily quantities across the usable window. Do not divide a monthly total evenly unless that is an explicit assumption: selling patterns may differ across weekdays, promotions, and delivery days.
For a first check, use nonoverlapping windows so a sale can belong to only one window. When lots overlap, keep the forecast at product-location-day level and use the recorded lot allocation for inventory reconciliation. Copying the entire product forecast onto every open lot double counts expected demand.
Availability is also essential. A window without stockouts is a cleaner forecast comparison than one with unfilled orders. The separate CPG demand forecasting guide addresses the broader packaged-goods context.
A US refrigerated-food distributor reviews the same yogurt SKU at one location across two completed, nonoverlapping windows. The table contains every unit available in each window, including any opening inventory. There are no transfers, returns, other adjustments, or recorded stockouts. Each unit has a cost of $2.50.
Use these columns in rows 2 and 3. Dates are inclusive, and both windows have closed before the review.
| A: Lot | B: First sale date | C: Last sale date | D: Available units | E: Forecast units | F: Sold units | G: Spoiled units | H: Ending units | I: Unit cost (USD) |
|---|---|---|---|---|---|---|---|---|
| A | October 12, 2026 | October 14, 2026 | 400 | 300 | 280 | 120 | 0 | 2.50 |
| B | October 15, 2026 | October 17, 2026 | 300 | 280 | 260 | 40 | 0 | 2.50 |
| Total | 700 | 580 | 540 | 160 | 0 |
The supply definition must match the inventory records. If transfers or returns exist, show them explicitly in the balance instead of absorbing an unexplained difference into spoilage.
In J2, check available units less sold, spoiled, and ending units:
=D2-F2-G2-H2
Both rows must return zero. A nonzero balance means the inventory movements are incomplete, so investigate that difference before interpreting waste.
Sell-through in K2 and spoilage rate in L2 both use available units as the denominator:
=IF(D2=0,NA(),F2/D2)
=IF(D2=0,NA(),G2/D2)
Forecast minus sales in M2, spoilage cost in N2, and absolute forecast error in O2 are:
=E2-F2
=G2*I2
=ABS(M2)
Fill each formula down. Positive signed error means forecast demand exceeded observed sales. Percentages below are rounded to one decimal place; calculations retain full precision.
| Lot | Balance units | Sell-through | Spoilage rate | Forecast minus sales units | Spoilage cost (USD) |
|---|---|---|---|---|---|
| A | 0 | 70.0% | 30.0% | 20 | 300 |
| B | 0 | 86.7% | 13.3% | 20 | 100 |
| Total | 0 | 77.1% | 22.9% | 40 | 400 |
Total sell-through is 540 / 700, and total spoilage is 160 / 700. Divide summed quantities; do not average the displayed lot percentages.
The weighted absolute percentage error across the windows is 40 / 540 = 7.4%, using:
=IF(SUM(F2:F3)=0,NA(),SUM(O2:O3)/SUM(F2:F3))
Absolute errors prevent positive and negative misses from canceling. The forecast accuracy chapter in Forecasting: Principles and Practice explains absolute-error measures and why evaluation uses observations outside the fitting period. Here, the supplied forecasts must have been issued before these windows occurred. For choosing a business threshold, see what makes forecast accuracy good.
For these closed windows, ending stock is zero and the only exits are sales and spoilage. That gives an exact identity:
Spoiled units = (Available units - Forecast units) + (Forecast units - Sold units)
| Lot | Available minus forecast units | Forecast minus sold units | Reconciled spoilage units |
|---|---|---|---|
| A | 100 | 20 | 120 |
| B | 20 | 20 | 40 |
| Total | 120 | 40 | 160 |
Waste of 160 units is therefore consistent with 120 units supplied above the forecast plus a forecast overstatement of 40 units. This is an accounting bridge, not proof of the operational cause. Delivery restrictions or purchase minimums may explain the supply choice.
As a sensitivity check, reduce only lot A's available quantity from 400 to 340 units. Assume the same timing and sales remain feasible. Lot A's spoilage becomes 340 - 280 = 60 units; combined spoilage becomes 100 units on 640 available, or 15.6%. At the same unit cost, waste costs $250 rather than $400, a reduction of $150. The forecast error has not changed.
The planner owns the forecast comparison, purchasing explains receipt quantities, and operations verifies the inventory movements. Repeated signed misses belong in the separate SKU and site forecast-bias review.
Upload your forecast, sales, lot, and spoilage file or Google Sheet; Covirage maps the columns, and its tools compute and check the comparisons. The external AI model explains the results with every figure traced to its rows. Create a free Covirage account and bring a sample of your own data.
See forecast analysis for the supporting workflow.
Use a horizon that supports the replenishment decision, then inspect demand within each lot's usable selling window. Include delivery timing and your company's approved last-sale date. A monthly forecast alone cannot show whether inventory expires before the month's demand arrives.
Yes. Sales stop when stock is unavailable, even when customers still want the product. Keep availability records beside sales and flag affected windows. Without backorders, attempted orders, or another justified estimate, the missing demand is unknown rather than zero.
No. Purchase quantities, delivery timing, minimum order quantities, and usable life can create spoilage even when the forecast is close to observed sales. Check the inventory balance and compare available supply with the forecast before attributing all waste to forecast accuracy.