Menu cost model
Cost every ingredient, recipe and menu item, match your sales to your menu, and see your food cost and which dishes earn their place.
The menu cost model works out what each dish on your menu costs you to make and what it earns you at the price you charge. You enter your ingredients as you buy them, build your recipes and dishes from them, and it does the arithmetic from there.
It is built from three things:
- An ingredient is something you buy, in packs: a 40 lb case of pork shoulder, a bag of shredded cheese. From what one pack costs and how much it holds, the model works out what one pound, ounce or each costs. That is the unit cost.
- A recipe is a batch you make from ingredients and from other recipes, such as carnitas or salsa. It has a cooked yield and a serving size, so the model knows what one serving costs.
- A menu item is a dish you sell, built from recipes and ingredients. What its lines add up to is its plate cost.
Your food cost is the plate cost as a share of the menu price, and your gross profit is the menu price minus the plate cost. A dish that costs a quarter of its price to make has a food cost of 25%.
Before you begin
- Access. The cost model is switched on account by account while it is in beta. Once it is on, Costs appears in your sidebar.
- A connected point of sale, for the sales side. Your sales, item names and menu prices come from Square, read only. You can add ingredients, recipes and dishes without one, but the sales figures, POS mapping, Menu matrix and Pricing all need it.
- Your ingredient prices. A supplier invoice, a price list or the costing spreadsheet you already keep. The more ingredients are priced, the more dishes can be costed.
Find your way around
Open Costs in the sidebar. An empty account starts on a page headed "Know what every plate actually costs." with a Start setup button. After that, the tabs are:
- Overview: your headline figures and a Do next list of what to fix first.
- Ingredients: everything you buy, with its pack, its price and its unit cost.
- Recipes: your batches, with their yield and what one serving costs.
- Menu items: every dish, with its price, its cost, its food cost against your target and what it earned.
- POS mapping: where you match what your point of sale calls each item to the dish in your cost model.
- Menu matrix: every dish placed by how well it sells and how much it earns.
- Pricing: what each dish's price history shows, and a suggested next price.
Set up your cost model
The setup walks you through the three jobs that get your first dish costed. Your progress saves as you go, and you can leave with Back to Costs and pick up where you stopped.
- On the Overview, press Start setup. The setup opens as Set up your cost model, with its steps listed down the side.
- Connect your POS. Press Connect Square and approve read only access when Square asks. Approving takes you back to your sales dashboard, and your setup is saved. Your first sales take a little while to reach the cost model.
- Add ingredient prices. Choose how your prices come in: Upload a spreadsheet to paste or drop your cost sheet (see Import a cost sheet), or Add them one at a time to open the ingredient list. Snap invoices is marked Soon and is not available yet. The What you'll get panel shows your top seller's menu price, plate cost, food cost and gross profit as the prices land.
- Cost your top seller. The step asks "What goes into the" followed by your best-selling dish. Press Cost the followed by its name to open it and add what goes on the plate (see Cost a dish).
- Press Continue to move on from a step, and Done. See my costs at the end.
You can move on from a step without finishing it. The list down the side shows Skipped beside it, and it shows as done as soon as the work is there, however you got to it.
Set up your cost model
- Connect your POS
- 2Add ingredient prices
- 3Cost your top seller
Progress saves as you go.
Step 2 of 3
How should ingredient prices come in?
Snap invoicesSoon
Photograph a supplier invoice.
Not available yet.
Upload a spreadsheet
We read cost workbooks.
Paste rows from a spreadsheet
Drop cells here. Columns match automatically and duplicate names merge.
Add them one at a time
Open the ingredient list
What you'll get
Your top seller
Breakfast Burrito
- Menu price
- $12.50
- Plate cost
- $3.62
- Food cost
- 29.0%
- Gross profit
- $8.88
412 sold in 90 days.
Add ingredients and their prices
Each ingredient is priced by the pack, the way you buy it.
- In Costs, open Ingredients and press New ingredient.
- Type the Name and, if you like, a Category.
- Under Pack, name what you buy (such as case or bag). Under Holds, type how much one pack holds, and under Costed in, pick the unit you measure it in when you cook.
- Type the First pack price (optional), then press Create ingredient.
The new row shows its pack (for example "40 lb case"), its Pack price and the Unit cost worked out from them. The units you can cost in are ounces, pounds, grams and kilograms; teaspoons, tablespoons, fluid ounces, cups, quarts and gallons; and each.
Ingredients
5 ingredients · 1 needs a price
To change a price, click the ingredient's name. In its panel you can change the Pack price, record the Supplier, and press See price history to see every price it has had. Prices are dated: each one applies from its Effective date, and the cost model keeps the old ones, so you can look back at what a dish cost on an earlier date.
The panel also holds two switches for ingredients that are not food you pay for in the ordinary way:
- Turn off Counts as food cost for anything that is not food, like cleaning supplies. It is never costed into a plate, so it never needs a price, and the list marks it not food.
- Turn on Free for something that costs nothing on purpose, such as water or house stock. It counts as zero, which is different from not being priced yet.
An ingredient with no price is marked no price and shows a dash where its cost would be. A dash in the cost model always means "we do not know yet", never zero. Costs are rounded up to the nearest cent, so nothing real ever shows as free.
If a recipe measures an ingredient by volume and you buy it by weight (cups of cheese from a bag sold by the pound), the model needs to know how much a cup weighs. Fill in Density (optional) on the ingredient, or that line stays uncosted.
If one location pays a different price for an ingredient, that location can have its own price. The price history marks it as a Location price, and that location uses it instead of your usual price.
Import a cost sheet
If you already keep your ingredient costs in a spreadsheet, you can bring them all in at once instead of typing them.
- In Costs, open Ingredients and press Import CSV. (In the setup, the Upload a spreadsheet tile does the same thing.)
- Copy the rows from your spreadsheet and paste them into the box, or press Choose a file and pick a CSV file. Excel files cannot be read directly: in Excel, choose Save As and pick CSV, or copy the cells and paste them.
- In Map your spreadsheet, check what each of Your column Becomes: Name, Category, Pack price, Pack size and units, Pack size, Unit, What you buy (pack), Supplier, Density (oz per cup) or Notes. Set a column you do not need to Ignore. A column of unit costs can be set to Skip. We derive unit cost., because the model works the unit cost out from the pack.
- Tick the options that fit your sheet: The first row names the columns, Add a price to names I already have, and Treat one pack as one each when there is no pack size. Rows with no pack size are left out unless you tick that last one.
- Press Import, followed by the number of ingredients. Duplicate names merge into one ingredient.
The import adds ingredients and their prices. Recipes and dishes are built in the cost model itself. If your list is longer than one import can take, the screen tells you to split it and paste the rest after.
Answer the questions an import raises
A spreadsheet often leaves things unclear, and the cost model would rather ask than guess. Anything it was not sure about becomes an open question, such as:
- an ingredient with a price but no record of where you buy it ("what do you pay for this pack, and where?");
- a pack size worked out from a typed unit cost that did not divide evenly ("how many really come in one pack?");
- a pack the import treated as one each because your sheet gave no pack size;
- the same name listed more than once at different prices ("Which one do you pay?").
The questions are listed under Open questions on the ingredient screen and on the item they concern, and the Overview counts them in its Do next list as Answer followed by the number of questions from your spreadsheet. Each one shows the evidence and the choices. Press Resolve to answer it, or Not now to come back to it later. When there is nothing left, the panel says Nothing needs your answer right now.
Build recipes
A recipe is anything you make in a batch and use in more than one place: carnitas, rice, salsa. Building it once means every dish that uses it is costed from the same numbers.
- In Costs, open Recipes and press New recipe.
- Type its Name, then its Cooked yield (how much one batch makes) and its Serving size (how much one serving is), each with its unit. The number of servings in a batch is worked out from the two.
- Press Create and open.
- Add what goes into the batch with Add component. A component can be an ingredient or another recipe, so a burrito filling can use your salsa recipe.
- Press Save changes.
The recipe shows its Cost per serving. Under More yield settings you can record what goes in raw (Raw in) and say whether the batch shrinks as it cooks, like meat, grows, like rice and beans, or keeps the same weight. The screen tells you when a yield looks unusual for that kind of recipe.
A change to a recipe applies from the moment you save it.
Cost a dish
A dish is costed from what goes on the plate.
- In Costs, open Menu items and press + New item.
- Type its Name. A Menu price (optional) and a Target food cost (optional) can be set now or later.
- Press Create and open. The dish opens with its own panel.
- Under Built from, press Add component and pick the recipes and ingredients that go on the plate. Give each line its quantity and unit, such as 4 oz of carnitas or 1 tortilla.
- Press Save. The plate is recosted from its lines.
Each line shows what it adds to the plate, and recipes are marked SUB-RECIPE. The panel shows the dish's Food cost and Gross profit for one plate, and its gross profit over the recent window, measured from what your point of sale actually took in rather than from price times units.
If you have set a target, a green box shows the two ways to reach it: the price the dish would need to sell for at your target, and what the plate would have to cost at today's price.
Breakfast Burrito
What this plate costs against what it sells for in your POS, as of Oct 1, 2026.
Measured from your POS, not from price times units.
On Square as Breakfast Burrito.
At a 30% target this sells for $12.07, or trim the plate to $3.75.
Built from
- 1eaFlour Tortilla 12in$0.38
- 4ozCarnitasSUB-RECIPE$1.46
- 3ozScrambled EggsSUB-RECIPE$0.54
- 2ozPinto BeansSUB-RECIPE$0.21
- 1.5ozCheddar, Shredded$0.41
- 2ozPico de GalloSUB-RECIPE$0.36
- 1ozSalsa VerdeSUB-RECIPE$0.26
Add component
Line costs are as of this date. Edits recompute the plate on save.
A dish only gets sales once a name on your point of sale points at it. If none does yet, the panel says so and links to POS mapping. When one does, it names it, for example "On Square as Breakfast Burrito."
Set food cost targets
A target food cost is the share of a dish's price you are aiming to spend on its ingredients, such as 30%.
- In Costs, open Menu items and press Set targets.
- In Food-cost targets, type a Default target. It applies to every dish without its own.
- To aim differently for one kind of dish, type a target beside Target for that category.
- Check the Impact line, which says how many dishes land under the targets and how many go over, then press Apply targets.
To give one dish its own target, open it and type it under Target food cost. A dish's own target beats its category's, and a category's beats the default. Targets are percentages between 1 and 100.
On Menu items, the Food cost vs target column draws each dish's food cost against its target, and a dish that is over its target says so.
Menu prices and margins
A dish's Menu price comes from your point of sale, and you can also type one on the dish. Like ingredient prices, menu prices are dated: a new one applies from today. Where locations charge different prices, each dish is measured at the price of the location that sold it.
The Menu items table shows, for every dish: its Price, its plate Cost, its Food cost vs target, how many it Sold over the window you pick, and the Gross profit it brought in. A dash means a figure is missing, such as a dish with no recipe yet or no price.
Menu matrix places every dish that sold by two questions, does it sell well and does it earn well, into four groups: Stars sell well and earn well, Puzzles earn well but sell little, Plowhorses sell well but earn little, and Dogs do neither. A dish that is not placed shows what it is missing.
Pricing looks at each dish's price history in your sales and suggests a next step, with a What if card to try a different price and see how it might come out. Once you change a price, it watches the change and gives a verdict after a few weeks. Nothing on the Pricing tab changes a price for you.
Link your POS items to your menu
Your point of sale has its own names for what you sell, and they rarely match your recipes exactly. POS mapping is where you match each one to a dish once, so its sales count from then on.
- In Costs, open POS mapping. The Unmapped queue lists the names with no match yet, biggest sellers first.
- For each name, pick a dish in Match to a menu item and press Map it. If the dish is not in your cost model yet, press New item to create it from here.
- If a name is an extra that tops another dish, such as added cheese, press Add-on. An add-on needs its own menu item: mapping it onto the dish it tops would count that dish twice.
- If a name will never be a dish, such as a gift card or a staff meal, press Not a menu item. It moves to Ignored names, and its money stays in your POS total. Press Later to hide a name until you reload the page.
When several names clearly match dishes you already have, a banner offers Map all likely matches, and you can untick any you disagree with before it maps them.
Your matches are listed under Existing mappings, where Remove sends a name back to the queue. Un-ignore does the same for an ignored name. The bar at the top shows the share of your POS revenue that points at a dish.
Read your overview
The Overview is the page Costs opens on. Its headline figures are:
- Blended food cost: your food cost across everything you sold, weighted by what sold.
- Revenue costed: how much of your POS revenue that figure covers.
- Menu costed: how many of your dishes have a cost.
- Price freshness: how many of your ingredient prices are out of date.
Under them, Do next lists the jobs that would improve your numbers most, such as Price some ingredients, Map some POS items, Cost some menu items, Refresh some prices, or a count of items that sell below cost or are over target. Each opens the list of rows it is about, so you can fix them from there.
How a change ripples through
Everything in the cost model is worked out from the pieces below it, so one change moves everything that uses it:
- A new pack price changes that ingredient's unit cost.
- Every recipe that uses the ingredient is recosted, and so is every recipe that uses those recipes.
- Every dish built from them gets a new plate cost, food cost and gross profit.
- The Overview, Menu matrix and Pricing pick up the new figures.
Nothing has to be recalculated by hand, and there is no button to press. Because prices are dated, you can still see what a dish cost before the change by looking at an earlier date. Edits to a recipe or a dish apply from the moment you save.
To make a variation of something you already have, open it and press Duplicate. The copy opens unsaved, so you can rename it and change what differs.
If something goes wrong
A dish shows a dash instead of a cost. Something on its plate cannot be costed yet. The usual reasons are an ingredient with no price, a line with no quantity, or a line measured in a unit the ingredient cannot be converted to, such as cups of something bought by the pound with no density. Open the dish: each line says what it is missing.
A dish has no sales. No name on your point of sale points at it yet. Match one on POS mapping.
I cannot change a price. You are looking at an earlier date. Prices are entered as of today, so switch back to today.
My spreadsheet will not import. Only CSV, TSV and plain text files can be read. Save the sheet as CSV, or copy the cells and paste them into the box.