Why Your Coffee Shop Inventory Doesn't Match Your Sales

October 13, 2026 · Josh Mentrup

When a coffee shop's inventory does not match its sales, the cause is almost always one of five things: a modifier that does not change the deduction, a menu item with no recipe, waste nobody logged, a delivery recorded at the wrong quantity, or a count taken in the wrong unit. Test them in that order. The pattern of the gap, which items and in which direction, tells you where to start.

This post gives you a 10-minute check and then walks through each cause with worked numbers. All figures are examples to show the arithmetic and are not from Stella's books. If you have not yet seen how the two sides of the comparison are built, theoretical vs actual food cost covers it.

The 10-minute check

Before you chase any one cause, look at the shape of the problem. You need the gap per item, in dollars, for one week. If you have a usage variance report, it is the first screen. If you work in a spreadsheet, it is opening count plus deliveries minus closing count, compared to what your sales and recipes say you should have used.

Then ask four questions, in this order:

  1. Which items carry most of the dollars? Sort by dollar gap. Ignore the rest for now.
  2. Is it one ingredient or a family? Whole milk alone points to a different cause than whole milk, oat milk and half-and-half together.
  3. Which direction? Used more than your sales explain means something left that sales did not explain. Used less than your sales imply means the sales side is overstated, or counts and deliveries were recorded wrongly.
  4. Does it repeat or bounce? The same size gap every week is a recipe or process issue. A gap that flips sign from week to week usually means a count or delivery error.
What you seeLook at first
Whole milk used less than sold, oat milk used more, by similar volumesCause 1: modifier swaps
A new or renamed item with no cost at allCause 2: unmapped items
Small, steady over-use on milk and shotsCause 3: waste and remakes
Large one-week spike on a delivered itemCause 4: receiving and pack sizes
Gap flips between positive and negativeCause 5: counting units

Cause 1: modifier swaps

A swap changes what leaves the shelf, and your POS may not know. Most point-of-sale systems record "16 oz latte, oat" as one sale, and whether that deducts oat milk instead of whole milk depends on how the system and your recipes are set up. In many setups the base recipe deducts whole milk every time. Check your POS vendor's help pages for how it treats modifiers; I went through what that looks like on 50 lattes in Square recipes and modifiers.

Worked example. Over a week you sell 140 of the 12 fl oz milk size, and 40 of them are oat. The recipe uses 12 fl oz of milk.

  • Milk the system thinks was whole: 140 x 12 = 1,680 fl oz. The real whole milk is 100 x 12 = 1,200 fl oz.
  • Phantom whole milk in theoretical: 40 x 12 = 480 fl oz, which is 480 / 128 = 3.75 gallons. At $3.60 a gallon that is $13.50.
  • Oat milk used but never sold: 480 fl oz. In 32 fl oz cartons that is 480 / 32 = 15 cartons. At $4.50 each, $67.50.

The pattern is whole milk reading lower than your sales imply, oat reading higher, and the two roughly cancelling in volume. The dollars do not cancel, because oat costs more per ounce. The test: take your top three swap options and check whether each has a recipe effect that removes the base ingredient and adds the replacement. Fix the mapping, then re-run last week.

Cause 2: unmapped menu items

If an item has no recipe, it still sells, but nothing is deducted. The theoretical side is too low, so the gap looks too big. This happens when you add a seasonal drink, rename a size, or add a new variation in the POS and nobody updates the recipe.

Worked example. A seasonal latte sells 60 times in a week. It uses 10 fl oz of milk and 1 fl oz of syrup, and it was never mapped.

  • Milk: 60 x 10 = 600 fl oz, or 600 / 128 = 4.69 gallons. At $3.60, $16.88.
  • Syrup: 60 x 1 = 60 fl oz. A 750 mL bottle is about 25.4 fl oz and costs $9.50 in this example, so 60 / 25.4 = 2.36 bottles, and 2.36 x $9.50 = $22.44.
  • Total unexplained: $16.88 + $22.44 = $39.32.

A single unmapped drink produced a $39 gap in one week. The check is to open the list of sold items that have no recipe, sorted by units sold. ShelfCount keeps an unmapped list for this reason, and each POS has its own mapping page with the same process; the mapping guide walks through it. If you do this in a sheet, filter your POS export for items missing from your recipe tab.

Cause 3: waste nobody logged

Dial-in shots, remakes, milk that sat too long, a tray of pastries dropped. Each is small, and together they are a steady drag. They appear only on the actual side, because no sale rang for them.

Worked example. Five remakes a day, each wasting 9 fl oz of milk and one 18 g shot, for seven days.

  • Milk: 5 x 9 x 7 = 315 fl oz, or 315 / 128 = 2.46 gallons. At $3.60, $8.86.
  • Espresso: 5 x 7 = 35 shots x 18 g = 630 g. Beans at $16 a pound cost $16 / 453.6 = $0.03527 a gram, so 630 x $0.03527 = $22.22.
  • Weekly total: $8.86 + $22.22 = $31.08, or roughly $1,600 over 52 weeks.

