Templates › Business and freelance
Inventory & Stock Control
Made for small shops and makers holding stock.
A stock list with cost, selling price and quantity on hand, a log of stock coming in and going out, and a summary showing what is running low and what the stock is worth. The summary carries a chart that redraws itself as you type.
- Tabs
- 3
- Columns
- 29
- Fill themselves in
- 24
£7one payment, yours to keep
- Opens in Excel, Google Sheets and Numbers
- Delivered straight away
- No macros, nothing to install
- Change it free before you buy
Payment is handled by Stripe. Your card details go to them and never to us. Sales are final, which is why every tab, column and calculation is shown on this page first.
Everything inside, before you pay
This is the whole design: every tab, every column and how each calculated one is worked out. White cells are yours to fill in; the shaded ones work themselves out and are locked so a formula cannot be overwritten by accident. There is room for 2,300 rows.
Products
| Column | Type | Worked out as |
|---|---|---|
| SKU | text | |
| Product | text | |
| Category | choice (list) | |
| Supplier | text | |
| Unit | choice (list) | |
| Cost Price | currency | |
| Sell Price | currency | |
| Margin | percent | IF(OR(ISBLANK([cost_price]),ISBLANK([sell_price])),"",IFERROR(([sell_price]-[cost_price])/[sell_price],0)) |
| Opening Count | number | |
| In | number | IF(ISBLANK([product_name]),"",SUMIFS([Stock Movements!quantity],[Stock Movements!product],[product_name],[Stock Movements!movement_type],"In")) |
| Out | number | IF(ISBLANK([product_name]),"",SUMIFS([Stock Movements!quantity],[Stock Movements!product],[product_name],[Stock Movements!movement_type],"Out")) |
| In Stock Now | number | IF(ISBLANK([product_name]),"",[opening_stock]+SUMIFS([Stock Movements!quantity],[Stock Movements!product],[product_name],[Stock Movements!movement_type],"In")-SUMIFS([Stock Movements!quantity],[Stock Movements!product],[product_name],[Stock Movements!movement_type],"Out")) |
| Reorder At | number | |
| Order Up To | number | |
| Units To Order | number | IF(ISBLANK([product_name]),"",IF([on_hand]<=[reorder_level],MAX(0,[target_stock]-[on_hand]),0)) |
| Value At Cost | currency | IF(ISBLANK([product_name]),"",ROUND([on_hand]*[cost_price],2)) |
| Value At Retail | currency | IF(ISBLANK([product_name]),"",ROUND([on_hand]*[sell_price],2)) |
| Status | text | IF(ISBLANK([product_name]),"",IF([on_hand]<=0,"Out of stock",IF([on_hand]<=[reorder_level],"Reorder now","In stock"))) |
Stock Movements
| Column | Type | Worked out as |
|---|---|---|
| Date | date | |
| Product | choice (from Products › product_name) | |
| In Or Out | choice (list) | |
| Reason | choice (list) | |
| Quantity | number | |
| Unit Cost | currency | |
| Line Value | currency | IF(ISBLANK([quantity]),"",ROUND([quantity]*[unit_cost],2)) |
| Change | number | IF(ISBLANK([quantity]),"",IF([movement_type]="Out",-[quantity],[quantity])) |
| Month | text | IF(ISBLANK([movement_date]),"",TEXT([movement_date],"YYYY-MM")) |
| Reference | text | |
| Notes | text |
Summary
| Measure | Worked out as |
|---|---|
| Products tracked | COUNTA([Products!product_name]) |
| Units in stock | SUM([Products!on_hand]) |
| Stock value at cost | SUM([Products!stock_value]) |
| Stock value at retail | SUM([Products!retail_value]) |
| Profit if all sold | SUM([Products!retail_value])-SUM([Products!stock_value]) |
| Average margin | IFERROR(AVERAGE([Products!margin_pct]),0) |
| Lines to reorder | COUNTIF([Products!status],"Reorder now") |
| Lines out of stock | COUNTIF([Products!status],"Out of stock") |
| Units to order | SUM([Products!order_qty]) |
| Units received this month | SUMIFS([Stock Movements!quantity],[Stock Movements!month_key],TEXT(TODAY(),"YYYY-MM"),[Stock Movements!movement_type],"In") |
| Units gone out this month | SUMIFS([Stock Movements!quantity],[Stock Movements!month_key],TEXT(TODAY(),"YYYY-MM"),[Stock Movements!movement_type],"Out") |
| Cost of stock out this month | SUMIFS([Stock Movements!line_value],[Stock Movements!month_key],TEXT(TODAY(),"YYYY-MM"),[Stock Movements!movement_type],"Out") |
| Movements recorded | COUNT([Stock Movements!movement_date]) |






