Coffee shop inventory management means counting what's actually on your shelves on a fixed schedule, recording it in the units you buy and use, then comparing that count against your sales to find what you really spent. For most cafes that's one full weekly count plus a short daily check on milk, beans, and cups.
I own Stella Coffee in Los Angeles. Everything below is how we run counts in our own shop, not a theory of how cafes should work. Some of it will map badly onto your bar layout and you should change it.
What to count in a coffee shop
The instinct is to count everything. Don't. A count sheet with 180 lines on it gets abandoned by the third week, and an abandoned count is worth less than a short one you actually finish.
Count the things that move fast, cost real money, or embarrass you when they run out:
- Milk and alternative milks: whole, non-fat, oat, almond, and whatever else your regulars have decided is non-negotiable. Usually the single biggest line in a cafe's food cost.
- Coffee: espresso beans, batch brew, decaf, retail bags.
- Syrups, sauces, and powders. Vanilla, the seasonal one, chocolate sauce, matcha.
- Cups, lids, sleeves, straws, bags. Packaging isn't food, but it leaves the building at the same rate as the drink inside it.
- Pastry and grab-and-go, if you buy it in rather than bake it.
- Tea, chai, cold brew concentrate, and anything else with a real per-unit cost.
Sanitizer tabs, cleaning supplies, and the box of napkins in the back can sit on a monthly sweep or come off the count sheet entirely. In ShelfCount that's a per-item toggle, so an item stays in your catalog and stays priced without appearing on every sheet.
Then split what's left by where it physically lives. Ours are grouped as the walk-in and under-counter fridges, the bar, and dry storage. Whoever counts the bar during a lull shouldn't be scrolling past walk-in items to do it.
How often to count
Weekly, with a full count monthly. Here's why.
A cafe turns milk two or three times a week. If your only count is on the last day of the month, the number you get describes an average of four weeks, one of which you've completely forgotten. You can't act on it. By the time you see that dairy cost jumped, the barista who was free-pouring a quarter jug into every cortado has done it four hundred more times.
A weekly count gives you a number small enough to explain. If dairy is off this week, you can usually name the week: the espresso machine went down Thursday, or you ran the iced latte special, or the new hire was on bar alone for two shifts.
On top of the weekly count, a handful of items get a daily eyeball. Not a formal count, just the closing barista writing down jugs of each milk, bags of espresso, and sleeves of cups. That's the list you order off on delivery mornings.
Two rules we drill into everyone.
Blank means "not counted," zero means "empty." If you're out of oat milk, type the zero. Skipping the line looks identical to never having reached that shelf, and the math treats it that way. This one distinction causes more wrong numbers than everything else combined.
Count in one sitting, on the day. ShelfCount expires an unsubmitted draft after 24 hours on purpose. A count sheet that sat overnight describes a shelf that no longer exists, and submitting it quietly poisons your usage numbers for the whole period. Scopes, drafts, and submitting are covered in the counting inventory guide.
One more thing that sounds trivial and isn't: put the count sheet in walk order, meaning the order you physically pass things as you move through the room. Ours starts at the walk-in door with milk, goes left along the shelf, ends at the cold brew kegs. It's the cheapest speed-up available, because nobody's walking back and forth hunting for the next line.
With the sheet in that order, our full count takes under 20 minutes. Two people, phones in hand. One caveat on that number: Stella carries more items than a lot of cafes do, so if your menu is shorter you should be beating us, not chasing us.
Units and pack sizes: buy in cases, count in units, cost per ounce
This is where most cafe inventory attempts fall apart.
Every item you handle has three different measurements attached to it:
| Measurement | What it means | Whole milk |
|---|---|---|
| Purchase unit | How the vendor sells it, and what the price on the invoice refers to | 1 case |
| Count unit | What you can see and count on the shelf | Gallon jugs |
| Recipe unit | How a drink actually consumes it | Fluid ounces |
The link between them is the pack size: 1 case → 4 gallon jugs → 128 fl oz each. Set that chain once and the arithmetic stops being your problem. A $24.00 case works out to about 4.7 cents per fluid ounce, so an 8 oz pour costs roughly 37 cents. Count 3 jugs on the shelf and you know what's sitting there in dollars, without converting anything in your head at 9pm.
The rule that keeps this honest: the cost you record is always the price of one purchase unit. If the invoice shows a case price, enter the case price. Don't helpfully divide it down to a per-jug number first, because then the pack chain divides it again and every drink built on that item quietly costs you a quarter of what it should. The items, units, and pack sizes article walks through the weirder cases.
The one that genuinely needs care is weight versus volume. If you buy a powder by the gram and your recipe measures it by the milliliter, there's no universal conversion. A milliliter of honey and a milliliter of cocoa powder don't weigh the same. ShelfCount asks for the weight-per-volume of that specific item and refuses to guess if you leave it blank, because a wrong guess there flows silently into every cost built on top of it.
Why cafes drift differently than restaurants
Restaurant inventory advice mostly assumes plates: a fixed recipe, a fixed portion, a line cook trained on a scale. Cafes break several of those assumptions at once.
Modifiers are half your menu. A 12 oz latte is really a dozen products wearing one name: oat milk or whole, one shot or two, three pumps of vanilla or none, to-go cup or for-here mug. Your POS records "Latte" with a stack of modifiers hanging off it, and every one of those modifiers moves inventory. If your costing only knows about the base drink, oat milk is invisible to your system and extremely visible on your invoice. That's why menu mapping matters more in a cafe than anywhere else: each POS item points at a recipe, and each modifier gets a real ingredient effect, so an oat milk substitution swaps the ingredient instead of just adding 80 cents to the ticket.
Milk waste is structural. Steaming pitchers get overfilled. A pitcher steamed for a drink that got remade is gone. Nobody's being careless; it's the shape of the job. What matters is knowing roughly how much of it there is, so you can tell normal steam-loss apart from a real problem.
Small baskets make everything look bigger. Dialing in a new bag costs you shots. Retail bags walk out at cost as staff perks and comps. A $3 comp on a $12 entrée is noise. A $3 comp in a shop with a $6 average ticket is your margin.
From counts to usage to food cost percentage
Once you have two counts and the invoices in between, you have everything you need.
Usage for a period, sometimes called your cost of goods sold, is:
Beginning inventory + purchases − ending inventory = COGS
And the percentage everyone actually quotes:
Food cost % = COGS ÷ food sales
That's the standard hospitality-accounting identity, and it's the same one the National Restaurant Association's operator surveys report against (NRA, "Restaurant operators kept food cost ratios in check in 2024," published 2025-09-10, accessed 2026-08-26).
With deliberately round made-up numbers so the arithmetic stays readable: start the week with $4,000 of inventory, buy $9,500, end the week with $3,700 on the shelf. You used $9,800. Against $31,000 of sales, that's 31.6%.
Two things people get wrong here. First, waste, comps, and staff drinks leave your inventory but never show up in sales, so they land entirely on the cost side. That's correct, and it's also why a waste log earns its keep: without one, spoiled milk and a barista giving away drinks look identical in your food cost. Second, use food sales in the denominator, not total revenue. Retail bean bags and merch carry a completely different cost ratio, and folding them in will flatter or wreck your number depending on which way your retail sells.
Since it's only fair to put our own number out: Stella averages somewhere in the 22 to 30% range across food and drink items, and it moves week to week with the mix. That's our menu at our volume, though. Where yours lands depends on what you sell and how much of it, so please don't treat mine as a target.
What number should you be aiming for?
Honest answer: nobody credible publishes a coffee-shop benchmark, and I'm not going to invent one.
What does exist is the NRA's 2024 operator data, where median food and non-alcohol beverage cost came in at 32.0% of sales for full-service restaurants and 32.4% for limited-service (same NRA source as above, accessed 2026-08-26). The NRA does survey a separate coffee-and-snack segment, but that breakout sits inside a paid report, so I can't quote it and neither can the blogs that confidently give you a cafe number. The 25–35% ranges you'll find on vendor sites are estimates citing each other.
Use your own history as the benchmark instead. Your first eight weeks of real counts will tell you more about your shop than any industry median, because your rent, your milk contract, and your drink mix are the things actually moving it.
If you want to run your own numbers before setting anything up, the food cost calculator does exactly this arithmetic in the browser, and the recipe cost calculator does the per-drink version. No signup, no email.
Theoretical vs actual: the number worth chasing
Everything above tells you what you spent. It doesn't tell you where it went.
For that you need two numbers side by side. Theoretical usage is what your sales say you should have used: every latte sold, multiplied by its recipe, added up. Actual usage is what the shelves say left the building. The gap between them is the interesting part.
A persistent gap on oat milk means over-pouring, unlogged waste, a recipe with the wrong pour size in it, or drinks leaving without being rung in. A gap on retail bags is usually staff perks nobody wrote down. A gap that shows up the week you changed suppliers usually means the new case has a different count in it and your pack size is stale.
This is why the full count matters. A variance report needs a clean bracket: a full count at the start, a full count at the end, and every invoice in between. Location and vendor counts are what you do during the week. The full count is what makes the math close.
Where a spreadsheet is genuinely fine
I'm not going to pretend a spreadsheet can't do this. Plenty of good shops run on one, and for a while we did too.
A spreadsheet holds up when you have maybe thirty or forty tracked items, one location, one person doing all the counting and all the ordering, and you're content to read your food cost monthly. That describes a lot of first-year shops. If it's you, build the sheet, take it seriously, and skip the software.
It stops holding up at fairly specific points. When a case price moves, every recipe containing that item is now wrong, including the prep recipes feeding other recipes, and in a sheet you find them by hand. Pack chains maintained manually, case to jug to ounce, item by item, are where sheets accumulate silent errors. Two people counting at once means one tab and one editor. Theoretical usage means matching every sold drink to a recipe with its modifiers, which is a data-entry job nobody sustains. And knowing what a case of oat milk cost eight months ago is genuinely useful, which is the first thing a sheet overwrites.
The honest version of that tradeoff, including where the sheet wins, is on the spreadsheets comparison page.
The other real comparison is against the incumbent software. MarketMan and MarginEdge do all of this and more, and they price for restaurant groups; there's a line-by-line look at MarketMan if you're weighing that. I built ShelfCount because I wanted the four features my own shop used without the rest of it. Worth saying plainly: multi-unit enterprise rollup reporting isn't something ShelfCount does yet. It's built for independents.
A weekly routine that survives a busy week
This is our actual cadence. Adjust the days to your delivery schedule.
- Sunday after close: full walk-in and dry storage count, in walk order, on a phone. Two people, done before the floors are mopped.
- Monday morning: look at what's below par, adjust the suggested order, send it. The par level and purchase order guide covers how the suggestion gets built.
- Delivery days: scan the invoice on arrival. Every price and pack-size change is reviewed and approved by a person before it touches a cost. Nothing auto-commits, deliberately: a misread digit would otherwise rewrite the cost of every drink containing that item.
- Every close: the short list. Milk, beans, cups. Thirty seconds.
- Month end: full count across all locations, then read the variance report and pick exactly one thing to fix.
That last part is the one that matters. A variance report producing eleven action items produces zero. Pick the biggest line, fix that, look again next month.
The cafe-specific version of the whole picture, including drink costing and modifier handling, lives on the coffee shops page. Par levels get their own treatment in par levels for cafes, since setting them properly is what turns all this counting into orders that arrive before you run out.
You can run the whole thing on your own shelves during the 14-day trial. Pricing is one flat number, published on the page, which in this category is apparently a differentiator.