Self-Hosting Grocy on a Raspberry Pi: Shop Consumables, Grocery Inventory, and Shopping Lists
If your shop's fastener bins, resin bottles, and filament spools are tracked the same way most people track them — by looking at the shelf and guessing — Grocy is worth running on a spare Raspberry Pi. It's a self-hosted inventory and household management app built around barcode scanning, expiration date tracking, and "stock down when consumed" workflows, and while it's usually pitched at grocery and pantry management, those same mechanics map cleanly onto shop consumables: resin bottles with real shelf lives, sandpaper and filter cartridges you reorder on a schedule, and small hardware you buy in bulk and don't want to run out of mid-project. This is a different tool and workflow than running a generic spreadsheet-style database like NocoDB or Baserow for inventory — Grocy's value is its purpose-built barcode scan-in/scan-out loop and expiration tracking, not a blank table you design yourself.
Why Grocy Over a Generic Database
A low-code database tool gives you a blank slate to build your own inventory schema — flexible, but it means designing fields, forms, and views yourself before it's useful. Grocy already has the data model for this task: a "stock" entity for each product with a quantity, a configurable minimum stock level, a best-before/expiration date, and a barcode lookup, plus a built-in shopping list that auto-populates with anything that's dropped below its minimum threshold. For shop consumables specifically — things you buy in bulk, use steadily, and genuinely run out of — that scan-and-decrement workflow is a better fit than a database you'd otherwise spend an afternoon designing from scratch.
Installing Grocy on a Raspberry Pi
Grocy ships as a Docker image, which is the simplest route on a Pi 4 or Pi 5 running Raspberry Pi OS or DietPi with Docker and Docker Compose installed. A minimal compose file exposes the web UI on a port of your choosing and persists its SQLite database and uploaded files to a mounted volume on the Pi's storage — point that volume at an external SSD rather than the SD card if you're running this long-term, since a database that's written to on every scan benefits from more reliable storage than a cheap SD card provides.
StepWhat You're DoingNotes 1. Install Docker + ComposeBase runtime for the Grocy containerStandard convenience script works fine on Pi OS 2. Pull and run the Grocy imagedocker-compose up -dMount a persistent volume for /config 3. Reverse proxy (optional)Nginx or Caddy for a clean local hostname / HTTPSNot required for LAN-only use 4. First-run setupCreate admin account, set default locationsCreate a "Shop" location separate from "Kitchen" if you'll track bothSetting Up Shop Consumables as Products
Grocy's product model expects a purchase unit, a stock unit, a minimum stock level, and optionally a barcode — set these up per consumable the way you'd actually buy and use it. Resin, for example, is purchased by the bottle but consumed by the milliliter if you want granular tracking, or simply by the bottle if that's precise enough for your needs; either works, but pick one convention per product category and stick to it so your stock levels stay meaningful. Set minimum stock levels to whatever triggers a reorder with comfortable lead time — for something you order online with a few days' shipping, that's enough stock to cover that wait plus a buffer, not "when the last one is empty."
Barcode Scanning Without Buying Special Hardware
Grocy's barcode workflow works with any USB barcode scanner (these show up as a standard USB-HID keyboard device and need no special driver) or through its mobile-friendly web UI using a phone's camera via the barcode scanning companion app many users pair with it. For shop supplies that don't have a retail barcode — bulk hardware, bagged fasteners, raw filament spools bought loose — print your own barcode or QR labels with a label printer (the same kind used elsewhere on this site for parts bin labeling) and assign them as a custom barcode in Grocy's product settings, so scan-in and scan-out work identically for retail-boxed and shop-only items.
Expiration Tracking for Shelf-Life Materials
Resin, certain adhesives, and some finishing chemicals genuinely expire or degrade past a usable shelf life, and Grocy's best-before date tracking (originally built for food) works identically for these — enter the shelf life when you add stock, and the dashboard surfaces anything approaching its date so you use older bottles first instead of discovering a resin bottle has gone cloudy and unusable a year after you forgot about it on the back shelf.
The Shopping List and Reorder Workflow
Once minimum stock levels are set, Grocy's shopping list auto-populates with anything below threshold, and you can check it from your phone before a hardware store run or before placing an online order, rather than mentally reconstructing what you're low on while standing in an aisle. It's a small workflow change, but it's the actual payoff of doing this at all — the inventory tracking only matters if it changes what you buy and when.
Grocy isn't trying to be a general-purpose database, and that's exactly why it fits this use case well: the barcode-scan, minimum-stock, shopping-list loop is already built, tested, and far faster to get useful than designing an equivalent schema yourself in a blank low-code table.