Inventory & Stock Count Sheet

Keep track of what is on the shelf, what it is worth and what needs ordering. When you count the stock it shows the gap between the recorded figure and the one you just counted, line by line, before you let it change anything.

How to use it

Each line holds a SKU with its location, unit, quantity on hand, reorder level, reorder quantity and unit cost, and the stock value and the order quantities follow from those.

  1. Build the list Fill in the form and press Save line. SKU and description are the only things really needed; everything else improves what the tool can tell you. The example list already on the page shows the shape of a working stock file.
  2. Set the two reorder numbers Reorder level is the quantity that triggers a purchase. Reorder quantity is how much you buy when it does. With both filled in, the reorder table underneath tells you exactly what to put on the order and what it will cost.
  3. Print a count sheet Filter to one location if you want, choose the blank count sheet in the rail and press Print. It comes out with a tick box and a write-in space per line, and no expected figures, which is what a blind count needs.
Full instructions

Dashboard

Add a stock line

The code on the shelf label
What one of it is: bag, box of 12, kg, litre
Order when it falls to this or below
How much you buy at a time
What you pay, not what you sell it for

Stock list

Counting adds a counted column and a variance

Click a row to open it in the form above. Whatever the filters leave is what goes on the printed sheet and into the CSV exports.

Suggested reorder list

SKUDescriptionLocationUnit On handReorder levelOrderOrder cost

Import and export

CSV opens in any spreadsheet

Drop a stock CSV here

the first row must be the column names · SKU, description, quantity and the rest

Choose a file

Rows are matched on the SKU: a SKU already in the list is updated, a new one is added, and nothing is ever deleted by an import. A column named Counted is loaded into the counted column rather than into on-hand, so you can type a count into a spreadsheet and bring it back here to post.

In depth

Keeping a stock list, working out what to order, and counting the shelves against it

This article explains what each of the eight fields on a stock line is for, why reorder level and reorder quantity are two different numbers that people constantly merge into one, how the two reorder policies give different answers on purpose, and how the counting side works — including the one rule that keeps a half-finished stocktake from wrecking your figures.

Four low lines in the sample list, and the order behind each

Press Load the example and a twelve-line coffee shop stockroom appears. Every figure in it is fixed, so you can check the tool against a calculator. The dashboard reads 12 stock lines, 95 units on hand and £469.40 of stock. That last one is only quantity times unit cost, summed. Coffee: 18 bags at £3.40 is £61.20. Paper bags: 11 packs at £7.40 is £81.40. Add the other ten lines and you land on £469.40.

Four of the twelve sit at or below the point where they should be bought again. The test is on hand less than or equal to the level. Less than or equal, so a line resting exactly on its level is flagged as well. Milk holds 9 against 12. Lids hold 3 against 6. Syrup holds 2 against 3. Sanitiser holds 0 against 2, which also makes it the only line marked out of stock.

Now the buying rule. With whole packs picked, the tool starts at one pack. It keeps adding packs while the result would still land at or below the level. Milk comes in cases of 24. One case lifts 9 to 33, which clears 12, so the search stops there. The order is 24 at £1.15 each, or £27.60.

Topping up works down from a ceiling instead. The most you want is the level plus the pack size, and you buy the gap. Milk again: 12 plus 24 is 36, less the 9 held, so 27. That is £31.05. Over the four flagged lines, whole packs come to £117.90 and topping up comes to £144.55. The extra £26.65 buys stock that lasts longer.

The pack search only runs past one when a single pack is too small. Say a line holds nothing, the level is 20 and the pack is 6. One pack reaches 6, two reach 12, three reach 18, and each of those is still at or below 20. So it takes four packs and the order is 24. The search gives up for good at 1,000 packs, so a daft level cannot lock the page up.

Leave the pack size blank and there is nothing to multiply. Both rules then do the same thing: bring the line back up to the level. Hold 3 against a level of 6 and the answer is 3 either way. A line resting exactly on its level with no pack size gives an order of zero, so it stays flagged with nothing to buy. The note under the reorder table counts how many lines are stuck like that.

