Guide

How to prevent stockouts: practices that actually work

Running out is rarely a buying problem. It is a trigger problem, a counting problem, or a recording problem — and each one has a fix a small team can finish in a month.

Updated September 2026 ~17 min read

The sheet says the seal kit is on the shelf. It is not. Two technicians are standing in a customer's plant room with nothing to do, somebody is about to pay for next-day freight, and the part costs $90. The morning costs several times that — not a failure of buying, but a failure of the mechanism that was supposed to tell you to buy.

What a stockout actually costs you

The part is the cheapest line in the event. Price the event, not the part. Five buckets you can fill from figures you already have, plus one you cannot.

Pricing one stockout from numbers you already have
Cost bucketHow to price itExample line
Lost gross marginSelling price − unit cost, on the units you could not supply$210 − $90 = $120
Expedite premiumRush freight invoice − what ground would have cost$48
Idle laborPeople stopped × hours stopped × loaded hourly rate2 × 1.5 × $65 = $195
Substitution lossCost of the part you used − cost of the one you wanted$140 − $90 = $50
Return trip / reworkDrive time at the loaded rate + mileage at your per-mile rate1 × $65 + 35 × $0.70 = $89.50
Customer goodwillA judgment allowance you set; record which accounts it touchedyour call

Cost of one stockout = lost gross margin + expedite premium + idle labor + substitution loss + return-trip cost

  • Annual exposure = cost per event × events per year
  • Annual carrying cost per unit = unit cost × your carrying rate
  • Carrying rate = your own build-up of cost of capital + storage + insurance + obsolescence, as a % of unit cost per year

With no record of frequency, count the events you remember from the last 90 days and multiply by four. That undercounts, and it will still be large enough to settle the argument.

Worked example

One missing $90 seal kit

A two-technician crew arrives for a scheduled pump rebuild. The seal kit the sheet says is on the shelf is not there.

  • Part unit cost$90.00
  • Crew idle: 2 techs × 1.5 h × $65/h loaded$195.00
  • Next-day freight premium over ground$48.00
  • Return trip: 1 tech × 1 h × $65 + 35 miles × $0.70$89.50
  • Lost gross margin (job rescheduled, not lost)$0.00
Direct cost of one stockout: $195 + $48 + $89.50 = $332.50 — about 3.7× the price of the part itself, and that is with no lost margin because the job was rescheduled rather than lost. On an order you could not fill, add the margin line too. At twice a month that is $7,980 a year.

Now compare that against carrying spares for a year. Build your own carrying rate rather than borrowing an industry percentage. At 25% purely as a placeholder, the six spare kits this guide ends up recommending for that item cost 6 × ($90 × 0.25) = $135 a year, about $1.88 per unit per month, and one prevented event pays for that about 2.5 times over. When one prevented stockout pays for a year of buffer several times over, stop arguing about the buffer and fix the trigger.

Keep the arithmetic where it belongs

This case justifies buffer on your top items only. Run it across everything you own and you end up with a stockroom full of money.

Why stockouts actually happen

Seven mechanisms break, ordered here by how often they are the real culprit in a small operation. Each one has a test you can run in five minutes.

Seven root causes and the five-minute test for each
Root causeWhat you'd see on the floorFive-minute test
No reorder triggerReorders happen after someone complainsAsk three people how they know to reorder item X
Wrong on-hand number"The system says we have them"Count your 10 fastest movers and compare
Consumption unrecordedShelf empty, record says fullTime how long it takes to record one issue
Lead-time folklore"About a week," from everyoneCheck the last five orders' real dates
Lumpy demandThe average looks fine and you still run outCompare your biggest week to your average week
One-person knowledgeReordering stops when they are offAsk a new hire what is low today
Forked dataTwo sources disagreeCount how many places a quantity is written down

Frequency is not the fix order. Work them in this sequence regardless of how the table ranks them: accuracy first, then recording, then the trigger, then alerting. A trigger sitting on top of a wrong number fires at the wrong time. The last cause is the one a tool genuinely solves — one shared record every device reads. Stockout runs on Windows, Android and any browser from one cloud account, and changes appear on teammates' devices within seconds.

