Inventory

Why Your Coffee Shop Inventory Doesn't Match

Mark, founder of Parly·July 24, 2026·6 min read

The two numbers that are supposed to agree

It is Monday. You count oat milk on the bottom shelf of the reach-in and write down six cartons. The number in your head, or your sheet, or whatever tool you use, said there should be nine. Three cartons gone, and nobody on the schedule can tell you where.

Those three cartons are the gap between two numbers. One is what you counted: the physical cartons in front of you. The other is what you expected: last count, plus what got delivered, minus what your sales should have used. When those two agree, ordering is arithmetic. When they disagree, you are back to guessing, and the guessing is expensive in both directions.

So the real question is never "why is inventory hard." It is narrower and more useful: which of those two numbers is wrong? In a cafe, it is almost always the expected side, not the count. And the reason is not the one every guide online will hand you.

Why the restaurant answer does not fit a cafe

Search "why doesn't my inventory match" and you get one answer, repeated on every restaurant blog: theft, over-portioning, sloppy receiving, spoilage, staff meals logged as nothing. The standard restaurant inventory-variance guide (SynergySuite, accessed July 2026) opens exactly there and ranks employee theft and portion control at the top.

That answer is built for a kitchen. A full-service restaurant has expensive stock worth stealing, a prep station where a heavy hand on the scale costs real money, a walk-in full of things that spoil, and a crew of ten in the back. Interrogate the count in that building and theft and portioning genuinely belong near the top.

A cafe is a different shape. Sixty-odd items, most of them shelf-stable: cups, lids, beans, syrups, matcha. A couple of things that actually spoil, milk and pastries. A small team behind one bar, no prep crew in the back. Point the theft-first framing at that room and you end up eyeing your baristas over three cartons of oat milk when the leak was never in the room at all. It was in your data.

The mismatch your register never subtracted

Here is where a cafe's numbers actually drift. Your register recorded a sale: "iced matcha latte, oat milk, $6.75." That line is perfect sales data and zero inventory data, because what left your shelves was not an iced matcha latte. It was a scoop of matcha, a pour of oat milk, a cup, a lid, and a straw.

No register subtracts that on its own. Square's basic inventory, by its own product page (accessed July 2026), "only tracks finished goods." Its newer Square Recipes beta gets closer, but Square's own documentation (accessed July 2026) states plainly that recipes cannot be applied to modifiers. In a cafe, the modifier is the whole game. The money and the milk both move through the swap.

Run the recipe math. Forty-seven iced matcha lattes is 94 g of matcha, 564 oz of oat milk, and 47 cups. Now swap twelve of those to whole milk. The receipt total does not move a cent, but your oat number just dropped by twelve pours and your whole-milk number climbed. If your inventory math is driven off item sales and blind to the modifier, it never sees the swap. Do that every day for a week, and by Friday your expected number and your counted number are strangers. That is the mismatch, and it is a mapping problem, not a people problem. It is the same reason recipe costing starts with the recipe and the modifier, not the menu price, and the fuller version of the argument lives in what a POS can and cannot track for a cafe.

The bigger miss: when the recipe map itself is wrong

Map your modifiers and you close most of the gap. But the map itself can break, quietly, and this is the failure no recount will ever surface.

It happened at my own shop. Our computed usage for whole milk read 0.70 bottles a day. The real rate was 9.716. A fourteen-fold miss, sitting in the numbers, looking like a settled fact. The cause was not a bad model or a lazy count. A set of Square modifiers had been deleted, so a chunk of milk sales stopped decrementing anything. The sales were fine. The counts were honest. The map in the middle had a hole in it.

Notice what does not catch this. Counting more often does not catch it; the count was right the whole time. Watching your staff harder does not catch it; nobody did anything wrong. Stricter discipline makes the gap more visible and no more explainable. The only thing that catches a broken map is checking the map. That is the honest weakness of any recipe-driven system, mine included: it is powerful precisely because it computes usage for you, which means when the computation is wrong, it is wrong with total confidence. So the count and the computed number both stay on probation. When they split on one item, you check the map between them before you trust either.

The ordinary reasons, ranked for a cafe

None of this means the boring causes stopped mattering. They just bite a cafe in a different order than the restaurant guides list them. Ranked by how often they actually show up:

  1. Modifier-blind depletion. The oat swap your register never subtracted. By far the most common, and it hits every day.
  2. A broken or stale recipe map. The fourteen-fold kind. Rare, but it wrecks one item completely when it strikes.
  3. Inconsistent counting. Opened and unopened units counted as one, a skipped count on a busy day. Fixable with routine, covered in a practical counting guide.
  4. Spoilage and batch dumps. Milk that turned, drip brewed and poured out. Real, but usually small in a cafe, and worth measuring on its own rather than blaming for everything.
  5. Receiving errors. A case came up short, the wrong item got shelved. Occasional.
  6. Theft and untracked staff drinks. Last on the list, not first.

In a cafe, the top three are data hygiene and the bottom three are the physical world. It is almost always the data, rarely the room. The restaurant guides run that list upside down, and following them sends you eyeing the room while the data keeps drifting.

How to reconcile: count, deplete, compare

The fix is a loop, not a witch hunt. Three moves.

Count on a cadence, honestly. Three times a week covers a cafe: Monday, Wednesday, Friday. Record what you see, not what you expect to see. It does not have to eat the morning. A recent full count at my shop was 58 items in about 8.5 minutes on a phone, and my manager has run the last 26 of them, not me. The count is your ground truth, so keep it clean.

Deplete between counts by sales times recipe times modifier. Not item sales alone. Every ticket gets mapped to what it actually used, swaps included. That is the number that goes stale the moment a modifier is unmapped, so it is the number to distrust first.

Compare computed-remaining to your next count, per item. The gap is your variance. When it is small and steady across an item, that is your real waste baseline; name it and watch it. When it is large or shows up suddenly on one item, do not recount it three times and do not start grilling the closing shift. Open that item's recipe and check the map. Is the modifier wired? Did a recipe change last week? That is where the fourteen-fold miss hides, and it is the first place to look, not the last.

Pick your widest-variance item this week and check its recipe map before you check anyone's pockets.