There is a tick box for whole units. It rounds the order up, never down, so 3.5 becomes 4. It also shaves a billionth off first. That stops a figure which is really 4, but stored as a hair more, from creeping up to 5.

  • Milk: 9 on hand, level 12, cases of 24. One case, £27.60. Topping up, 27 units, £31.05.
  • Lids: 3 on hand, level 6, sleeves of 10. One sleeve, £39.00. Topping up, 13 sleeves, £50.70.
  • Syrup: 2 on hand, level 3, packs of 6. Six bottles, £33.60. Topping up, 7 bottles, £39.20.
  • Sanitiser: 0 on hand, level 2, packs of 6. Six sprays, £17.70. Topping up, 8 sprays, £23.60.
  • Whole packs: £117.90 for the four. Topping up: £144.55.

What the sums round off, and where they stop being safe

Two lines in the example arrive already counted, which is enough to show the count maths. Milk expects 9 and was counted at 7. That is 2 short, and at £1.15 each it is £2.30. Cups expect 14 and were counted at 15. That is 1 over, and at £4.25 a sleeve it is £4.25. The dashboard keeps them apart: £2.30 missing, £4.25 found, a net of £1.95 in your favour, 2 lines not matching, and minus 1 unit overall. Each of those is a gap in units times that line's own cost.

Rounding is shallow on purpose. Quantities are held to three decimal places with trailing zeros stripped, so 1.500 shows as 1.5 and anything under a thousandth is gone. That suits weights without pretending to lab accuracy. Money follows the currency you pick. Twelve of the thirteen on offer use two decimal places. The yen uses none, since it has no minor unit, and giving it pennies would make every figure look tiny. One small guard: a value that rounds to zero never prints with a minus sign in front of it.

Some fields are clamped and some are not. The level, the pack size and the unit cost are all lifted to zero if you type a negative. Quantity on hand is left as you typed it, so a negative holding stands. It usually means something was issued twice, and hiding it would not help you find that. Anything the tool cannot read as a number becomes zero. A blank counted cell is the one exception. It stays blank, and that is the rule the whole count rests on. A fresh list starts on pound sterling, day/month/year dates, whole packs, blind sheets and today's date.

The date is only ever text. It is kept as year-month-day and reshaped for display, and no sum uses it. There is no ageing, no usage rate and no forecast. The sort named cover is on hand minus the level, measured in units, not in days. Nothing here knows how fast anything sells, so the tool cannot tell you whether a level is set well. It can only tell you when you have crossed one. Date checking is loose too: any day from 1 to 31 passes for any month.

Column matching on import is generous, and generous can be wrong. A column headed Max or Maximum is read as the pack size. Under the topping-up rule that is headroom above the level, not the ceiling itself. So a sheet with Min 12 and Max 24 gives you a ceiling of 36, not 24. Either halve that column or switch to whole packs. Numbers are read the English way as well. The cost cell keeps only digits, dots and minus signs, so a price written as 1.234,56 arrives as 1.23456.

Two lines are allowed to share a SKU. Saving a repeat earns you a warning in the message that pops up, and nothing more. It matters because an import matches on the SKU and stops at the first line it finds. The second copy is never touched, so it quietly goes stale. The log of posted counts holds the last 50 entries and drops the older ones. Each entry keeps the date, the reference, how many lines were posted, how many disagreed, and the net value. The lines themselves are not kept. If you may want to know which item was wrong three months from now, save the variance CSV before you post.

  • Quantities round to three decimals. Money uses two, or none for the yen.
  • Level, pack size and unit cost cannot go below zero. On hand can.
  • The pack search gives up at 1,000 packs.
  • The count log holds the last 50 postings, with no line detail in them.
  • A Max column becomes the pack size, which topping up then adds to the level.
  • Costs written with a decimal comma come in wrong.

What a stock list is actually for

Most small businesses do not have a stock problem. They have a knowing problem. The cupboard is not empty, but nobody can say what is in it without going to look, and by the time someone looks, the thing they needed has run out.

A stock list fixes that by writing down two things per item: how many you hold, and how few is too few. Everything else the tool does grows out of those two numbers. The value on the shelf is quantity times cost. The reorder flag is quantity compared with the too-few line. The order quantity is the gap between the two, worked out under whichever buying rule you follow.

The list is only worth keeping if it is true, and a written list drifts away from reality within weeks. Deliveries get put away without being recorded. Things get used, broken, given away, or quietly taken. So the second half of the tool is the count: the process of walking round with a printed sheet, writing down what is really there, and dragging the list back to the truth.