Practice 1: rank items before you do anything else

You cannot apply the same discipline to 900 items. Rank by annual usage value so effort lands where the money is — not by unit price, not by what feels important. A $0.30 zip tie used 500 times a year does not deserve a threshold review.

Annual usage value = annual units used × unit cost

  • Cumulative % of value = running total of annual usage value / total annual usage value
  • Cut points = roughly 80% and 95% cumulative, with the item that crosses the line joining the band it completes — a rule of thumb, not a standard
Ranking six items by annual usage value
ItemAnnual unitsUnit costAnnual usage valueCumulative %Group
Pump seal kit240$90.00$21,60050.7%A
Drive belt600$18.00$10,80076.1%A
Filter cartridge1,200$6.00$7,20093.0%A
Hose clamp4,000$0.45$1,80097.2%B
Gasket set150$7.00$1,05099.6%C
Zip ties (bag)500$0.30$150100%C
Total$42,600

Three of six items carry 93% of the value; the bottom three carry about 7%. The A items are where a computed trigger and a monthly count earn their keep. The one B item gets a trigger and a quarterly look. The C items get a year's supply and no further thought — a C item does not deserve a stockout either; it deserves a fat buffer instead of a process.

Two mistakes. Ranking by unit cost alone misses the cheap part that stops a job, so keep a short hand-written "stops-the-job" list beside the ranking — a $4 fuse that halts a line belongs on the A list whatever its usage value. And if the A list outgrows an hour of review a month, the cut is wrong.

Stockout does not classify items for you and has no A/B/C field; the ranking lives in your own working file. What carries into the app is tighter Low Stock At values on the A items, plus the ★ Bookmarked tab, which keeps that list one tap away on the Inventory screen. Bookmarks are per device and do not sync.

Practice 2: set a real reorder trigger, not a feeling

A trigger is a number that means "order now". Two parts: what you will use while you wait, plus a buffer for the days the supplier or the demand misbehaves.

Reorder trigger = average daily usage × lead-time days + buffer units

  • Average daily usage = annual units used / working days per year
  • Working days = your own count; 250 is a common approximation for a five-day operation, not a fact
  • Lead-time days = count them in the same working days as the usage rate, not calendar days — a 250-working-day year against a lead time that includes weekends inflates the trigger by about half
  • Rounding = always up, to the next whole unit

Rounding down is how a good calculation becomes a stockout. Watch the units so nobody multiplies weeks by days.

Worked example

A trigger for the seal kit

  • Annual usage240 units
  • Working days per year250
  • Average daily usage: 240 / 2500.96 units/day
  • Supplier's quoted lead time12 working days
  • Demand over lead time: 0.96 × 12 = 11.52, round up12 units
  • Buffer (computed in Practice 5 below)6 units
Reorder trigger on the quoted lead time = 12 + 6 = 18 units. Practice 5 measures the real average at 13 days and revises this to 19 — enter the measured figure, 19, as that item's Low Stock At.

Recompute after any change in usage or supplier, and review the A list monthly: a trigger set in January is folklore by June. For service levels, demand variability and the Z factor, read the reorder point and safety stock formulas, with worked numbers.

One gap catches everyone. Once you place the order, on-hand stays under the trigger until the goods land, so the item keeps reading Low Stock. Name the person who owns the open order, and do not let a second person reorder off the same signal.

Stockout does not calculate a reorder point, does not store one, and has no safety-stock field. You do the arithmetic; the app watches the result. Enter it in the item editor's Low Stock At field. The full rule: quantity at or below zero reads Out of Stock; at or under the low-stock threshold reads Low Stock; at or above Max Capacity reads Max Capacity; at or above the near-capacity threshold reads Near Capacity; everything else reads In Stock. Editing an item needs the User role or above — see how to set “Low Stock At” on an item.

