StreamStock uses proven statistical methods to analyze your inventory, forecast demand, and generate actionable recommendations. This page explains every parameter, formula, and threshold in plain English.
Written for operations teams, buyers, and anyone who wants to understand exactly what the numbers mean.
Every calculation in StreamStock builds on a small set of configurable parameters. Understanding these is the foundation for understanding everything else on this page.
| Parameter | Default | What It Means |
|---|---|---|
| Lead Time | 14 days | How long it takes from placing a purchase order to receiving the stock in your warehouse. This is the most important number for restock calculations — if your supplier takes 14 days to deliver, you need at least 14 days of stock on hand at all times. |
| Safety Stock | 3 days | An extra buffer of stock kept above the lead time requirement. This protects against unexpected demand spikes or delivery delays. With a 14-day lead time and 3-day safety stock, you effectively need at least 17 days of stock before you start worrying. |
| Low Stock Threshold | 7 days | When a product has fewer than this many days of stock remaining, it is flagged as low stock. This is a general-purpose early warning. |
| Dead Stock Threshold | 90 days | If a product has had zero sales for this many consecutive days (roughly 3 months), it is classified as dead stock. Dead stock ties up capital and warehouse space. |
| Forecast Horizon | 30 days | How many days into the future StreamStock predicts demand. The system generates a daily forecast for each of the next 30 days. |
| Target Coverage | 60 days | The ideal number of days of stock to maintain. When StreamStock calculates how much to reorder, it aims to bring your stock up to this level. 60 days gives you roughly two months of runway. |
| Analysis Period | 90 days | The default lookback window for all calculations. Revenue rankings, health scores, and demand averages are computed from the last 90 days of sales data. You can change this in the dashboard filters. |
| ABC “A” Threshold | 80% | Products that collectively contribute to the first 80% of total revenue are classified as Class A. This follows the Pareto principle (80/20 rule). |
| ABC “B” Threshold | 95% | Products contributing between 80% and 95% of cumulative revenue are Class B. Everything above 95% is Class C. |
These three terms appear throughout every section of this page. They are the building blocks of all StreamStock metrics.
The average number of units sold per day over the analysis period. Calculated by dividing total units sold by the number of days in the period (default: 90). If a product sold 270 units in the last 90 days, its average daily demand is 3 units per day.
How many days your current stock will last at the current rate of sales. This is the single most important metric for deciding when to reorder. If you have 150 units in stock and sell 10 per day, you have 15 days of stock.
The stock level at which you should place a new purchase order. It accounts for both lead time (how long delivery takes) and safety stock (your buffer). When your stock drops to this level, you need to order immediately to avoid running out.
A helmet that sells 8 units per day:
• Days of Stock (with 200 units): 200 / 8 = 25 days
• Reorder Point: 8 × 17 = 136 units
• Since 200 > 136, this product is above its reorder point — no rush to reorder.
The Sales Dashboard shows your Shopify order data aggregated into daily totals. All sales figures are pulled directly from your Shopify orders during each sync.
You can view sales data for different time windows using the period chips: 30, 60, 90, or 180 days. There is also a Custom option that lets you pick an exact start and end date.
When you select a period, all sales metrics recalculate: total revenue, units sold, number of orders, and average order value are all based on the selected window.
During each Shopify sync, every order line item is extracted and aggregated into one record per product per day. Each record contains:
• Units Sold — total quantity of that product sold on that day
• Revenue — total revenue from that product on that day (price × quantity)
The Daily Sales table shows these records summed across all products for each date.
| Metric | How It Is Calculated |
|---|---|
| Total Revenue | Sum of all line item revenue in the selected period. |
| Units Sold | Sum of all quantities sold in the selected period. |
| Orders | Count of distinct orders in the selected period. |
| Avg. Order Value | Total Revenue ÷ Number of Orders. |
Click any column header in the Daily Sales table to sort the data. Click again to toggle between ascending and descending order. The arrow indicator shows the current sort direction. Sorting is performed client-side on the cached data — no additional API calls are made.
Below the daily sales table, the Top Sellers section ranks products by total revenue within the selected period. This gives a quick view of which products are driving the most income.
ABC classification uses the Pareto principle (80/20 rule) to categorize products by their revenue contribution. This helps you focus attention and resources on the products that matter most to your bottom line.
Products are ranked by their total revenue over the analysis period (default: 90 days), from highest to lowest. StreamStock then computes the cumulative percentage of total revenue and assigns each product a class:
If your store has 100 products generating £50,000 in 90-day revenue:
• Class A: ~15 products generating £40,000 (80%) — your top sellers
• Class B: ~30 products generating £7,500 (15%) — steady performers
• Class C: ~55 products generating £2,500 (5%) — long tail items
Products with zero sales during the analysis period cannot be ranked by revenue. These are labelled Unclassified in the dashboard. They may be new arrivals, seasonal items, or dead stock.
Class A: Never let these go out of stock. Monitor daily, keep higher safety stock. These are your revenue drivers.
Class B: Regular monitoring. Standard reorder levels. Potential to move to A with promotion.
Class C: Reduce inventory investment. Consider discontinuing if consistently low-performing. Good candidates for bundling with Class A items.
Each product receives a health score from 0 to 100. The score is a weighted composite of five factors, each measuring a different aspect of inventory performance. Higher scores indicate a well-managed product; lower scores indicate problems that need attention.
| Score | Status | What It Means |
|---|---|---|
| 60–100 | Healthy | Good stock levels, strong sales, no immediate action needed. Maintain current approach. |
| 30–59 | Warning | Something is off. Stock might be too low, too high, or sales are declining. Review and adjust ordering. |
| 0–29 | Critical | Significant problem. Product may be stocked out, heavily overstocked, or completely dead. Immediate attention required. |
| 50 | Inactive | Product has no stock, no demand, and no recent sales. Likely phasing out, discontinued, or seasonal. Not a problem — just not active. |
Products that meet all three of the following criteria are classified as Inactive rather than Critical:
• No stock on hand (zero or negative inventory)
• No demand (zero average daily sales in the analysis period)
• No recent sales (last sale was more than 90 days ago, or the product has never been sold)
These products receive a neutral score of 50 so they do not pollute the Critical list. Without this detection, a store with hundreds of discontinued SKUs would see them all flagged as critical, drowning out the products that genuinely need attention.
Filtering options:
• Use the ⚪ Inactive filter chip to view only inactive products
• Check the “Hide phasing out” toggle to exclude inactive products entirely from the inventory table
Inactive products are shown with a dimmed row style and a grey status badge to visually distinguish them from products that need action.
What it measures: Whether you have enough stock to cover upcoming demand, without having too much. This is the most heavily weighted component because running out of stock (or drowning in it) has the biggest impact on your business.
How it scores:
• Zero stock with active demand → Score: 0 (worst case — you are stocked out)
• Below lead time (under 14 days of stock) → Score: 0–30 (danger zone — you may run out before a new order arrives)
• Between lead time and 3× target days → Score: 70–100 (sweet spot — well-stocked without excess)
• More than 3× target days of stock → Score: 50 (overstocked — capital is tied up unnecessarily)
The target for stock coverage is: Lead Time + Safety Stock + 7 days = 14 + 3 + 7 = 24 days. Having exactly this much stock scores highest.
What it measures: How efficiently your inventory is converting into sales. A high turnover rate means you are selling through stock quickly; a low rate means stock is sitting on shelves.
How it scores:
• Turnover = 0 (no sales at all) → Score: 0
• Turnover < 2× per year (slow) → Score: 0–50 (stock is turning over less than twice a year)
• Turnover 2–12× per year (healthy) → Score: 50–100 (the ideal range for most retail products)
• Turnover > 12× per year (very fast) → Score: 90 (excellent — selling through stock monthly or faster)
A product with 5 units/day average sales and 300 units in stock:
• Turnover Rate = (5 × 365) / 300 = 6.1× per year
• This is in the healthy range → Turnover Score ≈ 71
What it measures: How recently the product last sold. Products that have not sold in a long time are at risk of becoming dead stock. The more recent the last sale, the higher the score.
How it scores:
• Sold today or recently (with active sales) → Score: close to 100
• Last sale 45 days ago → Score: ~50
• Last sale 90+ days ago (dead stock threshold) → Score: 0
• Never sold at all → Score: 0
The score decreases linearly from 100 to 0 as the days since last sale approach the 90-day dead stock threshold.
What it measures: Whether your current stock level is above or below the reorder point. Being above the reorder point is good; being below it means you should have already placed an order.
How it scores:
• Zero stock → Score: 0
• Below reorder point → Score: 0–50 (proportional to how far below you are)
• At or above reorder point → Score: 50–100 (good — you have enough runway)
• No demand (reorder point is 0) → Score: 100 (no risk because nothing is selling)
What it measures: The immediate risk of running out of stock before a new order could arrive. This focuses specifically on the lead time window.
How it scores:
• Already stocked out (0 stock, positive demand) → Score: 0 (too late)
• Less than 14 days of stock (less than lead time) → Score: 0–40 (high risk — even if you order now, you may run out)
• 14+ days of stock → Score: 40–100 (safe — an order placed now would arrive before you run out)
Product selling 4 units/day, 120 units in stock, last sold 2 days ago:
• Days of Stock: 120 / 4 = 30 days
• Reorder Point: 4 × 17 = 68 units
• Turnover Rate: (4 × 365) / 120 = 12.2×
• Stock Coverage Score: 30 days is in the sweet spot → 85
• Turnover Score: 12.2× is excellent → 90
• Dead Stock Score: last sold 2 days ago → 98
• Low Stock Score: 120 > 68 (above reorder) → 80
• Stockout Score: 30 days > 14 (safe) → 85
• Final: (85×0.30)+(90×0.25)+(98×0.20)+(80×0.15)+(85×0.10) = 88 — Healthy ✅
StreamStock uses two statistical forecasting methods and automatically selects the best one for each product based on the amount of available sales data.
The forecast horizon determines how many days ahead StreamStock predicts demand. You can choose from 30, 60, 90, 120, or 180 days using the period selector on the Forecasts tab. Changing the horizon regenerates all forecasts for the new timeframe.
Shorter horizons (30–60 days) produce tighter, more confident predictions. Longer horizons (120–180 days) are useful for planning purchase orders and seasonal preparation, but carry more uncertainty — reflected in wider confidence intervals.
The simplest approach: average daily sales over the last 30 days. Best for products with stable, consistent demand and no strong trend.
SMA treats every day equally. If you sold 150 units over the last 30 days, SMA predicts you will sell 5 units per day going forward.
A more sophisticated method that captures both the current level (how much you are selling now) and the trend (whether sales are growing or declining). It uses two smoothing parameters:
Alpha (α = 0.2) controls how much weight is given to the most recent sales data vs. historical patterns. A value of 0.2 means recent data gets 20% weight and historical trend gets 80%. This makes the forecast smooth and less reactive to daily noise.
Beta (β = 0.1) controls how quickly the trend itself can change. A low value like 0.1 means the trend adjusts slowly, preventing the forecast from overreacting to short-term fluctuations.
StreamStock automatically picks the best method for each product based on how much sales data is available:
| Sale Days Available | Method Used | Why |
|---|---|---|
| Fewer than 14 days | SMA only | Not enough data to detect a trend. Simple average is more reliable. |
| 14–29 days | Blended: 60% SMA + 40% Holt’s | Emerging trend data exists but is not yet strong. Blending gives stability. |
| 30+ days | Best of SMA or Holt’s | Both methods are tested against the last 7 days of actual sales. The one with the lowest prediction error wins. |
To determine which method is more accurate, StreamStock hides the last 7 days of actual sales data, generates a forecast using only the earlier data, and measures how far off the predictions were. This is called backtesting.
The method with the lower RMSE (closer predictions to reality) is selected for that product.
Every forecast comes with a range of plausible outcomes. StreamStock calculates 95% confidence intervals, meaning there is a 95% probability that actual demand will fall within this range.
The intervals widen the further out you look. Day 1 predictions are narrow (high confidence); day 30 predictions are wider (more uncertainty). This reflects the natural reality that predicting tomorrow is easier than predicting next month.
A product averaging 5 units/day with RMSE of 2.1:
• Day 1 forecast: 5.0 units (range: 0.9 – 9.1)
• Day 7 forecast: 5.0 units (range: 0.0 – 15.9)
• Day 30 forecast: 5.0 units (range: 0.0 – 27.5)
The wider range further out reflects increasing uncertainty.
Each product’s forecast also gets a confidence score from 0 to 100, displayed in the dashboard. This tells you how reliable the forecast is based on how variable the product’s sales history is.
• High confidence (70–100): Prediction error is small relative to average demand. The forecast is reliable.
• Medium confidence (40–69): Moderate variability. Use as a guideline but expect some deviation.
• Low confidence (0–39): Sales are highly erratic or sparse. Treat forecast as a rough estimate only.
StreamStock detects whether demand for each product is trending up, down, or stable by comparing recent sales to slightly older sales:
The ±10% threshold prevents minor fluctuations from being labelled as trends. A product needs to show a meaningful shift before the trend indicator changes.
For products with enough sales history (at least 60 sale-days in a year), StreamStock checks for seasonal patterns — months that consistently sell more or less than average.
When a product is seasonal, the base forecast is multiplied by the seasonal index for the target month. For example, if December historically sells 1.5× the average, December predictions are scaled up by 50%.
Each product forecast is assigned a priority based on how urgently you need to act. This is driven by days of stock relative to lead time:
| Priority | Condition | What It Means |
|---|---|---|
| Critical | Days of stock < 14 (lead time) | You will run out before a new order arrives. Act immediately. |
| High | Days of stock < 17 (lead time + safety) | You are eating into your safety buffer. Order this week. |
| Warning | Days of stock < 28 (lead time × 2) | Stock is getting low. Start planning your next order. |
| Normal | Days of stock ≥ 28 | Comfortable stock levels. No immediate action needed. |
Dead stock ties up capital and warehouse space. StreamStock identifies products that have stopped selling but still have inventory on hand.
A product is flagged as dead stock when it has stock on hand but no sales in the last 90 days (the dead stock threshold). This means three full months with zero units sold.
Each dead stock item receives a velocity score from 0 to 100. Lower scores mean the stock is “deader” — it will take longer to sell through at historical rates (if it sells at all).
| Velocity Score | Recommendation | What To Do |
|---|---|---|
| 0–9 | Liquidate | Clear at any price to recover capital. Donate or recycle if unsaleable. |
| 10–29 | Heavy Discount | Deep price cuts (50%+ off) to move remaining inventory quickly. |
| 30–49 | Bundle | Pair with popular Class A items. Use as gift-with-purchase. |
| 50+ | Hold | Still has some velocity. Monitor closely and revisit next month. |
StreamStock calculates when to reorder and how much to order for each product based on demand data and your configured lead times.
The stock level at which you should place a new order, accounting for the time it takes to receive stock plus a safety buffer:
When stock drops below the reorder point, StreamStock calculates how much to order to bring stock up to the target coverage level:
| Level | Condition | Action |
|---|---|---|
| Critical | Days of stock < lead time (14 days) | Order NOW — you will run out before the order arrives. |
| High | Days of stock < lead time + safety (17 days) | Order this week — you are eating into your safety buffer. |
| Normal | Below reorder point but above lead time | Plan order in next purchasing cycle. |
| Low | Approaching reorder point | Monitor — no rush, but keep it on the radar. |
A helmet selling 10 units/day, with 50 units in stock:
• Reorder Point = 10 × (14 + 3) = 170 units
• Stock (50) is well below the reorder point (170) — action needed.
• Target Stock = 10 × 60 = 600 units
• Recommended Order = 600 - 50 = 550 units
• Days of Stock = 50 / 10 = 5 days
• 5 days < 14-day lead time → Urgency: Critical
• Meaning: even if you order today, you will run out in 5 days but delivery takes 14 days. You face a 9-day stockout.
The Growth Opportunities tool identifies your most successful products that are being held back by low inventory. These are products that sell well but could sell even more if you had more stock.
A product appears in the Growth Opportunities list if it meets all of these criteria:
• ABC Class A or B — it is in the top tier of revenue-generating products
• Has at least one stock problem: less than 30 days of stock, health score below 70, or an urgent restock recommendation
Each qualifying product gets a score from 0 to 100 that combines three factors:
| Factor | Weight | What It Measures |
|---|---|---|
| Revenue Factor | 40% | How much revenue this product generates relative to the top product. A product earning half the revenue of your best seller scores 50. |
| Turnover Factor | 30% | How fast this product sells through stock. Higher turnover means more opportunity if you increase inventory. Capped at 100. |
| Stockout Risk Factor | 30% | How close the product is to running out. Fewer days of stock means higher urgency. Zero stock scores 100; 30+ days scores lower. |
For products that are stocked out or close to it, StreamStock estimates how much revenue you are losing:
Stockout Days is based on how far the product is below its lead time coverage. If a product has 5 days of stock but lead time is 14 days, there are 9 potential stockout days. If the product is already at zero stock, the full lead time (14 days) is used.
| Condition | Recommended Action |
|---|---|
| Zero stock + high demand | Urgent restock — you are actively losing sales |
| Below lead time coverage | Expedite order — you may run out before a regular order arrives |
| Below 30 days of stock | Increase order quantity — current levels are too tight for a top performer |
| Health score below 70 | Review supply chain — something in the stocking process needs attention |
Product: Epicurist 2.0 Ash (ABC Class A)
• Revenue: £12,400 / Top product: £15,000 → Revenue Factor = 12400/15000 × 100 = 83
• Turnover Rate: 8.2× / 12 → Turnover Factor = (8.2/12) × 100 = 68
• Days of Stock: 4 days → Stockout Factor = (1 - 4/30) × 100 = 87
• Score: (83×0.4) + (68×0.3) + (87×0.3) = 33.2 + 20.4 + 26.1 = 80
• Stockout Days = 14 - 4 = 10 → Lost Revenue = 10 × (£12,400 / 90 days) = £1,378
• Recommended Action: Expedite order
Alerts are generated automatically after each analysis run. They notify you of inventory conditions that require your attention.
| Type | Severity | Triggered When |
|---|---|---|
| Restock Urgent | Critical | A restock recommendation has “critical” urgency (days of stock < lead time) |
| Stockout Risk | Critical | Product has 0 stock but has sold at least one unit in the last 30 days |
| Low Stock | Warning | Stock is below reorder point with “high” urgency |
| Dead Stock | Warning | No sales in 90+ days with velocity score under 30 |
To prevent alert fatigue, StreamStock checks for existing unread alerts of the same type and product within the last 24 hours before creating a new one. You will receive at most one alert per issue per day, even if the analysis pipeline runs multiple times.
Alerts start as unread. You can mark them as read (acknowledging the issue) or dismiss them (removing from view). Dismissed alerts are not shown again unless the condition persists in the next analysis run, at which point a fresh alert is created.
To keep alerts manageable, stockout alerts are capped at 50 products per run. Restock and dead stock alerts are generated for all products that meet the criteria.
If your Shopify store has multiple warehouse locations (fulfilment centres, 3PLs, retail locations), StreamStock tracks inventory at each location separately.
During each sync, StreamStock pulls inventory levels from Shopify for every location. Each product can have different stock quantities at each warehouse. The system stores three quantities per location:
• On Hand — physical units present at the location
• Committed — units reserved for unfulfilled orders
• Available — on hand minus committed (what can be sold)
When no specific warehouse is selected in the dashboard, StreamStock aggregates stock across all locations. This gives you the total picture. For example, if you have 100 units in London and 50 units in Portland, the aggregate view shows 150 units.
All analysis metrics (health scores, ABC classification, restock recommendations) are recalculated based on the selected warehouse. Switching to a specific location shows you that warehouse’s stock levels and corresponding recommendations.
Restock recommendations are scoped to the selected warehouse. When viewing “All Locations,” recommendations reflect aggregate stock. When viewing a specific warehouse, they reflect only that location’s stock — so you know exactly how much to ship or order for each location.
The warehouse dropdown in the dashboard filters the entire page: inventory table, analysis cards, health scores, and restock recommendations all update to reflect the selected location.
StreamStock connects to your Shopify store via the Shopify GraphQL Admin API to pull the data it needs. No manual data entry required.
| Data Type | What It Includes | Used For |
|---|---|---|
| Products | Title, SKU, vendor, product type, price, image, status | Product catalogue and identification |
| Inventory Levels | Stock on hand, committed, available — per location | Current stock calculations, health scores |
| Orders | Line items with SKU, quantity, and revenue | Sales history, demand forecasting, ABC classification |
| Locations | Warehouse name, city, country, active status | Multi-warehouse breakdown |
Initial sync (first time): Pulls all products, all inventory levels, and up to 12 months of order history. This can take a few minutes depending on store size.
Incremental sync (subsequent runs): Pulls all products (to catch new items and stock changes) and only orders since the last sync. This is much faster.
When orders are synced, StreamStock extracts each line item and aggregates them into daily sales records: total units sold and total revenue per product per day. These daily records are what all calculations (average daily demand, ABC revenue, forecasting) are built on.
Each sync creates a snapshot of current stock levels. These snapshots accumulate over time, allowing StreamStock to track how stock levels change day by day. Historical snapshots are used to verify trends and provide context for forecasts.
Quick reference for every term used in StreamStock.
| Term | Definition |
|---|---|
| ABC Classification | A method of categorizing products by revenue contribution. A = top 80%, B = next 15%, C = bottom 5%. |
| Average Daily Demand | Total units sold divided by number of days in the analysis period. The core input for most calculations. |
| Average Order Value | Total revenue divided by number of orders in the selected period. |
| Confidence Interval | A range around a forecast prediction. The 95% interval means there is a 95% chance actual demand falls within the range. |
| Confidence Score | A 0–100 rating of how reliable a forecast is. Based on prediction error relative to average demand. |
| Days of Stock | Current stock divided by average daily demand. How many days your stock will last at current sales rates. |
| Dead Stock | Products with inventory on hand but no sales in 90+ days. |
| Dead Stock Threshold | Number of days without sales to classify a product as dead stock. Default: 90 days. |
| Forecast Horizon | How many days ahead the system predicts demand. Selectable: 30, 60, 90, 120, or 180 days. |
| Growth Opportunity | A high-performing product (ABC A or B) that is constrained by low inventory. Scored by revenue contribution, turnover speed, and stockout risk. |
| Health Score | A composite 0–100 score for each product, combining stock coverage, turnover, dead stock risk, low stock risk, and stockout risk. |
| Holt’s Method | Double exponential smoothing. A forecasting technique that captures both level and trend in sales data. |
| Inactive Product | A product with no stock, no demand, and no recent sales (90+ days). Given a neutral score of 50 and excluded from the critical list. Can be hidden with the “Hide phasing out” toggle. |
| Lead Time | Days between placing a purchase order and receiving the goods. Default: 14 days. |
| Reorder Point | The stock level at which a new order should be placed. Equals average daily demand multiplied by (lead time + safety stock). |
| Opportunity Score | A 0–100 rating for growth opportunity products. Combines revenue contribution (40%), turnover speed (30%), and stockout risk (30%). |
| RMSE | Root Mean Square Error. Measures how far off forecast predictions were from actual sales. Lower is better. |
| Safety Stock | Extra buffer of stock kept above lead time to protect against demand spikes or delivery delays. Default: 3 days. |
| Seasonality | Recurring monthly patterns in demand. Detected automatically when monthly sales vary by more than 15% from the mean. |
| SMA | Simple Moving Average. A forecasting method that averages the last 30 days of sales. |
| Target Coverage | The ideal number of days of stock to maintain. Used to calculate recommended order quantities. Default: 60 days. |
| Trend | Whether demand is going up, down, or staying stable. Detected by comparing the last 7 days to the previous 7 days. |
| Turnover Rate | How many times per year you sell through your entire stock. Higher turnover generally indicates healthier inventory. |
| Velocity Score | A 0–100 score for dead stock items. Lower scores mean the stock is harder to sell through. |
StreamStock — Inventory intelligence for modern commerce
Back to Dashboard →