Five remakes in a day is a normal cafe. The fix is to make logging take seconds so it actually happens. A waste log that records the item and quantity, or the remade drink, turns this from a mystery into a number. Run two weeks of logging and compare the gap before and after. If the milk gap shrinks by about the amount you logged, this was the cause.

Cause 4: receiving and pack sizes

Your actual usage depends on how much you believe arrived. If the record says one thing and the dock received another, every number downstream is off.

Worked example. You order 6 cases of milk, each case holding 4 gallons, which is 24 gallons. The vendor short-ships and sends 6 cases of 4 half-gallons, which is 12 gallons. Nobody updates the order. You opened the week with 9 gallons and closed with 5.

  • Real usage: 9 + 12 - 5 = 16 gallons.
  • Usage as recorded from the order: 9 + 24 - 5 = 28 gallons.
  • Phantom: 12 gallons, or 12 x $3.60 = $43.20.

That shows up as a spike on one item in one week, usually right after a delivery. Pack-size changes do the same thing more quietly: a case of 12 becomes a case of 10, and your cost per unit shifts without anyone seeing it.

The fix is to check the delivery when it arrives. Photograph the invoice and run it through receipt scanning on delivery day. That is where quantities and pack sizes get corrected, because you review every line before it changes anything, and nothing posts until you approve it. A correction made at the dock takes a minute. The same correction made at month end takes an afternoon, if you can still remember what came in.

Cause 5: counting in the wrong unit

A count is only as good as its unit. Milk is counted in gallons on one sheet and half-gallons on another. Beans are counted in bags, but the item is set up in pounds. A closing count of "8" can mean 8 pounds or 8 bags, and the arithmetic cannot tell.

Worked example. Beans are set up in pounds, and the bags are 5 lb. You have 8 bags on the shelf. Someone enters 8.

  • Real closing stock: 8 x 5 = 40 lb. Entered: 8 lb.
  • Understated by 32 lb. Actual usage reads 32 lb too high.
  • At $16 a pound, the phantom usage is 32 x $16 = $512.

Next week, someone counts it correctly, and the gap swings the other way. That sign flip is the signature of a unit error. Two habits prevent most of it. Count in the unit you buy, and use a sheet that lists items in shelf order with the unit printed next to each, which is what the count sheet builder produces. The counting guide covers full versus partial counts and how to handle open and sealed packs.

Fixing the one you find

Do not fix all five at once. Pick the cause the pattern pointed to and change one thing.

  1. Fix it. Correct the recipe effect, map the item, log the waste, correct the receipt, or fix the unit.
  2. Re-run last week. Apply the fix, then compare the gap. If it shrinks by about the amount your worked example predicted, you found it.
  3. Move to the next largest dollar line. Repeat.
  4. Keep the routine. Count on a fixed day, scan receipts on delivery day, log waste as it happens, and look at the report once a week.

Some gap will remain. Pours vary a little and counts have limits. What you want is a stable gap you understand, with a jump you can trace when one appears. A food cost calculator will tell you what a single drink should cost, which helps you check one recipe at a time.

Try it on your own counts

The demo loads a cafe with data in it, including a usage variance report, so you can see what the screens above look like before you connect anything. When you want it on your own numbers, start the trial (14 days; terms on the pricing page). If you are comparing tools first, best cafe inventory apps lays out the options by POS.

Frequently asked questions

Why does my coffee shop inventory not match my sales?

Usually one of five things: a modifier such as an oat swap is not changing what gets deducted, a menu item has no recipe, waste and remakes are not logged, a delivery was received at the wrong quantity or pack size, or an item was counted in the wrong unit. A 10-minute look at the pattern of the gap tells you which to test first.

How big a variance should I worry about?

Start with dollars rather than percent. A large percentage gap on a cheap item such as cinnamon is a few dollars. A smaller gap on milk or beans is real money. Compare each week to your own recent weeks rather than to a number from another shop.

Could someone be stealing from my cafe?

It is possible, and it is rarely the first explanation. Check recipes, waste, receiving and counting first. Theft is more plausible when the missing items are high value and easy to carry, such as packaged beans or bottled drinks, and the loss repeats on the same shifts.

How often should I recount to find a mismatch?

A full count at the same time each week gives you comparable periods. If one item looks wrong, a quick recount of just that item before the next delivery separates a counting error from a real loss.

The Count: one email a month on cafe food cost

One real number from my shop, one thing that moved food cost, and what changed in ShelfCount.

You’ll get one email to confirm. One email a month, unsubscribe in one click, and we never sell your address.

#inventory variance#coffee shop inventory#usage variance#receiving#waste#counting
Start your free trial