Methodology
How Canopy Inventory calculates weeks of cover, stockout dates and what to reorder
By Andrew Simpson, founder of Canopy Inventory. Last updated 6th November 2026.
In short
Canopy Inventory reads your stock, sales and product costs from Shopify (read-only) and works out, for every SKU: weeks of cover (how long your stock lasts at your current sales rate), the date it is likely to run out, the date you need to reorder by, how many to buy and the cash that buy needs at your Shopify cost per item. This page sets out each formula, with a worked example, so you can check any number the app shows you.
Weeks of cover
Weeks of cover is how long your stock lasts at your current sales rate. Canopy works it out for each SKU over a sales window you choose: 7, 14, 30, 45, 60 or 90 days.
Weeks of cover = available stock / (units sold in the window / days in the window x 7)
- Stock is Shopify's "available" quantity, not "on hand". It is added up across your sellable locations: active locations that fulfil online orders, or every active location if none do. It never goes below 0.
- Units sold are the product's own sales plus units sold inside bundles, net of cancellations and refunds.
- The window is the N whole days before today. Today is not included, because it is not over yet.
- The result is shown to 1 decimal place.
- A window longer than the sales history Canopy has synced shows "n/a". It is never estimated.
- Stock with no sales in the window shows "no sales". No stock and no sales shows 0.
- The window shown by default is 30 days, or the longest window your history covers. The planning figures (stockout date, reorder-by date and buy quantity) always use 30 days, or all your history if that is shorter.
- Incoming purchase orders are not included in weeks of cover. They are used in the stockout date and the buy quantity.
Example (made-up round numbers)
In the app: "Stock divided by units sold per week at the window's rate. 'no sales' means stock with no sales in that window."
Stockout date
The stockout date is the first day the SKU is expected to run out. Canopy steps forward one day at a time at the planning sales rate, and adds stock from dated open purchase order lines on their expected date.
- A purchase order line whose expected date has passed counts as arriving today. Lines with no date are left out of the date.
- The date is the first day stock runs out, even if a later purchase order refills it. That case is marked "PO late".
- No sales means no date. A date more than 730 days away is not shown.
- Lead time and safety stock do not change the stockout date. They change the reorder-by date.
Example (made-up round numbers)
Reorder-by date and "Order now"
Reorder-by date = stockout date - (lead time days + safety stock days)
- "Order now" shows when a buy is suggested and either the reorder-by date is today or has passed, or the SKU is out of stock.
- A reorder-by date in the past also shows "was due" and the date.
- If the buy was due but open purchase orders already cover it, the table shows the date followed by "(on order)".
Example (made-up round numbers)
In the app: "The stockout date minus your lead time and safety stock days. When a buy is due and that date has passed (or the SKU is out of stock), the table says Order now and shows the date it was due."
Suggested buy quantity
Days to cover = lead time + target cover + safety stock (all in days)
Buy quantity = days to cover x daily sales rate - (available stock + all units on open purchase orders), never below 0
- The quantity is rounded up to a multiple of the pack size first, then raised to the minimum order quantity (MOQ) if it is lower.
- The MOQ only applies when the quantity is above 0.
- Safety stock is set in days. There is no option to set it in units.
- A buy is only suggested when stock would run out within lead time + safety stock + 70 days. If open purchase orders already cover the need, the quantity is 0 and the row says "covered by open PO".
Example (made-up round numbers)
Days to cover = 30 + 60 + 14 = 104. Need = 104 x 2 - 120 = 88 units. Rounded up to packs of 12 = 96. Raised to the MOQ = 100 units.
Stock runs out in 60 days, which is within 30 + 14 + 70 = 114 days, so the buy is suggested.
In the app: "Enough to cover your lead time, then your target cover days, plus safety stock days ... minus stock and units already on order ... rounded up to your pack size, then raised to your minimum order if lower. A buy is only suggested when stock would run out within your lead time plus safety stock days plus 70 days."
Cash to buy
Cash to buy = buy quantity x Shopify "Cost per item" (to 2 decimal places)
This is your product cost as entered in Shopify. If you want freight or duty in the figure, include them in Shopify's cost per item yourself. A blank cost, or a cost of 0, counts as missing: the figure is left blank with an "add cost" link, it is never counted as 0 and never added to totals, and those buys are counted separately so you can see how many are missing a cost.
Example (made-up round numbers)
In the app: "With no product cost, or a cost of 0, the figure is left blank, never counted as zero and never added to totals."
Cash figures are a planning estimate, not financial advice.
Confidence: High, Medium or Low
Every forecast carries a badge. Its tooltip lists the reasons.
| Badge | When it shows |
|---|---|
| Low | Any of: the product cost is missing; there are under 14 days of sales history; only 1 or 2 units sold in the planning window. |
| Medium | Any of: 14 to 29 days of history; 3 to 9 units sold; data not synced for 26 hours or more; the SKU is still on Canopy's default lead time. |
| High | None of the above. The tooltip says "Nothing weakens this forecast". |
Top 3 actions
On the Pro plan, Canopy picks the three actions most worth doing now from three kinds: buy a SKU, clear dead stock, or do not reorder an overstocked SKU. Urgent buys come first, then the actions worth the most.
With a cash budget entered, buys that cannot wait are added first, then the rest in order of contribution protected for each unit of cash spent; a buy that does not fit in the budget left is skipped. Buys with no product cost are listed separately and never counted against the budget.
Dead stock and overstock
Dead stock
A SKU is flagged as dead stock when it is in stock and has had no sales (its own or through bundles) in the last 90 days, or in all its history if that is shorter. A SKU with under 14 days of history is never called dead.
Overstock
Overstock = more than 26 weeks of cover at the planning rate, or no sales in the last 30 days (or all the history read, if shorter). Excess units = stock beyond 26 weeks of cover.
Example (made-up round numbers)
The 90-day and 26-week thresholds are fixed and cannot be changed in this version.
Bundles
Canopy uses Shopify's bundle components. Bundles are not shown as stock rows of their own. Each bundle sold adds bundle quantity x component quantity to each component's sales, and that figure feeds weeks of cover, the stockout date, the buy quantity and the dead stock check.
Example (made-up round numbers)
In the app: "Units sold inside a bundle count towards each component."
Fresh install defaults and setting ranges
| Setting | Default on install | Range you can set |
|---|---|---|
| Lead time | 30 days | 0 to 365 days |
| Target cover | 60 days | 1 to 52 weeks |
| Safety stock | 0 days | 0 to 180 days |
| Pack size | 1 | 1 to 100,000 |
| Minimum order quantity (MOQ) | 0 | 0 to 1,000,000 |
| Sales window | 30 days, or all history if shorter | 7, 14, 30, 45, 60 or 90 days |
Fixed thresholds: dead stock 90 days, overstock 26 weeks, stockout horizon 730 days. Settings apply in this order: shop default, then supplier, then SKU override. Supplier and SKU overrides depend on your plan.
What each plan includes
| Plan | Price | What it adds |
|---|---|---|
| Free | $0 | Your 50 most recently sold SKUs. Shop-wide settings. |
| Growth | $39 a month | All SKUs, incoming purchase orders, and settings per supplier and per SKU. |
| Pro | $79 a month | Everything in Growth, plus Top 3 actions and cash budget planning. |
Paid plans have a 14-day free trial and are billed by Shopify. See pricing for the full plan list.
What Canopy does not do
- It does not write anything to Shopify. The connection is read-only: no stock, cost or product changes.
- It does not adjust for days a SKU was out of stock. The rate is units sold divided by the days in the window, so a stockout in the window lowers the rate. The planning figures (stockout date, reorder-by date and buy quantity) always use the last 30 days (or all your history if shorter), so a recent stockout lowers them too.
- It does not include incoming purchase orders in weeks of cover. They count in the stockout date and buy quantity.
- It does not work out freight, duty or other import costs. Cash to buy uses the product cost in Shopify's cost per item.
See these numbers for your own SKUs
Canopy Inventory is coming soon to the Shopify App Store. One email the day it's live. Free for your 50 most recently sold SKUs.
Related guides and tools
The formula, a worked example and how to work it out in Shopify by hand.
Work out a reorder point and safety stock for one product.
How to size a safety buffer for demand and delivery swings.
Free for your 50 most recently sold SKUs. Paid plans have a 14-day free trial.