Prices, costs, and margins — why the same dish has three different numbers
Open three different screens in the admin app, look at the same dish, and you see three different numbers. The till says €13. The cost dashboard says €4.20. The recipe says €3.80. These are not three versions of “the price.” They are three different things, on three different tables, each answering a different question.
This page is for owners who want to understand their P&L by walking through one dish — a glass of Chianti — and seeing where every euro shows up.
What it does
There are four numbers attached to every dish you sell. Each one lives in a different place because each one answers a different question.
| The number | The question it answers | Where it lives | Who reads it |
|---|---|---|---|
| The menu price | What do we charge the customer? | The till — alongside size tiers (glass / bottle / half-portion) | Cashier, public menu, customer assistant |
| The ingredient cost | What did the raw ingredients of one plate cost us? | The kitchen — the recipe rolls up the cost of every ingredient it uses | Cost dashboard, owner |
| The acquisition cost | What did we pay our supplier for the raw material? | The pantry — saved each time you receive a delivery or update the supplier price list | Inventory dashboard, owner |
| The gross margin | What’s left after the cost of ingredients? | Derived — menu price minus ingredient cost, computed every time you open the report | Cost dashboard, owner |
There is no fifth number called “the cost of the dish.” That phrase is ambiguous and the system intentionally refuses to fold these four into one. Different conversations need different numbers.
How to use it
A glass of Chianti — every number, end to end
Marco buys a case of Chianti Classico from his wine supplier. Six bottles, €70 invoice. Each bottle holds five glasses. Let’s walk through the numbers.
The pantry — what Marco paid.
- Inventory item: Chianti Classico Riserva 2022.
- Acquisition cost: €11.67 per bottle (€70 ÷ 6 bottles).
- Per-glass acquisition cost: €2.33 per glass (€11.67 ÷ 5 glasses).
- This is the only place the supplier invoice number lives. Nothing else in the system knows about €70 except the pantry.
The kitchen — what one glass costs to produce.
- Wine bottles don’t have a separate recipe (no production step). The “kitchen” cost is the same as the pantry cost: €2.33 per glass.
- For a dish that is produced from a recipe (a pizza, a risotto), the kitchen cost rolls up from every ingredient in the recipe, including labour-adjacent things like the dough batch already being made. Wine skips this step.
The till — what the customer pays.
- POS item: Chianti Classico — by the glass.
- Sized prices: glass €13, full bottle €60.
- The customer-facing menu reads this number directly.
- This is the only place the menu price lives. The pantry doesn’t know it; the kitchen doesn’t know it.
The gross margin — what’s left.
- Per glass: €13 − €2.33 = €10.67 gross margin (82% margin).
- The cost dashboard computes this every time you load the page. Nothing is stored — the formula re-runs from the live till price and the live pantry cost.
- If you raise the menu price to €14 tomorrow, the dashboard reflects the new margin immediately. If the supplier raises their price next month, the dashboard reflects the new cost immediately.
The rule that keeps these numbers honest
The system never stores a margin. It stores a price (on the till) and a cost (on the pantry), and computes the margin every time you ask.
This is why the cost dashboard always reflects today’s reality, not last quarter’s snapshot. A supplier price hike updates the margin without a single page-refresh in the menu. A menu price change updates the margin without re-running any report.
The other side of this rule: if the cost dashboard looks wrong, the bug is in the till (menu price) or the pantry (acquisition cost) — not in the dashboard itself. Always trace back to the room that owns the field.
Why some dishes look more profitable than they are
The four numbers above are the gross version. Two adjustments belong on top, and the system surfaces them in the right place when it can.
Cost freeze (the snapshot) — when a batch is produced (e.g. a Sunday-night ragù made for the week), the system records the cost of that batch at the moment of production and never changes it. If beef prices go up Tuesday, the ragù portions you serve Monday-through-Sunday still show their original cost. This keeps the cost-of-goods-sold number stable for accounting. The pantry shows the new cost going forward; old batches keep their old cost. See Cost freeze in the glossary.
Labour and overhead — not in the system today. The €10.67 margin on the Chianti is food cost margin, not net profit. Server hours, electricity, rent, the cost of writing the menu — none of these are deducted from the per-glass margin. The cost dashboard’s “margin” column is purposely narrow: only ingredients in, only menu price out. Add labour and overhead in your accounting; the operational app stays focused on the kitchen.
Worked examples
-
🍷 High-margin wine — Chianti glass, €13 price, €2.33 cost, 82% margin. Wine and spirits typically run 70-85% gross margin. This is why beverages drive the bottom line.
-
🍕 A pizza — Pizza Margherita, €13 price, €2.20 ingredient cost (dough, tomato, mozzarella, basil, olive oil, oven gas not included), 83% margin on paper. But: labour to make it, fire to bake it, server to deliver it — net margin is much lower. The kitchen cost on the recipe is only the ingredients.
-
🍅 A low-margin dish that’s worth keeping — Bistecca Fiorentina, €58 price, €22 ingredient cost (the beef alone). 62% margin. Lower than the pizza in percentage, but the absolute euros (€36) are higher. The cost dashboard shows both — percent and absolute — for this reason.
-
⚠️ A loss-leader on purpose — Bread for the table, €4 price, €1.10 cost, 72% margin. Looks fine. But you serve it free with every meal for tables of 4+; the €4 only shows when you sell extra bread. The system doesn’t know about the freebie context — you do. Some margins are intentional bait.
-
🎁 An event package — Wedding tasting menu, €120/person. The “ingredient cost” depends on the dishes the chef serves that night, which is custom per booking. The events room has its own pricing model (per person, per night, with a deposit and a cancellation policy). The dish-level numbers above don’t apply directly — the event lives in a different room. See the events area.
What you can change, and where
If you want to raise a menu price: open the POS item, change the price. The change is immediate; the public menu picks it up on next refresh.
If you want to change a supplier’s price: open the inventory item, edit the cost. The cost dashboard reflects the new margin immediately for every dish that uses the ingredient.
If you want to find your worst-margin dish: open the cost dashboard. The dishes are sorted by margin percentage or absolute margin (toggle).
If you want to see the impact of switching a supplier: change the supplier on the inventory item and watch the cost dashboard recalculate. If 12 dishes use that ingredient, 12 margins update.
If you want to add labour or overhead: not in the operational app. That’s an accounting question — see bitethemenu-invoicing.
Related features
- Where your information lives — five places, one restaurant — the rooms that hold each number
- From idea to till — how a dish moves through the system — when each number first appears
- Cost freeze, FIFO, prep batches — how batch cost is snapshotted
- Selling the same dish in two sizes — when a recipe carries two portion sizes and when it splits in two
- Beverage Margins and Food Margins — the two dashboards where the per-tier numbers from this page surface side-by-side