The eight fields, and what each one earns

SKU is the code on the shelf label. It does not have to follow any standard, it just has to be unique and short enough to write on a label. It is what the CSV import matches on, so a consistent scheme pays for itself the first time you import a supplier list.

Description is what the thing is, written for a human. Someone who has never worked in your stockroom should be able to find it from the description alone, because that is exactly who ends up doing the count when you are short-staffed.

Location is where it lives. This is the field that makes counting practical, because you can filter to one room and print a sheet for that room only. Locations can be as broad as Chiller or as narrow as Aisle 3, Bay B.

Unit is what one of it is: a 250g bag, a box of 2000, a litre, a sleeve of 50. Getting this wrong is the single most common cause of a count going haywire. If the list says 14 and the unit is a sleeve of 50 cups, the person counting must write down sleeves, not cups. Spelling the unit out on the sheet is the only defence.

Quantity on hand is what the list believes you have. Reorder level, reorder quantity and unit cost are covered below, and Notes is a free field for lead times, supplier names, or a warning about the box that looks full but is not.

Reorder level and reorder quantity are not the same number

These two fields get merged more often than any other pair in stock control, and merging them produces either constant emergencies or a stockroom full of money.

The reorder level is a trigger. It answers: at what point do I need to place an order? The right value depends on how fast the item goes out and how long the supplier takes to deliver. If you use ten a week and the supplier takes a week, ten is your bare minimum, and a sensible reorder level is a bit above that so a late delivery does not leave you at zero.

The reorder quantity is a size. It answers: when I do order, how much do I buy? That depends on pack sizes, minimum order values, how much space you have, and how much cash you want tied up. A supplier who only sells cases of 24 has made the decision for you.

The tool keeps them apart because they move for different reasons. If your supplier gets slower, the level goes up but the quantity does not. If the supplier changes case size, the quantity changes but the level does not. Storing one number for both means every change breaks something.

Two reorder policies, two different answers

Once a line is flagged, how much should you buy? There are two answers in common use and they genuinely differ, so the tool asks rather than choosing quietly.

Buying whole reorder quantities suits anyone whose supplier sells in fixed packs. You cannot order two thirds of a case, so the order is one case, or two if one is not enough to get you back above the trigger. Hold three, level six, case of ten: the order is one case of ten, which takes you to thirteen. It is the simplest rule to follow and it produces tidy purchase orders.

Topping up suits anyone who can order any amount. Here the reorder quantity is read as headroom above the trigger, so the most you want on the shelf is the level plus the quantity. Same numbers as before: hold three, level six, headroom ten, maximum sixteen, so the order is thirteen. That caps the money sitting on the shelf, which is why it is popular with anyone watching cash rather than paperwork.

Both policies can leave a flagged line with nothing to order. That happens when the reorder quantity is blank and the item is already sitting right on its level. The tool keeps the flag but tells you in the note under the reorder table how many lines are in that state, because the fix is to fill in the missing number rather than to ignore the warning.

Stock value is a cost figure, not a price list

The unit cost field wants what you paid, not what you charge. This trips people up because the sale price is the number they know by heart.

The difference matters twice. First, the stock value at the top of the page is what your accounts call stock or inventory, and accounts carry it at cost. Putting sale prices in inflates the figure, sometimes by a factor of three, and it will not reconcile with anything.

Second, it distorts every variance. If eight sleeves of cups go missing and you costed them at the price you charge for a coffee, the loss looks enormous and you will spend an afternoon on it. Costed properly, it might be thirty pounds and a note to check who is taking cups home.

Lines with no cost at all are allowed. They still count correctly in units, they simply contribute nothing to the value figures. The dashboard tells you how many lines are in that state, so a suspiciously low stock value has an obvious explanation rather than being a mystery.

Counting: blind sheets and the blank-is-not-zero rule

Switch the Mode control to Stock count and the table grows two things: a box to type what you found, and columns showing the difference in units and in money.

One rule governs everything here. A blank box means not counted. A zero means counted, and the shelf is bare. They are stored differently and treated differently the whole way through, which is why you can count one aisle on Tuesday, leave the rest blank, and post safely. Software that treats blank as zero will write off every line the counter never reached, and it does it silently.

