Skip to main content
Reference Guide intermediate

From Ingredient Prices to Selling Price: Costing and Margins in Formul.io

Save what you actually pay for each ingredient, add work, overhead and packaging, then read the margin a price really earns — a private costing layer that sits on top of the recipes you already keep in Formul.io.

Yauheni Padniuk 8 min read Updated October 6, 2026

What Gets Costed, and What Stays Private

A recipe in Formul.io already knows what it is made of. Costing adds the one thing the catalogue cannot know: what you pay. The shared catalogue supplies identities and composition; your account supplies prices, hourly rates, overhead and packaging amounts. Nothing is inferred from an average market price, and an ingredient with no saved price counts as unknown, not as zero.

You open costing from the Economics tab of a saved recipe. The heading reads Cost to prepare for a recipe and Cost and selling price for a finished product, and a toolbar underneath carries three tabs — Costing, History and Saved calculations — with one Save costing action for the whole draft.

Everything you enter there is yours alone. Sharing or cloning a recipe hands over the formula, not your prices, labour rates, import column mappings or saved calculations. A public product page carries no costs at all.

Costing and margins is a Pro module

The costing workspace, My prices and My costs and rates are part of the Pro Costing & margins module. The ingredient catalogue, the calculators and recipe storage stay available without it — costing is an extra layer on top, not a gate in front of the formulation work. Your prices, rates and results stay private to your account whatever your plan.

My Prices: Save Each Ingredient Price Once

Prices live in one place, My prices, reachable from the costing header or from any ingredient page. The page lists every price you have saved with its pack price, pack size and purchase date, and offers two ways in: Add price for a single ingredient, Import for a supplier list.

The My prices page listing saved ingredient prices with pack price, pack size and purchase date.
One saved price per ingredient. Every recipe and product in your account reuses it.

The first time you price an ingredient you enter the pack you actually buy: Pack quantity, Unit (g, kg, oz or lb) and Pack price in your account currency. Later updates reuse that pack, so a routine change is one number and a date, and Purchase date already defaults to today.

Behind a Source, tax and preparation yield disclosure sit the details that change the cost a recipe actually sees.

FieldWhat it meansWhen to touch it
Pack quantity and UnitThe pack you buy, in grams, kilograms, ounces or poundsFirst time you price the ingredient, or when you switch pack size
Pack priceWhat the pack costs, in your account currencyEvery update
Purchase dateThe date this price applies from; defaults to todayBackdating an invoice you are entering late
Source (optional)Supplier or document name, shown beside the priceWhen you buy the same ingredient from more than one place
Purchase tax, %With switches for tax included in the price and tax you can recoverOnce per ingredient, when your tax treatment is settled
Preparation yield, %Losses before the ingredient reaches the recipe — trimming, peeling, sievingLeave it at 100% when the recipe already accounts for those losses

What a saved ingredient price records

Each saved price keeps its own history. Open Price history on an ingredient and you get the full run of observations, each with its pack, currency, purchase date and source, the rise or fall against the one before it, and a Price trend chart of Purchase price per kg over time. When purchase tax or preparation yield changes the number a recipe uses, the entry shows Cost per usable kg separately, so the two are never confused.

If your account also receives stock through Formul.io, a recorded purchase can supply a price for an ingredient you never priced by hand — such rows are labelled Purchase with their date and supplier, and a price you save yourself always takes priority.

Importing a Supplier Price List

Retyping a distributor’s list is exactly the work the importer removes. Import accepts a CSV or XLSX file, or a table pasted straight out of a spreadsheet. Documents and web links are not read here — this is a table reader, not an extraction engine.

1

Upload or paste the list

Choose Upload CSV/XLSX or use Paste a price table. A Source name — the supplier or the document — helps you recognise repeat imports later, and is optional.

2

Preview prices

The importer reads the table and proposes a column mapping. Nothing is saved at this stage; a preview never writes a price or a mapping.

3

Confirm the columns