Three threshold traps

Percentages need a Max Capacity. Low Stock At and Near Capacity At can each be a fixed number (#) or a percentage (%) from a two-option dropdown, and the percentage is of that item's Max Capacity (units) — never of usage or demand. With no Max Capacity set, it resolves to zero and never fires.

Low is evaluated before Max. An item whose low threshold sits at or above its Max Capacity reads Low Stock even when it is physically full. Max Capacity is how much the storage spot physically holds; it drives the Near Capacity and Max Capacity statuses only.

The default is per device. Settings has a Default Low Stock Threshold applied to new items; it defaults to 5 and is stored on that device rather than synced, so set a real per-item number.

Practice 3: count often enough to trust the number

A trigger is only as good as the on-hand figure it compares against; wrong number, and it fires late, early, or never. Measure it as record accuracy = items counted that matched exactly / items counted, by item rather than by unit, because "close" is not a match.

Set the bar by group: A items at 95% or better, B items at 90%, and C items you frankly do not care about — which is why they get the fat buffer instead of a target. Those are exact-match figures, so they sit below the within-tolerance targets in the counting guide. Tie frequency to the ranking rather than a calendar you will abandon — A monthly, B quarterly, C once a year.

Count 50 A and B items and 42 match exactly: 42 / 50 = 84%. Well under the bar, so the next move is another counting pass, not threshold tuning. When a count disagrees with the record, change the record to match the shelf the same day — a count you do not act on is worse than no count, because now two people have seen the discrepancy and nothing happened.

In Stockout, correct stock with the + / − buttons on an item card, or the three-dot menu → Adjust for a bulk add or remove with a live preview; that needs the User role, and Viewers cannot adjust stock. Two caveats. An adjustment can never take a quantity below zero, so an over-removal stops at zero and quietly under-records the movement. And in the web app, editing an item's quantity in the item editor writes no stock movement and raises no alert — use the Adjust sheet when you want the change recorded. There is no count sheet, count schedule or variance report in the product.

For how to run counts without shutting the place down, read cycle counting vs. a physical inventory count.

Practice 4: make recording consumption a two-second job

Phantom stock is not dishonesty, it is friction. If recording an issue takes longer than grabbing the part, it will not get recorded, and the next shift undoes every count you did.

The recording step has to live where the stock physically leaves, and it has to be one action — not a form, not a notebook to transcribe later. Scanning is the cheapest way there: the code is already on the box, and a scan removes the typing and the typo at once. Put the reader on the stockroom bench, not at the desk.

Barcode scanning works two ways: the device camera on Android, and a USB or Bluetooth reader in keyboard-wedge (HID) mode on Windows and the web. A scan looks the item up by SKU and adds or removes stock in one tap, with a per-scan quantity and an add (green) / remove (red) mode. The scan buttons sit in the footer of the Inventory screen and only appear for users with write permission.

Two details matter when you set it up. An item can carry multiple SKUs or barcodes and scans match any of them, so you can put your own printed label on an unmarked part without losing the manufacturer's code. And if a code matches nothing, you can create a new item with the SKU pre-filled or attach the code to an existing item — which is how you build the catalog as you go. Scan history is local to the session, and clearing it changes no data.

Then name the paths that do not go through a scan, because that is where the count drifts. Building a kit: Make deducts component stock, Unmake returns it, Remove/Sold reduces the built count without returning components. A customer job: a work-order material line deducts stock and logs a movement tagged with the WO number. And anything someone takes without telling anyone. Give each a named owner.

Two things that will surprise you

Kit builds and work-order material use raise no alerts, so a large build can drop an item under its threshold quietly. Check the Inventory stat tiles after one.

There is no stock-history or movement-log screen on Windows, Android or the web. Movements surface only through the Analytics charts and the read-only API, so the shelf and the record are what you reconcile.

Practice 5: treat lead time as measured data

Lead time is the input most people guess at, and the one that decides how much buffer you need. A quoted lead time is a sales figure; a measured one is an operating figure.

Measuring it needs no system: for each A item, write down the order and arrival dates for the last five to ten orders, and count the working days between them. The average sizes the trigger; the gap between the average and the worst case sizes the buffer.

Buffer for supplier variability = (longest observed lead timeaverage lead time) × average daily usage

  • Average lead time = sum of observed lead times / number of orders observed
  • Rounding = up, to the next whole unit
  • Covers = the supplier being late, not a demand spike
Worked example

Measuring the seal kit's lead time

  • Last five orders took9, 11, 12, 14, 19 working days
  • Average: (9 + 11 + 12 + 14 + 19) / 513 working days
  • Longest observed19 working days
  • Average daily usage0.96 units/day
Buffer = (19 − 13) × 0.96 = 5.76, round up to 6 units — the same 6 used in the trigger above. The measured average of 13 working days is a day longer than the 12 the supplier quotes.

Use the measured number: at 13 days, demand over lead time becomes 0.96 × 13 = 12.48, round up to 13, and the trigger moves from 18 units to 19. Re-measure after any supplier change, and be suspicious of a lead time that never varies — it usually means nobody is recording arrival dates. If your business has a season, measure inside the season.

Stockout does not track, store or know supplier lead time, minimum order quantity, supplier part numbers or supplier pricing; that record stays yours. What it does hold is the supplier directory: vendor name, one or more ordering-portal URLs, and contacts (name, role, phone, email), org-wide, with items linked from the item editor through the "Sourced from" picker. Reordering means tapping a supplier's saved portal link, which opens that vendor's own site in your browser where you place the order yourself. Nothing is sent for you and nothing inbound is tracked.

Practice 6: let the threshold call you

Eyeballing shelves is a job that only gets done on a good week. A threshold that fires gets it done on a bad week too. That is the payoff for the work above: a correct on-hand number, a correct trigger, and something watching the gap between them.

The rule that decides whether this works: every alert gets a named owner and one next action. An alert nobody owns becomes noise, noise gets muted, and a muted alert is worse than none because you believe you are covered. Keep the list short — A items first, B items after a month if the A alerts are actually actioned. Expect a burst in week one as thresholds meet reality. If the same item alerts every week, the trigger is wrong, not the alert.

Alerts come in four independently toggleable types: Low Stock, Out of Stock, Near Capacity ("Near Max Capacity Alerts" on the web) and Full Capacity ("At Full Capacity Alerts" on the web). They are edge-triggered — one fires at the moment a change newly crosses a threshold, an item that is already low does not re-alert, and there is no scheduled digest. Out of Stock takes priority over Low Stock on the way down; At Full Capacity takes priority over Near Capacity on the way up.

Email alerts work on every platform. Mobile push notifications are the Android app only, where a background job can pull the cloud and raise stock and capacity notifications even when the app is closed.

Two scoping rules to set up deliberately. Email recipients are a comma-separated list entered in Settings, saved per device or browser and not synced — so set them on every device that should send. And alerts fire only for the location that device is set to. The alert settings hold every toggle.

Between alerts, the Inventory screen's five stat tiles — Total Products, Low, Out, Near Capacity, Max Capacity — are the 60-second morning check; tapping one filters the list to that status. Every item carries one live status out of five, and the colors match on Windows, Android and the web:

  • Out of Stock — #EF4444
  • Low Stock — #F59E0B
  • In Stock — #10B981
  • Near Capacity — #3B82F6
  • Max Capacity — #A855F7

Near-capacity detection is off by default, and setting Near Capacity At back to 0 turns it off again.

Practice 7: one shared record, with roles

All of it collapses if two versions of the count exist: the spreadsheet on the laptop and the number in the app diverge within a week, and people start trusting whichever agrees with them. Cutting over needs no magic import — pick a date, count the A items onto the new record, and let B and C items get created as they are handled.

Roles stop accidental damage rather than adding bureaucracy. Stockout has four roles: Owner (exactly one), Admin, User and Viewer, enforced server-side: Viewers cannot adjust stock, and Users cannot manage locations, teammates, devices, or run Reset/Clear. Name the minimum role next to every instruction in your own written procedure — see roles and permissions.

Every item, kit, piece of equipment, checklist, folder and work order belongs to exactly one of your locations and sites, so the same product at two sites is two records with independent quantities and thresholds; suppliers and customers are org-wide, and label templates are shared across all locations. There is no transfer workflow — moving stock between sites is a removal at one and an addition at the other, by hand. "All Locations" is a read-only aggregate in the Windows and Android apps, so switch to a specific site to change anything; it does not exist in the web app.

The Windows and Android apps are offline-first and keep working without a connection, the web app runs online, and changes appear on teammates' devices within seconds. When two people change the same field at once, the last change saved wins, and only changed fields sync — so split the shelves between counters instead of doubling up.

Before any big cleanup, take a backup, and take another once the rollout is done — see backup and restore. A backup is one timestamped JSON file covering items, kits, equipment, checklists, suppliers, customers, folders, work orders and label templates, without activity logs or stock movements. Restore merges by ID — new records added, existing ones updated, nothing deleted — into the account that created the file. Every feature is included with an active subscription — there are no feature tiers.

Then name the one person who owns the record. Not a committee. A committee does not count shelves.

The 30-day rollout

Four weeks at roughly three hours each — an estimate, not a promise. If it needs a project plan, it will not happen.

Four weeks, about three hours each
WeekGoalWhat you actually doMinimum roleDone when
Week 1Trustworthy numbers on the items that matterRank by annual usage value, pick 20-40 A items, count them, correct the record the same dayUser (adjust stock)Every A item matches the shelf
Week 2A real trigger on every A itemAverage daily usage, measured lead time, buffer, entered as the item's Low Stock At; Max Capacity only where the shelf has a real physical limitUser (edit items)Every A item has a Low Stock At you can explain
Week 3Consumption recorded at the point of issueReader where stock leaves, labels on unmarked items, roles set, two people shown the adjust flowAdmin (roles, locations)Someone else can issue stock and the count follows
Week 4The system tells you instead of you checkingTurn on Low Stock and Out of Stock alerts, set recipients on each device, clear the first burst, recount five random A items, take a backupAny role for alerts on their own device; Owner or Admin to manage teammates or devicesAn alert fired, someone else actioned it, the recount matched

After that: a monthly A-item count and threshold review, a quarterly B review, and a re-measure of lead time whenever a supplier changes. If the week-4 recounts do not match, do not add more items — go back to week 3 and find the consumption path nobody is recording.

The printable checklist

  • Rank items by annual usage value (units × unit cost), not by price.
  • Cut the A list at roughly 80% of value; keep it under 40 items.
  • Add a short "stops-the-job" list for cheap but critical parts.
  • Count every A item and correct the record the same day.
  • Measure real lead time in working days from the last five orders per A item.
  • Compute buffer = (longest − average lead time) × average daily usage.
  • Compute trigger = average daily usage × lead time + buffer; round up.
  • Enter the trigger as that item's Low Stock At.
  • Name the owner of every open order; the trigger cannot see inbound stock.
  • Put a scanner where stock physically leaves, not at the desk.
  • Turn on Low Stock and Out of Stock alerts; set recipients on each device.
  • Give every alert a named owner and one next action.
  • Recount five A items monthly; if they miss, fix recording before thresholds.
  • Take a backup once the rollout is done.

How Stockout helps

You bring the numbers. The app holds them, watches them, and tells you the moment one crosses the threshold you set.

  • One live status per item out of five — Out of Stock, Low Stock, In Stock, Near Capacity, Max Capacity — driven by the per-item Low Stock At, Near Capacity At and Max Capacity values you set.
  • Five Inventory stat tiles (Total Products, Low, Out, Near Capacity, Max Capacity) that filter the list when you tap one.
  • Four independently toggleable, edge-triggered alert types, with email on every platform and push notifications on Android.
  • Barcode scanning by Android camera, or by a USB or Bluetooth keyboard-wedge reader on Windows and the web, adding or removing stock in one tap.
  • One cloud account across Windows, Android and any browser, offline-first on the apps, with changes appearing on teammates' devices within seconds.
  • Owner, Admin, User and Viewer roles, enforced server-side.
  • A one-file JSON backup that restores by merging on ID.

Stockout does not compute reorder points or safety stock, does not store supplier lead time, and does not raise purchase orders.

Stockout is one plan at $12 per device per month, with a two-device minimum and a 30-day free trial. Every feature is included.

FAQ

Questions, answered

Far more than the part. Price the event with five buckets: the gross margin you lost on the order you could not fill, the premium you paid for rush freight over your normal rate, the labor that stood idle while someone chased the part, the extra cost of the substitute you fitted instead, and the cost of the return trip or rework. A concrete example: a two-person crew stopped for 90 minutes at a $65 loaded hourly rate is $195, a $48 next-day freight premium, and a return trip of one hour plus 35 miles at $0.70 a mile is $89.50 — $332.50 for a part that cost $90. Multiply your per-event figure by how many times it happened in the last 90 days, then by four — which undercounts slightly — to get an annual number you can take to a decision.

Test it before you change anything. Pick the ten items you use most, count them physically, and compare with your record. Record accuracy is the number of items that matched exactly divided by the number you counted — count by item, not by unit, because “close” is not a match. If more than one of ten is wrong, tuning reorder thresholds is wasted effort: the trigger would be comparing against a number that is already false. Fix counting and recording first, get your fastest-moving items to 95% or better, and only then set triggers.

No. Stockout has no reorder point field, no safety stock field, and it does not store or suggest either. It has exactly one reorder-related input: a per-item “Low Stock At” threshold in the item editor that you set yourself. You do the arithmetic — average daily usage multiplied by your measured lead time, plus a buffer — and enter the result. From then on the item reads Low Stock as soon as quantity hits or drops under that number, and a Low Stock alert can fire on the crossing. It also does not track supplier lead time, minimum order quantities, or supplier pricing, so keep those records yourself.

Enough to cover the variation you can actually measure, on the items where a stockout is expensive. The simplest defensible starting point is to cover supplier lateness: take the longest lead time you have observed, subtract the average, and multiply by average daily usage. If the last five orders took 9, 11, 12, 14 and 19 working days, the average is 13 and the longest is 19; at 0.96 units a day that is (19 − 13) × 0.96 = 5.76, rounded up to 6 units. That handles a late supplier but not a demand spike — for the full treatment with service levels and demand variability, see the reorder point and safety stock guide.

Yes, through threshold alerts. There are four independently toggleable types — Low Stock, Out of Stock, Near Capacity and Full Capacity. They are edge-triggered: one alert fires at the moment a change newly crosses a threshold, so an item that is already low does not keep re-alerting, and there is no scheduled digest or weekly summary. Out of Stock takes priority over Low Stock on the way down. Email alerts work on every platform; push notifications are the Android app only, where a background job can raise them even with the app closed. Email recipients are entered in Settings as a comma-separated list and are saved per device or browser rather than synced, so set them on each device that should send, and alerts only cover the location that device is currently set to.

Record consumption at the moment and place it happens, and make that recording take about two seconds. In practice that means a scanner where stock physically leaves the shelf: a phone camera on Android, or a USB or Bluetooth reader in keyboard-wedge mode on Windows and in the browser. A scan finds the item by SKU and adds or removes stock in one tap. Two things to watch in Stockout specifically: an adjustment can never take a quantity below zero, so an over-removal stops at zero and quietly under-records; and in the web app, editing an item's quantity in the item editor writes no stock movement and raises no alert, so use the Adjust sheet whenever you want the change recorded.

Stop finding out you are out

Set a low-stock threshold on every item that matters and let Stockout tell you before the shelf is empty.