The printed sheet is blind by default: it lists the SKU, the description and the unit, with a tick box and a space to write, but no expected quantity. This is not the tool being unhelpful. If the counter can see the number they are supposed to find, a half-counted shelf becomes the expected number, and the count stops proving anything. There is a second sheet that does show the expected figure, which is the right choice for a recount when you already know something is wrong and want to find where.

There is also a Recount column on the sheet. Use it only for a line that was genuinely checked twice. Keeping the first figure visible next to the second is what stops a recount becoming a rubber stamp.

Reading a variance before you believe it

As counts go in, the dashboard splits the discrepancy three ways: stock missing, stock found, and the net of the two. That split is deliberate.

A net variance of nothing across a hundred lines is not a clean count. It is far more likely that two mistakes cancelled each other out. Netting them off hides both. Shown apart, a count with fifty pounds missing and fifty pounds found is obviously a count with two problems in it, and usually the problems are next to each other on the shelf: two similar items swapped, or one line counted onto the wrong row.

Sort by variance value and the money floats to the top. Fifty missing screws and one missing laptop are both a single line in the list, and only one of them deserves your afternoon. Sorting by units would put the screws first, which is why the tool sorts by value instead.

Before treating a variance as real, check the unit. A line that is out by exactly a factor of the pack size, twelve or twenty-four or fifty, is almost never theft. It is somebody counting singles onto a line measured in boxes. This single check explains most of the alarming variances people find on their first count.

Posting the count

Posting is the moment the count becomes the truth. Every line with a number in the counted box has that number written into quantity on hand. The counted column is then cleared, ready for next time.

Lines you did not count are left exactly as they were. That is what makes a rolling count possible: do the chiller this week, the dry store next week, post each one, and the list stays accurate without ever shutting the place for a full inventory.

The confirmation box tells you what you are about to do before you do it: how many lines will change, how many of them currently disagree, and the net value of the adjustment. Read it. It is the last point at which a miscount is free to fix.

Posting cannot be undone, so take the JSON backup first on anything larger than a spot check. Each posted count is recorded with its date, its reference and its net value, which gives you a short history of how far the shelves have drifted from the paperwork over time. If those net figures keep pointing the same way, the problem is a process, not a counter.

Getting data in and out

The import accepts any CSV with a header row and matches column names loosely. Qty, Quantity and On hand all land in quantity on hand. Min, Minimum and Reorder point all land in reorder level. Cost, Unit cost and Cost price all land in unit cost, and currency symbols and thousands separators are stripped rather than being read as zero.

Rows are matched on SKU. A SKU already in the list is updated, a new one is added, and nothing is ever deleted by an import. That makes it safe to re-import a supplier price list to refresh costs without touching your quantities.

A column named Counted is treated specially: it loads into the counted column, not into quantity on hand. This is what makes a spreadsheet round trip work. Export the count sheet, send it to whoever is counting, let them type into the Counted column, then drop the file back and every variance appears without a single figure being retyped.

Going out, there are four exports and four printable sheets. The exports all follow whatever filters you have set, so narrowing to one location gives you that location's data and nothing else. The JSON backup ignores filters on purpose — a backup that only saved part of your list would be worse than no backup at all.

Where this tool stops

It is a stock list, not a stock system. There is no receiving, no issuing, no order history and no link to sales. Quantity on hand changes when you edit it or when you post a count, and at no other time. For a business turning over a few dozen lines, that is enough and the simplicity is the point.

One SKU is one line in one place. If you hold the same item in two locations, give each its own line, because you count them separately and an import matches on SKU. Batch numbers and expiry dates are not modelled either. If those matter to you legally, as they do for food or medicines, you need more than a list like this.

The valuation is quantity times unit cost, flat. There is no first-in-first-out, no weighted average, and no allowance for stock that is damaged, expired or simply never going to sell. Your accountant may want any of those, and the export gives them the raw figures to work from.

Everything runs in your browser and the list is held in this browser's own storage. Nothing is uploaded, there is no account, and there is no shared copy for two people to edit at once. That also means clearing your browsing data clears the list, so if it matters, keep a JSON backup somewhere you trust.

Help

A stock list you can count against, not just look at