Change column mapping exposes Name column, Price column, Pack quantity column, Unit column, and the optional Currency column and Price date column. Pick a different worksheet if the file has several, then Update preview with these columns.

4

Clear the exceptions

A summary reads Ready: N · Needs attention: M, and the list opens on the rows that need you — an unmatched ingredient name, a missing amount, an unsupported unit, a foreign currency, a date older than your saved price. Matched rows are already selected.

5

Save selected prices

Save selected prices (N) writes only the rows you approved. The ingredient name mappings are remembered for your account, so the next list from the same supplier arrives mostly resolved.

Batch Output: What You Can Actually Sell

Cost per kilogram is meaningless until the denominator is honest, and the Saleable output card is where you make it honest. Cooking loss is already in the recipe’s own output, so this section covers only what happens afterwards.

Items in this batch (optional) is the count you sell — the real number of bonbons, bars or jars, entered before any further losses. Leave it empty when you sell by weight or by the batch; fill it in and the whole calculation switches to a per-unit basis, including packaging charged per unit.

If the pan gave you less than the arithmetic predicted, Enter measured output replaces the calculated figure with Measured batch output, g, and Use calculated output puts it back. Add handling loss or rejects then reveals two percentages applied in order: Handling loss, % for what disappears between the pan and the packing bench, and Rejects after packaging, % for finished items that never reach a customer. Rejects come off saleable output last, and sale commissions and sales tax apply only to what you actually sell.

Work, Overhead, Packaging and Batch Extras

Work time counts person-minutes, not elapsed time — waiting, setting and cooling are not added for you. A simple batch needs one number in Active minutes for this batch, charged at your default rate. Split into separate tasks divides the work into named tasks, each with its own minutes, hourly rate and Applies to basis — per batch or per unit.

Packaging holds everything that is neither ingredient nor labour: boxes, ribbon, sleeves, a courier run, a one-off consumable. Amounts you use repeatedly are better saved once as an account rate and then added here with Add to this cost; anything genuinely singular goes in through Add a one-off expense.

The account defaults those sections lean on live on My costs and rates.

The My costs and rates page with hourly rate, overhead per productive hour, default margin and saved packaging rates.
Account defaults: hourly rate, overhead, default margin and reusable packaging amounts.

My hourly rate is applied to the working time entered in any recipe or product. Overhead is allocated per productive person-hour: enter it directly as Overhead per productive hour, or use Calculate overhead from monthly expenses to divide a list of monthly costs by your planned productive hours. Rent, power, insurance and depreciation belong there — but only once. A cost already entered as labour or as a direct expense must not be repeated as overhead, or every batch quietly pays for it twice.

Default margin, % seeds the target on every new calculation, and Packaging and expense rates stores the amounts you reuse. Saved amounts flow through to dependent recipes and products when you change them; already saved calculations keep the figures they captured.

Trying a Selling Price and Reading the Margin

The Cost card sits beside the inputs on a wide screen and below them on a phone, where the line at the top of the tab leads down to it; it updates as you type. With every price in, it leads with Batch cost — Ingredient cost while nothing else is in the cost — then Cost per kg, and Cost per piece once Pieces in this batch is filled; the split across Ingredients, Labor, Packaging, Overhead and Other expenses follows, and Cost breakdown expands it into individual lines. While prices are missing the card reads At least the cost known so far, with how many ingredients are priced and Add missing prices. Any other missing value is named with a button that leads to its field, so the calculation says what it is waiting for rather than quietly rounding it to nothing. Categories the cost leaves out are marked optional, and a finished cost reads Complete cost.

The Selling price card follows the order a price is decided in. Margin you want comes first: 50, 60, 67 or 75%, each shown with the multiple of the cost it means (60% · ×2.5), or Other margin for any value; Use this margin for all my recipes makes it your default. Against a complete cost the card then offers Recommended for a 60% margin — whatever your target is — with Use suggestion to copy that figure into the price field. While only ingredient prices are missing it gives At least, for a 60% margin instead: a floor from the prices entered so far, which each missing price can only raise. With no ingredient priced yet, only the margin can be chosen. The price you charge comes last and is read back as its price per kilogram, its margin and its multiple of the cost. Nothing you try is recorded until you press Save costing, and changing an ingredient price never silently rewrites a selling price you chose.

