Ingredients & Recipes
Tracking the raw materials you buy, building recipes that deduct them automatically when a dish sells, and reading the food cost that comes out.
10 min read · Updated 10 Sep 2026
On this page
- An ingredient is a product with a label
- The Ingredients page
- Marking products you already have
- Building a recipe
- Yield: how a batch becomes a serving
- Waste percentage
- What a sale actually deducts
- Food cost
- Ingredient consumption
- When a recipe stops working
- Availability worked out from a recipe
- Commissary batches
- Butchery and breaking down
- If the add-on lapses
- Where to go next
If you sell a dish, you do not sell a dish — you sell 250 g of pork, 30 ml of soy sauce and a cup of rice. Ingredients let you record the raw materials, and recipes let a single sale take them out of stock without anyone counting anything.
Two things here are priced differently, and it is worth being clear up front:
| Screen | Where | Needs an add-on? |
|---|---|---|
| Ingredients | Inventory → Ingredients | No. Free on every plan. |
| Compositions (recipes) | Inventory → Compositions | Yes — Recipe Costing |
Compositions need the Recipe Costing add-on (₱350 per branch each month), or any bundle that includes it. Tracking raw materials on the Ingredients page does not.
An ingredient is a product with a label
This is the single most misunderstood thing in the catalog, so read it before anything else.
There is no separate ingredients table. An ingredient is an ordinary product with the Ingredient / Raw Material box ticked. The tick does one thing: it files the item under Inventory → Ingredients instead of cluttering the sellable Products list. It is a label, not a type.
What follows from that:
- The same item can be an ingredient and a shelf item. A bottle of cooking oil you both cook with and sell over the counter is one product, ticked as an ingredient, still priced and still on the POS grid. That is normal, not a mistake — in real Kassly stores a large share of the items used in production are also sold.
- Ticking or unticking the box changes nothing else. It never touches the price, the stock, or whether the item shows in POS.
- Ingredients count toward the Free plan's 50-item limit, because they are products. See Adding products.
- Ingredients are the only products allowed to have no category and no selling price, which is why the ingredient form does not ask for either.
The Ingredients page
Open Inventory → Ingredients. The table shows the ingredient's name and SKU, its unit, its cost per unit, how much is on hand and whether it is active. Pick a branch at the top of the app to see that branch's quantities.
Click Add Ingredient.
| Field | Required | Notes |
|---|---|---|
| Name | Yes | Pasta Sauce, All-Purpose Flour. |
| Stock Unit | Yes | pc, g, kg, ml or L. Defaults to grams. The unit you count in. |
| Cost per unit | Yes | The cost of one unit. Kept to four decimals. |
| Reorder point | No | Only appears when a branch is selected — reorder points are per branch. |
| SKU | No | Generated as ING-0001 if left blank. |
| Packaging Conversions | No | sack = 25000 g, case = 24 pc. |
| Active | — | On by default. |
Cost per unit trips everyone up once. It is what one stock unit costs, not
what a pack costs. Flour at ₱45 a kilo tracked in grams costs 0.045. Enter
45 and every food cost in Kassly is a thousand times too high.
Packaging conversions exist so you never have to do that arithmetic twice: you
buy by the sack, you count by the gram, and you enter sack = 25000 once. That
unit is then available whenever you receive stock or write a recipe line.
Anything created here is set up as stock-tracked, hidden from the POS grid, with a zero selling price and no category. You can change any of that afterwards from Catalog → Products.
Editing a dual-purpose item from the Ingredients dialog will take it off the POS grid. Saving that dialog always writes "not sold": it clears the category, sets the selling price to zero and unticks Show in POS. If the item is one you also sell, edit it from Catalog → Products instead, where all its fields are on the form.
Marking products you already have
If your catalog already contains the raw materials, you do not need to retype them. On Catalog → Products, tick the products in the list and use Mark as ingredient (or Remove ingredient flag) in the bar that appears. Up to 500 at a time.
The Products page also has an All Items / Sellable only / Ingredients only filter, so you can work through either half of the catalog.
Building a recipe
A recipe — Kassly calls it a composition — says "one serving of this menu item uses these ingredients in these amounts". Open Inventory → Compositions and click Add Composition.
| Field | Required | Notes |
|---|---|---|
| Menu Item | Yes | The thing you sell. |
| Composition Name | Yes | e.g. Chicken Adobo Standard. One item can have more than one recipe, which is why it needs a name. |
| Variant | No | Leave as All variants unless the recipe only applies to one size. Only offered when the item has variants. |
| Yield (servings per batch) | No | Defaults to 1. |
| Active | — | On by default. |
Then add ingredient rows. Each row takes an ingredient, a quantity, a unit and a waste percentage.
The ingredient picker is grouped: Ingredients first, then Other stock items — so a finished dish you use inside another dish is still reachable, but your raw materials come up first. A row whose ingredient does not track stock is flagged stock not tracked, because that line will never deduct anything.
The same ingredient cannot appear twice in one recipe. As you type, the bottom of the dialog totals up Total ingredient cost and Cost per serving.
Yield: how a batch becomes a serving
Yield is how many servings one run of the listed quantities makes. It is the difference between a recipe card and a per-sale deduction.
A pot of adobo using 1 kg of pork that serves four has a yield of 4, and the ingredient row says 1 kg. Sell one serving and Kassly deducts 250 g — the quantity divided by the yield.
Get the yield wrong and every deduction is wrong by the same multiple, so it is the one field worth double-checking.
Waste percentage
Waste is the trim, peel and spillage you pay for but never serve. A recipe line for 1 kg of fish with 20% waste means you have to buy more than a kilo to end up with a kilo of usable fish.
Kassly scales the line up accordingly: a line with waste of w percent consumes the named quantity ÷ (1 − w ÷ 100).
| Waste | 1,000 g on the recipe consumes |
|---|---|
| 0% | 1,000 g |
| 10% | 1,111 g |
| 20% | 1,250 g |
The same factor is used for the stock deduction and for the food cost, so the two always agree. Waste can be anything from 0 up to 99.99.
What a sale actually deducts
When a sale completes, for every line that has an active recipe, Kassly:
- works out servings sold ÷ yield,
- multiplies each ingredient's quantity by that,
- scales it up by the line's waste factor,
- converts it into the ingredient's own stock unit, and
- writes a stock movement, so the deduction is on the record rather than a silent change to a number.
Voiding that sale puts everything back the same way.
Three rules decide whether a line moves at all:
- The ingredient must have Track Stock on. Deduction keys on that and nothing else. An ingredient flagged as a raw material but not stock-tracked will sit in the recipe forever and never move.
- The recipe must be Active.
- A variant-specific recipe wins over the catch-all for the same item.
Food cost
The Compositions list is a food-cost report in its own right:
| Column | What it is |
|---|---|
| Menu Item | The item sold, and the variant if the recipe is variant-specific. |
| Composition Name | Plus a warning badge if any ingredient has been deleted. |
| Ingredients | How many lines the recipe has. |
| Cost / Serving | Total ingredient cost ÷ yield, waste included. |
| Cost % | Cost per serving as a percentage of the item's selling price. |
| Status | Active or Inactive. |
Cost % is colour-coded, which is the fastest read on the page:
| Cost % | Colour |
|---|---|
| Under 30% | Green |
| 30% to 40% | Amber |
| Over 40% | Red |
Those thresholds are food-service rules of thumb, not a judgement about your business. A drinks-led cafe should be well under 30%; a steakhouse lives above it.
Cost / Serving is only as good as your ingredient costs. It reads the cost price on each ingredient at the moment you look — it is not a snapshot from when the recipe was written, and it does not update your selling price.
Use the Export CSV button for the same table as a spreadsheet.
There is also a fuller Food Cost dashboard under Reports.
The Food Cost dashboard needs the Inventory Pro add-on (₱400 per branch each month), not Recipe Costing. If the menu item is visible but the page asks you to upgrade, that is the add-on it wants.
Ingredient consumption
Above the Compositions table sits an Ingredient Consumption panel: which raw materials went out, in what quantity, and what that was worth.
Today's figures are free. Any other date range — yesterday, this week, this month, a custom range — needs the Business Reports add-on (₱400 per branch each month).
When a recipe stops working
Recipes fail quietly, which is why Kassly flags the two ways it happens.
A deleted ingredient. Delete a product that a live recipe uses and the line
stays in the recipe but stops deducting. Kassly refuses that deletion by default
and lists the recipes involved — but if you push past it with Delete anyway,
the affected recipes get an amber N deleted badge on the Compositions list.
Edit the recipe to replace or remove those lines.
An untracked ingredient. Turning off Track Stock on an ingredient has the same effect: the line is there and nothing moves. The ingredient picker labels these stock not tracked.
Deleting the composition itself is straightforward — it cannot be undone, and it does not touch any stock already deducted.
Availability worked out from a recipe
For dishes cooked to order there is nothing meaningful to count, so Kassly can report how many portions the ingredients still cover instead. That is the Stock from Recipe option on the product form.
It is opt-in per item, and it is advisory — a portion count, not a limit. It never blocks or warns on a sale. The whole of it is explained in Recipe-derived stock.
Commissary batches
A recipe can also describe a batch made in a central kitchen — a day's worth of house sauce — rather than a dish assembled per order. Those are marked producible, and they behave differently: a producible recipe is never deducted at the point of sale. It is consumed when you run the batch at the commissary.
Producible recipes are marked through the Producible (commissary) column of the import sheet, not through the Add Composition dialog, and the Compositions list does not label them separately. If a recipe is not deducting and looks otherwise correct, this is the first thing to check.
Commissary production, and how a completed batch recalculates the finished item's cost, is covered in Commissary and Production orders.
Butchery and breaking down
The same add-on includes Decompositions: the reverse direction, where one thing you bought becomes several things you sell. A whole tuna becomes belly, loin and trimmings, each with a share of the original. You name the source product, then the parts and each part's yield percentage.
If the add-on lapses
Nothing is deleted. Your recipes, ingredient costs and stock all stay exactly where they are — the Compositions and Decompositions screens simply stop being available until you subscribe again, and everything is where you left it. See Plans and add-ons.
Where to go next
- Importing products — bulk-load ingredients and recipes from a spreadsheet
- Stock levels — where ingredient quantities are managed
- Recipe-derived stock — portions from ingredients