Each line holds a SKU with its location, unit, quantity on hand, reorder level, reorder quantity and unit cost, and the stock value and the order quantities follow from those. Counting is a separate mode: you type in what you actually found and see the variance, and its value, beside every line. Your counted figures replace the recorded ones only when you post the count.

Build the list

Fill in the form and press Save line. SKU and description are the only things really needed; everything else improves what the tool can tell you. The example list already on the page shows the shape of a working stock file.

Set the two reorder numbers

Reorder level is the quantity that triggers a purchase. Reorder quantity is how much you buy when it does. With both filled in, the reorder table underneath tells you exactly what to put on the order and what it will cost.

Print a count sheet

Filter to one location if you want, choose the blank count sheet in the rail and press Print. It comes out with a tick box and a write-in space per line, and no expected figures, which is what a blind count needs.

Type the counts back in

Switch Mode to Stock count. The table grows a counted column. Type what you found and the variance, its value and the running totals appear as you go. Lines you have not counted stay blank rather than being treated as zero.

Read the variance before you commit

The dashboard splits the discrepancy into shrinkage and overage rather than netting them off, because two errors that cancel out are still two errors. Investigate the biggest values first, then correct any miscounts.

Post the count

Post the count writes every counted figure into on hand, clears the counted column and records the date, reference and net value in the log. Uncounted lines are left exactly as they were.

Posting overwrites on hand

When you post, the counted figure becomes the new quantity on hand for every line that has one. There is no undo, so check the variance report first and take the JSON backup if the count was a big one.

Good to know

A blank count is not a zero count

Leave a line blank and the tool treats it as not counted. To record that a bin really is empty, type 0. This one distinction is what stops a half-finished count wiping out the stock you never got to.

Count blind if you can

The blank sheet hides the expected quantity on purpose. If the counter can see the number they are supposed to find, they will find it, and the count stops being evidence of anything.

Value the variance, not the units

Fifty missing screws and one missing laptop are both one line. Sorting by variance value puts the money at the top and tells you where to spend your afternoon.

Unit cost, not sale price

Stock is valued at what it cost you. Putting the retail price in the cost field inflates the stock value and makes any shrinkage figure look far worse than it is.

Count little and often

Filter to one location, print that sheet and count it. A rolling count of a few shelves a week finds problems while they can still be traced, which an annual count never does.

Take a backup before posting

Posting is not undoable. The JSON backup button saves the whole list, counted column included, so you can get back to where you were if a count turns out to be wrong.

Common questions

What happens to lines I did not count?
Nothing. Posting only touches lines with a number in the counted column. A blank counted cell means not counted, so a partial count of one aisle is perfectly safe to post.
Why does the reorder list sometimes miss a line that is flagged low?
Under the top-up policy the suggested order is the maximum level minus what you hold, and that can come out at zero or less if the reorder quantity is blank. The line stays flagged but there is nothing to order until you give it a reorder quantity.
Can quantities have decimals?
Yes. Weights and volumes are handled — 3.75 kg is fine. If you want purchase orders in whole units, tick the rounding option in the rail and suggested orders are rounded up.
Does it handle more than one location for the same SKU?
Not as one line. Give each place its own line, for example BRW-250 in Dry store and BRW-250 in Van. They are separate lines because you count them separately, and an import matches on the SKU so identical SKUs would collide.
What does the variance value actually mean?
It is the variance in units multiplied by the unit cost. A negative figure is stock you thought you had and do not, which is a write-off. A positive one usually means an earlier receipt or issue was never recorded.
How do I get my existing spreadsheet in?
Export the blank template, paste your data under the headings, save it as CSV and drop it on the page. Column names are matched loosely, so Qty, Quantity and On hand all work.
Is any of this sent anywhere?
No. The whole thing runs in your browser and the list is kept in this browser's local storage. Nothing is uploaded, and there is no account. Clearing your browser data clears the list too, so keep a JSON backup.
Why is stock value not the same as what the list is worth to me?
Stock value here is quantity multiplied by unit cost, which is the cost basis your accounts use. It is not the retail value, and it makes no allowance for stock that is damaged, expired or unsellable.
Can two people count at once?
Print a sheet each, filtered to different locations, then type both back into one browser. The list lives in one browser only, so there is no shared copy for two people to edit at the same time.