How I built a real-time inventory system for a small shop
Stock, reorders, and alerts for Northwind's side shop — Sheets does it well enough.
By Awadesh Madhogaria · Published Sep 22, 2025
Northwind runs a small side shop — around 80 SKUs out of one location. The inventory “system” started as a spreadsheet someone updated by hand, which meant it was wrong by the afternoon. A hand-kept stock sheet has one fatal flaw: it is only correct at the moment someone last touched it.
For us that meant the on-hand numbers drifted out of date within hours of each sale, reordering happened when a shelf looked empty rather than when it was due, and we tended to discover we were out of something only when a customer asked for it. Running out of a popular item is a real cost — a lost sale and a customer who might not come back. But buying a proper inventory platform for 80 SKUs would have been absurd. We did not need warehouse software; we needed numbers that updated themselves and a tap on the shoulder when stock ran low. So I built the smallest thing that actually works.
How it works
The entire system is two sheets and about 60 lines of script, with no custom UI
and nothing new for the team to learn. There is an Inventory sheet with sku,
name, onHand, reorderAt, and supplier; a webhook from Shopify; and a
daily script. Sales update stock automatically, and restocking is the one thing
a human still does:
- A customer buys something in the Shopify shop.
- Shopify fires a webhook to my Apps Script web app with the order’s line items.
- The script finds each SKU in the
Inventorysheet and decrementsonHand. - Once a day, a separate script scans every row.
- Any item where
onHandis belowreorderAtgets collected into a low-stock alert — see Build a low-stock reorder alert system. - That alert names the item and its supplier, so reordering is a quick email.
The one manual step is restocking itself: when stock physically arrives, the
accountant edits onHand straight in the sheet. No special screen — just a
number in a cell.
The limits, and why it still works
This is deliberately not a scalable system, and it is worth being honest about that. It will not handle multiple warehouses, because there is one location and the model assumes it. It does not track stock in transit or do demand forecasting. If the shop grows past a single location, the right move is to buy a real inventory tool, not to bolt more script onto this one.
For 80 SKUs in one shop, though, it is genuinely fine — and it cost nothing. On-hand numbers are now correct in real time rather than “as of this morning”, reorders are triggered by data instead of by a shelf looking sparse, and the whole thing is small enough that anyone can read it and the accountant can edit it directly.
The takeaway
Match the tool to the size of the problem. A spreadsheet plus a webhook plus a daily script is not a compromise at 80 SKUs — it is the correct answer. Buy the big system when you actually have the big problem.