TraceLot Logo
Integrations
Industries
PricingLog inBook a demoStart free
BEST PRACTICES

Expiry Risk Forecasting: See Your Write-Offs 90 Days Before They Happen

September 11, 2026 · 8 min read · TraceLot Team

Write-offs feel sudden, but they never are. Every expired case sat in your warehouse for months, quietly running out of runway, while your own sales data already showed it would not sell in time. Expiry risk forecasting turns that data into a single number per lot — units at risk — and surfaces it 10, 30, 60, and 90 days ahead, while there is still time to discount, promote, or simply buy less. Here is the math, the horizons, and how to close the loop with purchasing.

The math: units at risk, per lot

The core calculation is one subtraction: units at risk = on-hand quantity of a lot − expected sales before that lot’s expiry. Expected sales come from real per-SKU velocity — how many units the SKU actually sells per day, measured from recent order history, not from a forecast someone typed in last year. If a lot holds 300 units, the SKU moves 4 units a day, and the lot expires in 45 days, you can expect roughly 180 units to sell — leaving 120 units at risk unless something changes. One refinement matters: under FEFO allocation, sales drain the earliest-expiring lot first, so each lot’s expected sales start only after the lots ahead of it in the expiry queue are consumed.

Why average shelf life lies

Product-level views hide the problem. A report that says “vitamin C serum: 800 units, average 6 months of shelf life” looks healthy — but if those 800 units are 500 fresh and 300 expiring in six weeks, you are about to write off a third of your stock while the average smiles back at you. Risk lives per lot, not per product. Two lots of the same SKU can have opposite risk profiles, and any system that stores one expiry date per product is structurally unable to see it. This is the same reason FEFO beats FIFO for dated goods: the unit of decision is the lot.

Four horizons, four different decisions

A single risk number is less useful than the same number at several distances, because the sensible response changes with the time you have left:

  • 10 days — the salvage window. Full-price sales will not clear the stock; decide now between quarantine, donation, staff sales, or disposal, and get short-dated units off live pick faces before they ship to a customer.
  • 30 days — the markdown window. A discount, a flash sale, or folding the stock into a bundle can still convert most of the at-risk units into revenue instead of waste.
  • 60 days — the promotion window. Enough runway to plan properly: email campaigns, marketplace deals, B2B offers to buyers who move volume quickly.
  • 90 days — the purchasing window. Risk this far out is a buying signal, not a selling problem: order less of that SKU, order more often, or negotiate shorter lead times and fresher stock from the supplier.

THE HORIZON DETERMINES THE OWNER

Ten-day risk belongs to the warehouse, thirty-day risk to whoever sets prices, sixty-day risk to marketing, and ninety-day risk to purchasing. Routing each horizon to the person who can actually act on it is what turns a report into fewer write-offs.

A worked example

Four lots across three SKUs, each scored the same way. Note how the biggest risk is not the soonest expiry — it is the mismatch between quantity and velocity:

LotOn handDaily velocityDays to expiryExpected salesUnits at risk
GRN-0142 (green tea)906.0301800
SER-0221 (serum)3004.045180120
CAP-0198 (capsules)5002.590225275
BAR-0307 (protein bar)601.0202040

GRN-0142 expires soonest yet carries zero risk — velocity clears it comfortably. CAP-0198 has three months of runway and is still the biggest write-off in waiting, because 500 units at 2.5 a day is 200 days of stock in a 90-day lot. That is a purchasing conversation, not a discount. BAR-0307 is small but urgent: at 20 days out, two thirds of the lot needs a salvage decision this week.

See your write-offs 90 days before they happen

TraceLot computes units at risk for every lot at 10, 30, 60, and 90-day horizons, using real sales velocity from your Veeqo and Shopify order history — updated continuously, with no spreadsheet.

Explore expiry risk forecasting

Feeding risk back into purchasing

Discounts and promotions treat symptoms; purchasing treats the cause. If the same SKU keeps appearing at the 90-day horizon, the fix is upstream: smaller and more frequent orders, minimum remaining-shelf-life terms with the supplier, or dropping a slow variant entirely. A simple monthly ritual works — review every SKU that showed 90-day risk, and adjust the next purchase order before placing it. This also sharpens your accounting: stock that is predictably going to expire should be provisioned for, not carried at full value, as covered in our guide to valuing expiring inventory.

How TraceLot computes this continuously

Because TraceLot already keeps a per-lot ledger — receipts, order deductions with order references, corrections, and transfers — it knows exactly how many units of each lot remain, and your synced order history supplies the real per-SKU velocity. The expiry risk feature combines the two and recalculates as orders flow in, flagging lots at the 10, 30, 60, and 90-day horizons without anyone maintaining a spreadsheet. The forecast pairs naturally with a disciplined stock rotation SOP: FEFO makes sure the oldest lot sells first, and the forecast tells you when even perfect rotation will not be enough.

Frequently asked questions

How do you calculate expiry risk for inventory?

Per lot: units at risk = the lot’s on-hand quantity minus expected sales before its expiry date, where expected sales are the SKU’s real daily sales velocity multiplied by the days remaining. Under FEFO, each lot’s selling window starts after earlier-expiring lots of the same SKU are consumed.

Why forecast at multiple horizons instead of one?

Because the right response depends on time remaining: at 10 days you decide quarantine or donation, at 30 days you discount or bundle, at 60 days you plan promotions, and at 90 days you change what you buy. Each horizon also has a different natural owner in the business.

Why is product-level expiry tracking not enough?

A product usually holds several lots with different expiry dates, and an average hides the short-dated ones. Risk is a property of the individual lot — 800 healthy-looking units can conceal 300 that will expire in six weeks.

What is the best way to reduce expired stock write-offs long term?

Fix purchasing, not just pricing. Recurring 90-day risk on a SKU means you are buying more than you sell within its shelf life — order smaller quantities more often, negotiate minimum remaining shelf life with suppliers, and review flagged SKUs before every purchase order.

Never ship expired stock again.

TraceLot adds batch tracking, FEFO allocation, and audit-ready records to Veeqo and Shopify. First month free.