Theoretical food cost is what your sales say you should have used, calculated from your recipes. Actual food cost is what physically left your shelves, calculated from your counts and your deliveries. The distance between the two is the number most cafe owners never see, and it is where the money goes missing without leaving a trace on a receipt.
This post walks one week of milk and espresso through both calculations with example numbers. The figures are made up to show the arithmetic and are not from Stella's books.
The two numbers
Your point of sale knows what you sold. Your invoices know what you bought. Neither one knows what you used, so there are two different ways to arrive at it.
- Theoretical usage works forward from sales. If a 12 oz latte uses 9 fl oz of milk and you sold 180 of them, 1,620 fl oz of milk should be gone.
- Actual usage works backward from the shelf. What you had at the start, plus what came in, minus what you have at the end, is what disappeared.
If the recipes are right and everything was poured as written, both numbers agree. They almost never do, and the size of the difference, priced in dollars, is what tells you where to look.
This is also the one report a POS can't produce by itself. A POS has no closing count and no idea what the recipe says. You need an ingredient layer in between, which is the subject of the Square recipes and modifiers post.
Theoretical: recipes x sales
Theoretical usage per ingredient is the sum over every drink sold of (units sold x quantity per unit). Three requirements make that work:
- Every item you sell is mapped to a recipe.
- Modifiers change the recipe the way they change the drink (an oat swap removes whole milk and adds oat milk).
- Prep items, such as syrups, are costed through their own recipes.
If you skip any of them, the theoretical number silently shrinks and the gap looks bigger than it is. Sales that can't be mapped still count as sales, but they can't be priced. ShelfCount keeps an unmapped list for this reason and I try to keep it near zero. Square, Toast and Clover each have their own mappings page, and the mapping process is the same on all three. The mapping guide covers the screens.
Actual: opening + purchases - closing
Actual usage per ingredient is:
opening count + received during the period - closing count
Everything is in the same unit. Milk in gallons, beans in grams. Two points matter more than they look.
Counts have to be real. An estimated closing number turns the whole report into an estimate. The counts have to be full, covering every location where the item lives, because a count of the walk-in alone says nothing about the milk in the bar fridge. If you want to make counting quicker, the count sheet builder lays out a sheet in shelf order, and the counting guide covers full versus partial counts.
Purchases have to be what arrived. Use what was received, not what was ordered. A short delivery or a substituted pack size changes the answer. In ShelfCount the purchases side comes from closed purchase orders. Photographed invoices go through receipt scanning on delivery day, which is review-first: you check and correct what the invoice says, and nothing posts until you approve it.
A worked week at a cafe
An example cafe, one week, two ingredients. Start with milk.
Sales and recipes (all example figures):
| Drink | Sold | Milk per drink | Milk used |
|---|---|---|---|
| 12 oz latte | 180 | 9 fl oz | 1,620 fl oz |
| 16 oz latte | 140 | 12 fl oz | 1,680 fl oz |
| Cappuccino | 90 | 6 fl oz | 540 fl oz |
| Flat white | 60 | 7 fl oz | 420 fl oz |
| Steamer | 20 | 8 fl oz | 160 fl oz |
Theoretical milk: 1,620 + 1,680 + 540 + 420 + 160 = 4,420 fl oz. A gallon is 128 fl oz, so that is 4,420 / 128 = 34.53 gallons.
Actual milk: opened with 9 gallons, received 34, closed with 5. Actual = 9 + 34 - 5 = 38 gallons.
Variance: 38 - 34.53 = 3.47 gallons, or 3.47 / 34.53 = 10.0% over theoretical. At $3.60 a gallon that is $12.49.
Now espresso. Assume each of the 470 milk-based drinks above (180 + 140 + 90 + 60) takes one 18 g double, plus 130 americanos at 18 g each. That is 600 doubles x 18 g = 10,800 g of beans, or 10.8 kg.
Actual beans: opened with 9,000 g, received one 25 lb case (25 x 453.6 g = 11,340 g), closed with 8,200 g. Actual = 9,000 + 11,340 - 8,200 = 12,140 g.
Variance: 12,140 - 10,800 = 1,340 g, which is 1,340 / 10,800 = 12.4% over. Beans at $16 per pound is $16 / 453.6 = $0.0353 per gram, so the gap is 1,340 x $0.0353 = $47.27.
This week, two ingredients: $12.49 + $47.27 = $59.76. Over 52 weeks that is about $3,100, and a cafe has more than two ingredients. The dollar figure is the useful output. A 10% gap on milk is a small amount of money, and a 12% gap on beans is a bigger one, so beans get chased first.
Five usual causes
Once you have a priced variance, here is the order I check things in. Most of the gap comes from the first three.
- The recipe doesn't match the pour. Your recipe says 18 g and the grinder is dosing 19.5. Your recipe says 9 oz of milk and the baristas pour to the line in the pitcher, which is 10. Multiply a half-ounce by 140 drinks and the gap appears. Weigh a few drinks during a rush and compare.
- Waste that wasn't logged. Dial-in shots, remakes, steamed milk that sat too long, a dropped tray of pastries. Each is small and invisible. Logging them turns part of the mystery into a known number, and a waste log that takes a few seconds a use is the cheapest fix there is.
- Comps and staff drinks. If they are rung at zero they still show as sales and still count in theoretical. If they are poured without ringing anything, they appear only in the actual number.
- Receiving and counting errors. A case counted twice, a gallon count taken in the wrong unit, a pack size that changed on the invoice. These make the gap bounce around from week to week with no pattern. If the gap flips sign, suspect a count.
- Sales that weren't costed. A new drink with no recipe, a renamed size, a modifier that does nothing in the system. The theoretical side is too low, so the gap is too high. Clear the unmapped list before you chase anything else.
Theft is possible, and I'd still rank it behind all five. A pattern of unexplained loss on high-value, easily carried items such as bottled drinks or packaged beans is a reason to look. A gap on milk is almost never that.
What size gap is normal
I don't have a benchmark I'd cite. Numbers floating around online come from different kinds of restaurants, with different menus and different counting habits, and I haven't seen one that was measured on cafes with a method I could check. So I'd rather tell you how I read it.
- Your first report will look bad. The first run mostly measures how wrong your setup is: unmapped items, recipes written from memory, counts taken in a hurry. That is useful information about your setup, and says little about how well you run the shop.
- Watch dollars first, percent second. A 40% gap on cinnamon is a few dollars. A 6% gap on milk is real money.
- The trend matters more than any one week. After you fix the setup errors, a stable gap is your baseline and a jump is a signal.
- Compare to your own history. Your cafe's normal is the one that counts.
Running it every week
A report that takes an afternoon to build won't get run twice. The thing that makes this sustainable is a routine that costs very little.
- Count on a fixed day and time. Closing on Sunday works well, since the next week opens with the same number. Use a standing count sheet in the same order every time.
- Scan receipts on delivery day. Correct quantities when the delivery arrives, not at month end.
- Log waste as it happens.
- Open the variance report once a week. Start from the biggest dollar line and work down.
ShelfCount's usage variance report does the arithmetic above for every item: theoretical from your sales and recipes, actual from your two full counts and the closed purchase orders between them, priced and sorted so the largest dollar gap is first. It needs a submitted full count on each side of the period, and when an item can't be compared, it is listed with the reason rather than hidden. There is one plan, $50 a month flat. The pricing page has the details, and if you run a coffee shop the cafe page shows the whole loop.
If you want to run the numbers without any software first, the food cost calculator does the percentage side, and the spreadsheets comparison covers where a spreadsheet stops being enough. For setting how much to keep on hand once you know your real usage, the par level calculator is the next step.
To see the report before you connect anything, the demo loads a cafe with data in it. When you are ready to run it on your own counts, start the free trial (14 days; terms on the pricing page).