AI & Data

When Your Cafe Inventory Spreadsheet Stops Working

Mark, founder of Parly·February 15, 2026·8 min read

The sheet is not the problem

Monday, 7 AM. You are in the back with your phone, the Google Sheet open, thumbing down the column for today's date. Whole milk: eight. Oat: three. Matcha: half a bag. You type each number into a cell the size of a grain of rice, scroll sideways to land on the right week, and try not to fat-finger last Wednesday's count. Twenty minutes later you have a fresh column. The sheet did its job. It held the count, it flagged two items in yellow, and it will be there again Wednesday.

I ran my own cafe on a sheet like that for a long time, so I want to be straight with you: it is a fine place to start. Tracking your stock in a Google Sheet beats not tracking it at all. The problem is never that the sheet is bad. The problem is that it answers one question well and a second question not at all, and most cafes cross from the first to the second without noticing the day it happened.

What a spreadsheet is genuinely good at

A grid is a snapshot. You count the shelf, you type the number, the cell holds it. For "how much do I have right now," that is honestly enough. Add a little conditional formatting and it will even shade whole milk red when it drops below your par. Some cafes never need a thing beyond that, and if that describes you, keep your money and close this tab. Most of the internet will not tell you that, because most of the internet is selling you the next tier.

The sheet holds up right until the question you are asking changes.

The exact day it stops working

Here is the line, and it is sharper than most people expect. A spreadsheet can hold what you have. It cannot compute what you used. And "used" is the number that runs everything downstream: what to reorder, what each drink costs to make, whether you run dry before the delivery lands.

Your Square already knows what you sold. What it does not know is that the iced matcha latte with oat that just rang up pulled a scoop of matcha, ten ounces of oat milk, a cup, and a lid off your shelves. Turning that sale back into ingredients, modifiers and all, is what "used" means. The register cannot see it. And a grid of typed-in counts cannot calculate it either, because to get there the sheet would have to read every sale, hold every recipe, apply every modifier swap, and subtract all of it item by item. No spreadsheet does that on its own. You would be hand-building a formula for every drink times every milk times every size, then re-checking the whole web every time you 86 a syrup or add a drink. That is not a hard spreadsheet. That is a spreadsheet you abandon by the second month.

So the day your sheet stops working is not a revenue figure and it is not your second location. It is the day your menu's real consumption moves into the modifiers, and a column of typed-in counts can no longer tell you what actually left the shelf. For the long version of why a single latte breaks item-level tracking, see what a POS can and cannot track for a cafe.

Four things a system does that a sheet structurally cannot

Not "does faster." Cannot. Each of these is a wall a grid runs into by its own design, no matter how many tabs and formulas you bolt on. If you are not at that wall yet, a working cafe inventory template for Google Sheets will carry you further than a blank grid.

It reads your Square, so "used" is calculated instead of typed. Once sales flow in on their own and a recipe database sits underneath them, consumption is arithmetic: today's sales times each recipe, adjusted for the modifier swaps, minus a waste buffer. You stop guessing how much oat milk you went through. As an illustration from my own shop, 47 iced matcha lattes sold works out to 94 grams of matcha, 564 ounces of oat milk, and 47 cups gone. Swap a dozen of those to whole milk and the oat number drops while the receipt total never moves. A spreadsheet cannot follow that, because it never saw the modifier. Connecting sales to counts is the piece that makes the rest possible. Worth adding: the read runs one direction only. A system like this reads your Square and never writes back to it, so it cannot touch your prices or place an order behind your back.

It turns the count into a supplier order timed to the cutoff. A grid has no idea that Odeko closes at 10:50 AM, that milk is next-day and only Monday through Saturday, or that matcha runs five to seven business days out. So it cannot look at your stock, your consumption, and each supplier's calendar and hand you an order grouped by supplier with the quantities already filled in. It can hold a reorder level in a cell; it cannot do the timing. You still make the final call and send it. You just start from a draft instead of from memory in the reach-in.

It remembers who counted what, and when. A spreadsheet cell has one value at a time. When your manager overwrites Monday's oat number, Monday's oat number is gone, with no trace of who changed it or why. That is the grid working as designed, and it is exactly why two people editing the same sheet on a busy morning ends in overwritten cells and an argument about which figure is current. A system records each count as its own session, stamped with a name and a time, and every correction is logged rather than painted over. When a number looks wrong three weeks later, you can actually see where it came from.

It answers a trend question without you building the pivot first. Your sheet has six months of counts in it. Which items waste the most? Which day of the week burns through the most milk? Is oat usage climbing or flat? The data is technically in there, buried across hundreds of cells, but pulling an answer means hand-building pivots and charts every single time, which is why nobody does it. A purpose-built count history already knows your sessions, your gaps, and your burn rate, so the question you would have to engineer in a sheet is just a screen.

Moving over without a leap of faith

The mistake is thinking you have to abandon the sheet on a Tuesday and trust something new by Wednesday. You do not. The move that actually sticks is phased, and you keep the sheet running the whole time until you believe the new numbers.

Start with the count. Import your item list from the spreadsheet, set your categories, units, and reorder levels, and do your next count in the new tool instead of the grid. This step alone is the biggest daily win, because the count stops being a fight with a tiny keyboard. At my shop a full count runs 58 items in about 8.5 minutes from a phone, one item at a time in the order I walk the room. Run the sheet in parallel for the first two weeks and check that the two match. If you want the counting discipline nailed down before anything else, start here.

Add your recipes. Enter your drinks with their ingredient quantities and their variants. It does not need to be perfect on day one. Do your top ten drinks and refine from there. Once the recipes are in, the used-versus-have math starts working, and you can finally see what each drink costs to make. If you have never costed one recipe end to end, do that first; it changes how you read the rest.

Connect your Square. Link the account so sales sync on their own through the day. Now you have all three pieces at once: the count for what you have, the recipes for what each drink uses, and the sales for what you sold. That is the point where consumption, ordering, and cost stop being three separate spreadsheets.

Then trust it slowly. For a few weeks, compare the suggested order to your gut. When they disagree, go find out why. Sometimes the numbers caught a drift you missed. Sometimes you know something they do not, a holiday weekend or a seasonal swing, and you override. Either way you are building the confidence to stop double-checking, which is the whole point.

When the sheet is still the right answer

I build an inventory tool, so read this next part knowing that. There is a real branch here where the honest answer is: stay on the sheet.

Stay if your menu is mostly plain. A shop selling bags of beans, bottled drinks, and a short list of no-swap drinks does not have much consumption hiding in modifiers, so the gap this whole article is about barely exists for you. Even Square's own recipe feature, which goes further than a spreadsheet, still "cannot be applied to modifiers or multi-variation items" (Square support article, accessed July 2026); if your drinks do not carry modifiers, that limit does not bite. Stay, too, if your counts already reconcile. If your paper number matches the shelf within reason and a stockout has never surprised you, you do not have the problem a system solves, and a new monthly bill will not hand you one.

But if your count and your fridge keep drifting apart, if your best sellers are the customizable ones, and if you are still piecing the order together from memory every few days, that is not a discipline failure. It is a tool that answers "what do I have" being asked to answer "what did I use," which it structurally cannot. That is the day the sheet stops working, and it has nothing to do with how big you have gotten.

So do not rebuild the spreadsheet with one more tab this week. Pull a week of your Square transactions, count how many of your drink tickets carry a modifier, and let that number decide whether your grid is still doing the job.