Install
openclaw skills install @leooooooow/inventory-forecastProject inventory needs based on historical order velocity, seasonality, supplier lead times, and planned promotions so you reorder before stockouts hurt rankings. Use when calculating reorder points, planning promo stock, building reorder calendars, or comparing sell-through across SKUs.
openclaw skills install @leooooooow/inventory-forecastRunning out of stock is one of the most costly mistakes in ecommerce — it tanks your search rankings, hands sales to competitors, and can take weeks to recover from. This skill projects inventory needs by analyzing historical order velocity, seasonal demand patterns, supplier lead times, and upcoming promotional events so you can place reorders with confidence before stockouts damage your momentum.
| Decision | Strong | Acceptable | Weak |
|---|---|---|---|
| Velocity baseline | Trailing 90-day daily average, weighted toward recent 30 days, excluding promo spikes | Trailing 30-day simple average | Lifetime average or single best month |
| Safety stock | Statistical: z-score × demand std dev × √lead time | Fixed 20-30% buffer on lead-time demand | None, or "whatever is left over" |
| Lead time input | Full door-to-door: production + QC + freight + customs + receiving, with variance | Supplier's quoted production time + standard transit | Supplier's quoted production time alone |
| Promo demand lift | Modeled from your own past promo lift for the same SKU/category | Category benchmark (e.g., 2-4x for flash sales) | Guessing or ignoring the promo |
| Seasonality | Month-over-month index built from 12+ months of own data | Platform/category seasonal curve (e.g., Q4 lift) | Assuming flat demand year-round |
| Reorder trigger | Reorder point = (daily velocity × lead time) + safety stock, reviewed weekly | Fixed calendar reorders (e.g., monthly) sized by forecast | Reordering when stock "looks low" |
| Overstock handling | Flag SKUs with >90 days of cover and propose markdown/bundle plan | Note slow movers in the report | Treat all SKUs the same |
Collect from the user: (a) sales history per SKU — ideally 12 months, minimum 90 days, daily or weekly granularity; (b) current on-hand and inbound inventory; (c) supplier lead times per SKU including production, freight mode, and customs; (d) upcoming promotions with dates and expected discount depth; (e) any MOQ (minimum order quantity) and case-pack constraints. If data is in a CSV or export, parse it. If anything critical is missing, state the assumption you are making rather than stalling.
For each SKU, compute daily sales velocity over the trailing 90 days, weighting the most recent 30 days more heavily (e.g., 50/30/20 across the three months). Exclude or normalize days affected by past promotions and stockouts — a stockout day is not a zero-demand day; estimate lost demand from the run rate before the stockout.
Build a seasonal index from the user's own history if 12+ months exist (each month's sales ÷ average month). Otherwise apply a category curve and say so. Multiply baseline velocity by the index for the forecast window. Apply a trend factor if the SKU is clearly growing or declining (compare trailing 30-day vs. trailing 90-day velocity).
For each planned promotion, estimate units: promo lift multiplier × baseline daily velocity × promo duration. Derive the multiplier from the user's past promos on the same SKU when available; otherwise use conservative category benchmarks (flash sale 2-4x, sitewide sale 1.5-2.5x, livestream feature 3-8x) and flag the uncertainty. Add post-promo pull-forward decay (typically 10-20% velocity dip for 1-2 weeks after).
For each SKU: reorder point = (forecast daily velocity × full lead time in days) + safety stock. Safety stock = z × σ_demand × √(lead time), using z = 1.65 for 95% service level on A-SKUs; a simpler 25% buffer is acceptable for C-SKUs. Order quantity = forecast demand over (lead time + review period) − on-hand − inbound + safety stock, rounded up to MOQ/case pack. Flag any SKU already past its reorder point as URGENT.
Lay out a rolling 90-day calendar: for each SKU, the last safe order date (promo date or projected stockout date minus full lead time), quantity, and estimated PO cost. Sequence POs so cash outlay is visible week by week. Flag conflicts: orders that must be placed this week, and promos that cannot be fully stocked in time with options (air freight portion, cap promo units, split shipment).
Sanity-check: does total forecast demand roughly reconcile with trailing revenue? Are days-of-cover post-reorder within 30-90 days for A-SKUs? Is any SKU both flagged urgent and overstocked (data error)? Deliver using the output template in references/output-template.md, run the checklist in assets/forecast-quality-checklist.md, and state every assumption made.
Input: "I sell a collagen drink on TikTok Shop. Baseline is about 38 units/day over the last 90 days (last 30 days: 45/day). I'm confirmed for a Flash Sale on July 15, 25% off, 24 hours. Supplier lead time is 30 days production + 12 days sea freight + 3 days receiving. On hand: 1,850 units. Inbound: 1,000 arriving June 20. Last flash sale in March did 410 units in a day when baseline was 30/day. MOQ 500, case pack 50."
Process: Weighted velocity ≈ 42/day (recent 30 days weighted up). March promo lift = 410 ÷ 30 ≈ 13.7x — well above the 2-4x benchmark, so use own data: forecast promo day ≈ 13.7 × 42 ≈ 575 units, plus 15% halo on the surrounding 2 days ≈ 640 total event units. Post-promo dip: −15% for 10 days. Full lead time = 45 days. Demand June 1 → July 15 (44 days): ≈ 42/day × 44 ≈ 1,850 units + event 640 ≈ 2,490. Available = 1,850 + 1,000 = 2,850. Post-event position ≈ 360 units ≈ 9 days of cover — under safety stock (z=1.65, σ≈12, √45 ≈ 6.7 → ≈ 135 units, but 9 days cover with 45-day lead time means certain stockout before the next PO can land). Reorder qty for next 75 days: 42 × 75 × 1.05 seasonal ≈ 3,300 − 360 on-hand-after + 135 safety ≈ 3,100 → round to 3,100 → 3,100/50 = 62 case packs. Last safe order date: July 15 + 9 days cover − 45 days lead = June 9 — order this week.
Output: Urgent PO of 3,100 units by June 9; flash sale fully stockable; post-event coverage restored to 75 days. If the PO slips past June 14, recommend 600 units by air (12-day door-to-door) to bridge the gap.
Input: CSV export with 14 SKUs from a Shopee home-goods store, 12 months of history, current stock levels, all from one supplier with 60-day door-to-door lead time, reviewing orders monthly.
Process: Compute weighted velocity and seasonal index per SKU. Results cluster into three groups. (a) Three A-SKUs (storage boxes, drying racks) at 25-60 units/day with 20-35 days of cover — all past reorder point given 60-day lead time → URGENT, with lost-demand adjustment because the drying rack stocked out for 6 days in May (velocity corrected from 31 to 36/day). (b) Seven B-SKUs healthy at 70-100 days cover → schedule normal POs in the calendar across the next 6 weeks. (c) Four C-SKUs with 180-400 days of cover including a seasonal fan stand heading into low season → no reorder; propose 11.11 bundle with the storage boxes and a 20% markdown to free an estimated $4,200 in cash by year end.
Output: Reorder table with urgent/scheduled/skip flags, a 90-day PO calendar showing ~$18,400 in POs across 3 batches, lost-demand-corrected velocities, and an overstock action plan. Assumptions stated: no promotions planned (user confirmed), category seasonality applied to 2 SKUs with <12 months history.
references/output-template.md — structured output template for the forecast reportreferences/demand-forecasting-methods.md — velocity weighting, seasonality indexing, promo lift modelingreferences/lead-time-and-safety-stock.md — lead time decomposition, safety stock formulas, service levels, reorder mathassets/forecast-quality-checklist.md — pre-delivery quality checklist