Margin here is measured on revenue excluding sales tax, after production costs and selling costs. Sales tax and fees is where those selling terms live.

SettingWhat it does
Sales tax for this calculation, %Overrides your account rate for this recipe only
Entered selling priceWhether the price you typed includes sales tax or has it added on top
Commission, %A marketplace or agent percentage
Commission is charged onAmount paid by the customer, or revenue excluding tax
Fixed fee per orderA flat charge per order rather than per item
Sale units per order (or batches)How that flat fee is spread across the units in one order

The selling terms behind the margin figure

Some combinations have no answer: a target margin that a commission structure makes unreachable produces no recommendation rather than a fiction. Money is held in exact decimal arithmetic until the final rounding, so the breakdown always adds up to the total.

Costing a Finished Product

A product assembled from several recipes is costed the same way, from inside the product workbench. Its Economics card shows the private cost next to the scientific metrics, and opens the full workspace once the product has been saved.

Two things differ. The product already owns its output quantity and unit, so costing charges gross mass as consumed material, treats net mass as finished output, and takes the per-unit cost from the product’s own unit; only Rejects after packaging, % stays editable. And work is additive: each component recipe contributes the allocated cost of the portion used, including its own work and overhead, so the product adds only its Extra assembly work.

Pinning a component to a saved recipe version freezes its composition. Unpinned links stay live: a change to a recipe, an ingredient or a child product marks the drafts above it for recalculation rather than rewriting a published snapshot.

History and Saved Calculations

Costing keeps a record from the moment you start using it — not a backfilled one. The History tab lists the change points that moved the number: prices, rates and defaults, production costs, composition or output. A chart plots cost per kilogram over time, and picking two points produces a contribution breakdown in a fixed order — prices and rates, then composition and work quantities, then yield — so you can see which of the three actually moved the cost. Periods without a complete calculation appear as gaps, not as invented figures.

Saved calculations is the other half. Saving one freezes the complete input, the prices, the result and the currency of the day, and reading it later returns exactly that — it is never recalculated against today’s sources. That is what makes it usable as the record behind a quotation you gave a customer, and why one requires a complete, saved set of inputs before it can be created.

Questions Confectioners Ask

Do I have to price every ingredient before I see anything?
No. The workspace calculates with what it has and shows a partial cost, badged as such, with a Prices needed count and an Enter prices button that opens the missing rows in place. An unpriced ingredient is treated as unknown, never as free.
Can other people see my prices if I share a recipe?
No. Prices, hourly rates, overhead, packaging amounts, import mappings and saved calculations are private to your account. Sharing or cloning a recipe passes on the formulation only, and public product pages contain no cost information.
What happens when I buy the same ingredient cheaper next month?
Save the new price on the ingredient; every recipe and product that uses it picks it up. The older figure stays in the price history with its own date, and the chart shows the step. A price dated earlier than your current one needs an explicit confirmation before it replaces it.
Should overhead include my own wages?
Only once. If you enter your production time as active work at an hourly rate, do not also fold that same time into the monthly expenses behind your overhead figure. Overhead is for the costs that keep the kitchen open regardless of which batch is running.
Why is my margin lower than the markup I applied?
Margin is measured on revenue excluding sales tax after every cost and fee you have entered, while markup is measured on cost. Commission, a fixed fee per order and the tax treatment of the price you typed all sit between the two, and the result card shows them separately.
Does a saved calculation update when prices change?
No, and that is the point. A saved calculation keeps its inputs, its prices, its currency and its result exactly as they were, which is what makes it a defensible record of a quotation. The live costing on the recipe carries on tracking today's prices.