A par level is the quantity of an item you want on hand, set in the unit you count. When a count shows you below par, you order the difference. For a cafe, a workable par is your average daily usage multiplied by the days between deliveries, plus a small buffer for a busy weekend.
Nearly every Saturday stockout I've had traced back to a par level someone set once, in the winter, by guessing.
What a par level actually is
A par is a target. "Par 12 cartons of oat milk" means: when I place an order, I want to end up with twelve cartons on the shelf. If the count says four, I order eight.
That framing changes what you do with the number. You're not waiting for a trigger to fire the way a reorder point works. You count on a schedule, subtract from the target, and order the gap. Every item with a par produces an order quantity on its own, which is the whole point of setting them.
Your storage capacity is a ceiling on a par, not the par itself. And your vendor rep's suggestion is a par optimized for case volume, which is their job and not yours.
Pars live in the item's count unit, so it's whatever you'd say out loud during a count: cartons, jugs, bags, sleeves.
How to set a par from real usage
The standard operator approach, and the one we use, is:
Par = (average daily usage × days between deliveries) + safety buffer
That's a widely used operator formula rather than a published industry standard, and you should treat it as a starting point that your own numbers will correct within a month or two.
The quantities are the part that won't transfer. We go through about 30 gallons of whole milk a week at Stella. A smaller shop might need half that, and a high-volume operation several times more. Par levels scale with the size of the shop, which is why the formula travels and the numbers don't.
Working it through with oat milk. Say four weeks of counts and invoices tell you the shop goes through 63 cartons a month, which is 2.25 a day. Your distributor delivers Tuesdays and Fridays, so the longest stretch you have to cover is Friday to Tuesday: four days.
- 2.25 × 4 days = 9 cartons
- Safety buffer, roughly a day and a half of cover: 3 cartons
- Par: 12 cartons
Then leave it alone for a month and watch. If you never dropped below six, the buffer is too fat and you're paying for it in fridge space and spoilage risk. If you hit zero on a Sunday, either the buffer is too thin or your daily average is hiding a weekend spike, which is the next section.
On where that daily usage number comes from: guess it once, then stop guessing. Two consecutive counts plus the invoices in between give you actual usage for that stretch, which is a real number rather than a feeling. The mechanics are in the coffee shop inventory guide.
Do this for the twenty or thirty items that matter and skip the rest. Cinnamon shakers don't need a par. Milk, alternative milks, espresso, cups, lids, sleeves, syrups, and whatever your best-selling pastry is: that list covers most of the money and nearly all of the emergencies.
Day-of-week variation: the weekend problem
A single average par assumes every day looks the same. In a cafe they emphatically don't.
Our Saturday is a different shop from our Tuesday: bigger drinks, more iced, more oat milk, more pastry, and a rush that lands in a ninety-minute block instead of spreading across the morning. Average the two into one number and you get a par that's too high for Monday and too low for Friday. Both problems at once, which feels unfair and is.
Two ways to handle it.
The blunt version: set the par to cover the busiest stretch and accept carrying more inventory mid-week. Fine for things that keep, like cups, syrups, and whole bean coffee.
The better version for perishables: set a different par for each day of the week. In ShelfCount that's a per-item switch, and if you turn it on you fill in all seven days. The below-par list and the suggested order then use today's par in your shop's timezone, so the Friday order tops you up to the Friday number and the Monday order doesn't. Setup is in the purchase order guide.
You only need this on a handful of items. Ours are the milks and the pastry. Everything else does fine on one number.
The perishability constraint: why you can't just pad the par
The obvious fix for running out is to raise every par. For a hardware store that works fine. For a cafe it quietly costs you money, and here's why.
Oat milk arrives with a date on it. Whole milk arrives with a shorter one. Once a par exceeds what you'll sell before that date, the extra stops being safety stock and becomes future waste. You've traded a loud problem for a quiet one.
So a perishable par has a ceiling a shelf-stable par doesn't: the days of cover you hold have to stay comfortably under the item's usable shelf life after delivery.
If milk gives you ten days from delivery and your par holds twelve days of cover, you're going to pour some of it down the drain, and no amount of rotation discipline changes that arithmetic. When a perishable par keeps running out and you can't raise it, the answer is a third delivery day, or splitting the order, or a vendor who'll do smaller drops.
Your waste log is where over-padding shows up. If spoilage on an item keeps appearing in the same week every month, look at the par before you look at the staff. We've raised a par to fix stockouts and created a spoilage problem within two weeks, more than once.
There's a cash side too. Every extra carton in the walk-in is money sitting still, and when your average ticket is a few dollars that adds up faster than people expect. To see what one of those cartons costs you per drink, the recipe cost calculator does the pack-size math with no signup, and the food cost calculator handles the whole-period version.
Reviewing pars seasonally
Pars go stale. Ours are wrong at least twice a year, in predictable ways.
The iced switchover is the big one. When it turns warm here, iced drinks jump, which means more milk per drink, cups in a different size, more cold brew, and hot-cup inventory sitting around. That's a different drink mix, not a small adjustment.
Seasonal menu items are the sneaky one. A drink that runs for eight weeks needs pars set on the first two weeks of actual sales, not on last year's. Then it needs them taken back down when the promotion ends, which is the step everyone forgets. Dead syrup bottles in the back are the fossil record of a seasonal par nobody reset.
School and office rhythms matter if a campus or a big employer is near you. Your year has terms in it. Ours does.
Vendor changes hit everything at once. A new distributor with a different delivery schedule changes every par that depends on the gap between deliveries. Same if your existing vendor drops a delivery day.
A quarterly pass is enough for most shops. Look at the items where you either ran out or threw things away, fix those, leave the rest alone. Chasing every par every quarter is how the habit dies.
From par level to purchase order
The reason to keep pars accurate is that they turn a finished count into an order you can just look over and send.
Here's the loop in practice. Someone counts a location or one vendor's items and submits it. That count becomes your on-hand. Anything sitting under its par shows up on the below-par list with the on-hand, the par, and a suggested quantity to top it back up. Open a new purchase order for that vendor and those lines are already there.
A few details keep the suggestion from being useless:
- Suggested quantities round to whole packs and respect each item's minimum order quantity. You can't order 3.4 cases of anything, so it doesn't offer to.
- Lines come out in the shopping route order you set per vendor, so whoever fills the order works down the aisle instead of hunting.
- If the order lands under the vendor's dollar minimum, you get stopped rather than surprised, with the option to place it anyway.
- Routine vendors can send automatically when a count of their items is submitted. It's per vendor and off by default; our milk vendor is on it. An auto-created order that comes out under the vendor's minimum gets held as a draft and emailed to managers instead of going out short, so someone tops it up and sends it.
- If everything is at or above par, it says so and creates nothing. No phantom orders.
None of it works without current counts. A par compared against a two-week-old on-hand number is a wrong answer arriving confidently.
When you still run out
You'll still run out. When it happens, work out which of four things broke:
- The par was too low. Real usage grew and the number didn't. Most common by a wide margin, and the easiest to fix.
- The count was stale or wrong. Somebody left a line blank instead of entering zero, so the item never appeared as below par. Blank means "not counted," zero means "empty," and that difference is the single biggest source of bad on-hand numbers (counting inventory covers the rest of the rules).
- The lead time changed. A vendor moved a delivery day, or a holiday shifted the week, and your par now covers a gap that got longer.
- The vendor short-shipped. Your order was right, the delivery wasn't. This is what receipt scanning is for: what actually arrived gets checked against what you ordered, reviewed by a person, and reconciled.
Three of those get fixed by a number. The fourth gets fixed by a phone call.
How par levels connect to counting and COGS
Counting on its own tells you what you spent last week. Pars turn that same count into next week's order, which is the part that saves anyone time.
The wider cafe picture, including drink costing, modifiers like oat milk and extra shots, and theoretical versus actual COGS, is on the coffee shops page. If you're doing all of this in a sheet right now, the honest comparison of where that holds up is on the spreadsheets page. Plenty of shops are fine on a sheet for a good while.
Setting pars on your real items takes about an afternoon and the 14-day trial is long enough to see whether the suggested orders come out sensible. Pricing is a single flat number, published on the page.