Theoretical food cost is what a restaurant's recipes and sales report say the period should have cost. Actual food cost is what the inventory counts say it did cost. The gap between them is food cost variance, and for an owner it names where product left the building without a sale: portions, waste, receiving, comps, production loss, theft.
The two numbers that should match, and never do
Every restaurant that costs its recipes ends up holding two numbers for the same period. One is built forwards from the menu: what the till sold, times what each dish is supposed to cost. The other is built backwards from the shelves: what you had, plus what you bought, minus what is still there. If nothing had gone wrong they would agree. They never do — and that gap is the one place where the distance between the plan and the kitchen becomes a specific amount of money attached to a specific ingredient.
Food cost variance — actual food cost minus theoretical food cost for the same period, expressed both in currency and in percentage points of food sales.
Step zero: the counting mistakes that manufacture a variance
Three checks before a single conversation with a single member of staff. Skipping them is how kitchens get blamed for something that turned out to be a spreadsheet.
Units that do not match
The recipe says grams, the invoice says kilograms, the count sheet says "boxes". One unit mismatch on one expensive line out-shouts every genuine cause on this page. Fix it in the recipe card and the purchasing record, not with a correction factor downstream.
A recipe card that stopped being true
The kitchen changed the garnish in spring and nobody re-costed the dish. From that day the theoretical number describes a restaurant you no longer run, and the variance it produces is fictional.
A cut-off that differs on the two sides
Sales are read to midnight Sunday; the closing count happens Monday, after the delivery was put away. Now that delivery sits in your closing stock while its sales sit in the next period. Both halves must be cut on the same clock.
Theoretical food cost: what the recipes cannot know
Theoretical food cost — the sum, across everything sold in the period, of each dish's plate cost multiplied by the portions the till recorded.
Theoretical food cost = Σ (Plate cost × Units sold)
Plate cost— costed value of one portion by its recipe card, corrected for yield, PLN per portion;Units sold— portions of that dish sold in the period, from the till;Σ— summed across every dish that sold anything.
Worked as an arithmetic illustration, not a benchmark: 2 400 burgers at 11.00 PLN of ingredients, 1 600 pastas at 8.50 and 700 salmon plates at 24.00 give 26 400 + 13 600 + 16 800 = 56 800 PLN.
How the plate cost is built belongs to the food cost percentage page, which owns price and menu mix. What the recipes cannot know is everything between the delivery van and the plate: they assume perfect portions, nothing dropped, burnt, given away or carried out of the back door. That assumption is what makes the number useful — it is the cost of a restaurant where nothing goes wrong.
Actual food cost: what the count measures
Actual food cost — opening inventory plus purchases minus closing inventory, at your booking prices, over the same period as the sales.
Actual food cost = Opening inventory + Purchases − Closing inventory − Transfers out + Transfers in − Staff meals
Opening inventory— counted value of stock at the start of the period, PLN;Purchases— everything received and booked in during the period, PLN;Closing inventory— counted value of stock at the end, PLN;Transfers out— product sent from the kitchen to the bar or to another site, PLN;Transfers in— product received back from the bar or from another site, PLN;Staff meals— food eaten by your own crew, PLN.
The last three terms are the ones kitchens leave out, and leaving them out inflates the variance you are about to read. The reason is definitional rather than bookkeeping fussiness. The theoretical figure is built only from dishes that were sold, so the only product it can possibly contain is product that a till line accounts for. Citrus sent over to the bar, cream borrowed back from it, the crew eating their own dinner — every one of those left your stock and every one of them lands in the raw count, and not a single one of them matches a sold dish. Leave them in, and you are subtracting two numbers built from different populations: the theoretical side never had the chance to include them, so every zloty of them surfaces as a leak that does not exist. This is the same adjusted numerator used by the food cost percentage page, and the two pages have to agree or one of them is wrong.
Worked on the same period, raw stock movement first: 42 000 + 58 400 − 39 200 = 61 200 PLN. Then the three adjustments — 2 180 PLN went out to the bar, 540 PLN came back from it, staff meals accounted for 1 460 PLN: 61 200 − 2 180 + 540 − 1 460 = 58 100 PLN.
This formula measures product that left your stock; it does not know why. Sold, spilled, comped, binned, carried off — all of it lands in the same number, which is exactly why comparing it against the theoretical figure is worth doing. The mechanics of counting belong to inventory turnover and par levels: that page is how to count, this one is what the count turned out to say.
Food cost variance: in money and in percentage points
Food cost variance (PLN) = Actual food cost − Theoretical food cost
Food cost variance (p.p.) = (Actual food cost ÷ Net food sales − Theoretical food cost ÷ Net food sales) × 100
Net food sales— food revenue for the period, net of VAT, discounts and voided bills, PLN;- the money form is what you act on; the percentage-point form is what you compare, because it survives one period being busier than the last.
Worked: 58 100 − 56 800 = 1 300 PLN. In percentage points, 32.278 − 31.556 = 0.72 p.p. — percentage points, not percent, because a difference between two percentages always is. The two agree by construction, since 1 300 ÷ 180 000 × 100 is the same 0.72. If yours disagree, one of them is using a different sales figure — usually gross against net.
Now compare that with the 4 400 PLN the unadjusted count suggested, and the 2.44 p.p. that went with it. Of that 4 400, some 3 100 was transfers and staff meals sitting in a numerator that had no business holding them. The smaller number is the honest one, and it is worth more than the larger one: 1 300 PLN is something you can go and find, while 4 400 PLN would have sent you hunting for 3 100 PLN that never left the building — and would have pointed that hunt at your crew. If correcting your own numerator shrinks your variance to almost nothing, that is the finding. It is not a prompt to go looking for a way to make it large again.
The sign convention here is identical at every level: actual minus theoretical. Positive means more product left than the recipes account for, which is money out. Negative means less left than the recipes account for, and the FAQ below says what to do with that.
Split it before you explain it: usage variance and price variance
Most kitchens skip this step, and skipping it is how a supplier's price rise gets discussed as if it were a staff problem. Your variance holds two unrelated things: more product was consumed than the recipes account for, and the product cost more than the card says. They separate exactly.
Each row below is a component of the row above
Usage variance = (Actual usage − Theoretical usage) × Standard price
Price variance = (Actual price − Standard price) × Actual usage
Actual usage— quantity that left stock, in the ingredient's own unit (kg, l, pcs);Theoretical usage— quantity the recipes and sales say should have left, same unit;Standard price— the price the recipe card is costed at, PLN per unit;Actual price— what you actually paid per unit, weighted across deliveries, PLN per unit.
The split leaves no remainder. On salmon, standard price 96.00 PLN/kg, actual weighted price 103.00, theoretical usage 126.0 kg, actual usage 138.0 kg: usage variance = (138.0 − 126.0) × 96.00 = 1 152 PLN; price variance = (103.00 − 96.00) × 138.0 = 966 PLN; together 2 118 PLN, and directly 138.0 × 103.00 − 126.0 × 96.00 = 2 118 PLN.
Only the first number belongs to the operational causes below. The 966 is your buying price drifting away from your cards, and no amount of portion control touches it — that is a re-costing job and a supplier conversation, which is where what-if scenarios and external signals sit.
Noise or signal? A method instead of a number
A claim circulates in this industry: that there is a level of variance below which everything is fine and above which you have a problem. This page prints no such level — not as a figure, and not in words either, because a threshold spelled out in words is still a threshold and gets quoted as one. Crunchtime, whose definitions of theoretical and actual food cost are quoted across the sector and are quoted here too, names no target threshold at all. The most-cited benchmark compilation traces its own numbers to other software vendors' blogs, and the genuine primary source of restaurant operating ratios is a paid report that is not publicly available. The familiar threshold has no institution, no ministry and no peer-reviewed study behind it, so printing it here would be inventing a number and giving it a source-shaped label.
The replacement is a method, and it is better anyway, because an acceptable variance depends on your menu, your unit sizes and how carefully you count.
- Take the last several closed periods whose counts you trust — same cut-off rules, same cards, no menu change in the middle.
- Compute the variance in percentage points for each, with the formula above.
- Look at the middle of those numbers and at how far they spread around it. That spread is your restaurant's counting noise, and your honest baseline.
- A period inside the spread tells you nothing new. A period outside it, or a steady drift of the middle across several periods, is your signal.
The first useful reading is the second one, because a single number has nothing to be compared against. Which screen these comparisons live on day to day is the subject of our article on the numbers an owner actually looks at, not of this page.
Eurostat env_wasfw and the PROM strategy disagree about Polish gastronomy: 6.3 % against 1.17 %
Your variance is your own number, but it is worth knowing what is actually measured about food leaving Polish kitchens — and where the official picture disagrees with itself.
| What is measured | Poland, reference year 2023 | Source |
|---|---|---|
| All food waste collected in the country | 4 651 137 t, 127 kg per inhabitant | Eurostat, dataset env_wasfw, updated 18.02.2026 |
| Of that, "restaurants and food services" | 293 062 t, 8 kg per inhabitant, about 6.3 % of the national total | Eurostat, dataset env_wasfw, updated 18.02.2026 |
| Households, for scale | 2 561 260 t, 70 kg per inhabitant | Eurostat, dataset env_wasfw, updated 18.02.2026 |
| Gastronomy's share of losses along the agri-food chain | 1.17 % | PROM Strategy, KOWR and the Polish Food Banks Federation, Warsaw 2021 |
Eurostat's comes from waste reporting under the waste statistics framework, allocated to an activity aggregate that also carries accommodation and other services. The Polish PROM figure is a sample-based estimate of losses along the agri-food chain, and that document warns about itself that for transport, retail and gastronomy the estimates may be understated because the research sample was too small. Showing both is the honest move; picking the convenient one is not.
That final clause is Eurostat's own and it belongs inside the quote: the restaurants line is precisely the one its publisher flags as unsettled. None of these is a target for your kitchen and none is a variance threshold — they show that even the measured base rate is contested, which is why your own count is the only number with authority over your own kitchen.
Where the product physically leaves: five points from the door to the bin
Product enters at one door and is supposed to leave through the pass, sold. Everywhere else it leaves, your variance grows.
1. The delivery door
Short weight, wrong grade, a case counted rather than weighed, a credit note promised and never issued, a substitute booked at the price of the item it replaced. All of it happens before the kitchen touches anything, and portion control will never see it.
2. The store, the fridge, the freezer
Product bought and then not used in time — over-ordering and spoilage are the same event separated by a few days. Rotation failures, a freezer left open, a case buried behind the new delivery.
3. Prep
Trim, peel, bone: the yield of the whole vegetable against the yield your card assumed. This leak looks like theft in the data and is not. It is systematic, it repeats at the same rate daily, and it is fixed by re-measuring yield, not by watching anybody.
4. The line and the plate
The scoop that is not the scoop the recipe was written for. Over-portioning has its own section below.
5. The pass and the bin
Remakes, dropped plates, a dish sent back, comps handed over by a manager, staff meals cooked off the same stock. All real cost, none of it a sale — and unless it is recorded, it looks in the data exactly like theft.
Those five points are why one monthly percentage is such a poor tool. One and the same variance in percentage points can be a supplier at the door, a scoop on the line, or an unwritten staff-meal policy, and the fix for each sits somewhere else in the building.
Portions: the commonest cause and the cheapest test
For one service, weigh the plated dish. Not the ingredient — the finished plate, ten times, on the pass, against the card. If plates come out consistently heavier you do not have a discipline problem, you have a tooling problem: nobody was given a scoop of the right size, or the recipe was written for a portion that does not fit the plate you now use.
Note what that measures: a staff survey about why food is thrown away, largely on the guest's side of the pass. It is not a variance threshold — it is a reason to look at portion size early rather than late.
Receiving, waste and comps: losses that must be recorded before you compare
Shrinkage — inventory that disappears without a corresponding sale, for any reason at all.
Comp / void — a dish that was produced and then given away or cancelled: a real cost that never appears in sales.
Receiving is the only leak entirely outside the kitchen's control and entirely inside your paperwork's control. Check that goods are weighed rather than counted where weight is what you pay for; that the invoice price is the agreed price; that a substitution is booked as the item that arrived, not the item ordered; that credit notes land in the period they belong to. A receiving error has a signature — it shows up as price variance, or as purchases that do not match what the store holds, rather than as usage variance. If your usage variance is small but your total is not, look at the door first. Supplier and receiving routines are the practical side of it, and how much you should be receiving at all belongs to demand forecasting.
Spoilage is predictable from ordering patterns and is the one leak that ordering better actually removes. Production loss — shrink and evaporation in cooking, a batch overcooked, a sauce split — is a real cost of running a kitchen and belongs in your yield figures, not in a discussion about honesty. Whatever is binned gets written down with the ingredient, the quantity and one word of reason; a waste sheet nobody fills in is worse than none, because it manufactures confidence that waste has been ruled out.
Comps are arithmetic, not policy. A comped dish consumed real product, so it sits inside actual food cost; it produced no sale, so it sits outside theoretical food cost. Left alone, every comp inflates your variance by the full plate cost and points at nobody in particular. Either add comped and staff-meal portions into the units-sold count feeding the theoretical calculation, or subtract their plate cost from actual before comparing — pick one and keep it. Unrecorded generosity is indistinguishable from theft in every dataset ever built.
Theft: separating it from the rest without accusing anyone
Last, deliberately. Not because it does not happen, but because the causes above are more common, cheaper to fix, and do not cost you a member of staff who turned out to be innocent.
Theft has a shape the others do not. Portion drift is smooth and spreads across every dish using the ingredient. Yield error is constant and proportional to volume. Spoilage clusters around slow-moving lines and around dates. Receiving error attaches to a supplier and a delivery day. What is left after those four are ruled out looks different: it concentrates on high-value, portable, easily resold items; it does not scale with covers; it clusters on particular shifts rather than spreading evenly; and it tends to sit on items whose recipe and yield are too simple for measurement error to explain the gap.
Rule out the other four on paper first, before anyone talks to anyone. If the gap survives all four you have a short list of ingredients, a short list of shifts and a factual basis — a very different conversation from a suspicion.
Item-level variance: where to look when the total looks almost fine
A period total can look unremarkable while two ingredients underneath it bleed quietly. Averages hide exactly that.
Item variance = (Actual usage − Theoretical usage) × Unit cost
Actual usage— the ingredient's opening stock plus receipts minus closing stock, in its own unit;Theoretical usage— over every dish containing it, portions sold times quantity per portion, same unit;Unit cost— the standard price the recipe is costed at, PLN per unit;- positive means product left without a sale, the same reading as at period level.
Item-level variance — the same comparison of theoretical against actual usage, run per ingredient or per menu item instead of per period total.
That order of subtraction is the whole point: item and period variance use the identical subtraction, so they cannot contradict each other, and at standard prices the item variances add up exactly to the period usage variance. If yours do not add up, something is missing from your ingredient list rather than from your kitchen.
| Item | Theoretical usage | Actual usage | Difference in units | Difference in money |
|---|---|---|---|---|
| Salmon fillet | 126.0 kg | 138.0 kg | +12.0 kg | +1 152 PLN |
| House sauce | 96.0 kg | 78.0 kg | −18.0 kg | −720 PLN |
| your line |
Salmon: twelve kilos left without a sale, and at that unit cost it is worth a walk to the fridge. Sauce: the counts say the kitchen used less than the cards claim — not money found, but a sign that the card overstates the portion, or the sauce is batched at a yield nobody re-measured, or the count was wrong. Both rows are signals; only one is a loss. Sort the list by the money column, largest first, and work down: the money almost always concentrates in a small number of lines rather than spreading evenly, and how few, in your restaurant, only your own data can say.
What to do with the variance you found, in order
- Run step zero again on the two or three biggest lines only. Units, card currency, cut-off. Most large single-line variances die here.
- Split each of those lines into usage and price. Whatever turns out to be price is a re-costing and supplier task and leaves this list.
- For what remains, walk the five points in order: door, store, prep, line, pass. Each has a one-day test, and the tests are cheap.
- Fix the recording first and the behaviour second. Until waste sheets, comp records and credit notes exist, every other conclusion is a guess wearing a number.
- Re-run the same comparison on the next closed period with nothing else changed, and see whether that specific line moved. One line, one change, one measurement.
| Cause | How it looks in the data | One-day test | What fixes it | Who owns it |
|---|---|---|---|---|
| Over-portioning | Smooth, across every dish using the ingredient | Weigh ten plated dishes on the pass | Correct scoop, re-written portion on the card | Head chef |
| Spoilage and over-ordering | Clusters on slow-moving and short-dated lines | Photograph one day's bin before it is emptied | Order quantities, rotation, par levels | Kitchen manager |
| Receiving error | Shows as price variance, or stock that does not match purchases | Weigh every delivery for one day | Weighing at the door, credit-note discipline | Whoever signs for goods |
| Comps, voids, staff meals | Whole plate costs missing from sales | Reconcile one day's comps against the till | One written policy, recorded every time | Floor manager |
| Production loss and trim | Constant, proportional to volume | Weigh input and output on one batch | Re-measured yield in the recipe card | Head chef |
| Theft | Concentrated on high-value portable items, does not scale with covers | Only after the five above are ruled out | A conversation based on a specific list | Owner |
The table carries no percentages on purpose: the size of each cause is your measurement, not something a page can hand you. And the last row stays last on purpose.
Frequently asked questions
What is food cost variance?
Food cost variance is the difference between what your recipes and sales say a period should have cost and what your inventory counts say it did cost. It is written as actual minus theoretical, so a positive result means more product left your stock than the recipes account for. Read it both as money, which tells you whether it is worth chasing, and as percentage points of food sales, which let you compare one period against another.
How do you calculate theoretical food cost?
Multiply each dish's plate cost by the portions the till recorded for it in the period, then add those products across the whole menu. The plate cost must be the current recipe card corrected for yield, and the sales must cover exactly the same period as the inventory counts. If the cards have not been re-checked since the last menu change, the result describes a restaurant you no longer run.
What variance is considered normal in a restaurant?
There is no published threshold we can trace to an institution, a statistical office or a peer-reviewed study, so this page does not print one: the figures that circulate come from software vendors quoting one another, and the source most often cited for the underlying definitions names no target at all. Build your own baseline instead — compute the variance in percentage points for several closed periods you trust, and treat the spread of those numbers as your restaurant's noise. Anything outside that spread, or a steady drift of the middle, is your signal.
How do I tell over-portioning from theft?
By shape rather than by suspicion. Over-portioning is smooth, repeats at roughly the same rate every service, spreads across every dish using the ingredient and scales with covers. Theft concentrates on high-value portable items, clusters on particular shifts and does not scale with covers. Rule out units, card currency, yield, spoilage and receiving on paper before anyone talks to anyone, because those explanations are far more common.
Do comped dishes belong in theoretical or in actual food cost?
They are inside actual food cost automatically, because a comped dish consumed real product that left your stock, and outside theoretical food cost, because they produced no sale for the till to report. Untreated, each comp inflates your variance by the full plate cost. Either add comped and staff-meal portions into the units-sold figure feeding the theoretical calculation, or subtract their plate cost from actual before comparing — pick one method and keep it.
How often should theoretical and actual be compared?
As often as you take a full count you trust, because the comparison is only as good as the weaker of its two halves. Between full counts, a short daily check on your most expensive lines gives an early reading without a full inventory, and it is the same subtraction on a shorter list. What matters more than the interval is that the interval stays the same, since a baseline built from periods of different lengths compares nothing to nothing.
Can variance be negative, and what does that mean?
Yes, and the sign convention is identical at both levels, so it reads the same way for one ingredient and for a whole period: actual minus theoretical. A negative result means the counts say less product left than the recipes say should have left. That is not money found. It usually means the card overstates the portion, the yield assumption is wrong, the closing count was overstated, or sales of that dish were recorded against something else. Treat a negative line as a signal about your data, not as a gain.
Compare your own theoretical and actual food cost on your own numbers: bring one closed period, your recipe cards and your count sheets, see what the gap is made of, and then repeat the exercise for the period before it — only two gaps side by side tell you whether this was a one-off incident or a standing leak. If that comparison should run by itself every period instead of by hand, that is what our decision engine, finance layer and forecasting are for, with results landing in dashboards and AI reports rather than in a spreadsheet nobody opens. The daily cycle in which the same error keeps returning is described in diet catering order changes, reading one number across several sites in managing a restaurant chain from one screen, and where this layer sits next to what you already run in CRM or ERP: which system layer comes next. Everything we publish for restaurant operators sits together on our restaurant hub.