Methodology
Restaurant Menu Profitability Planner methodology
Educational only: Business decision support, not accounting, tax or legal advice.
Privacy: Calculations run locally; Margin101 does not receive your commercial inputs.
Update policy: Reviewed when formulas or official dependencies change.
Scope: Market-neutral small-business planning using your own assumptions.
1. Formulas and units
totalRevenueExTax = sum(item units sold * item price)Where
- signatureUnitsSold
- Signature item units sold (whole portions/review period)Source: Business record
- secondUnitsSold
- Second item units sold (whole portions/review period)Source: Business record
- totalRevenueExTax
- Total menu revenue (currency units, ex tax)Source: Calculated output
totalDirectCostExTax = sum(waste-adjusted ingredients + labour + packaging + channel fees)Where
- signaturePackagingCostPerUnitExTax
- Signature item packaging cost (currency units/portion, ex tax)Source: Business record
- secondPackagingCostPerUnitExTax
- Second item packaging cost (currency units/portion, ex tax)Source: Business record
- totalDirectCostExTax
- Total direct menu cost (currency units, ex tax)Source: Calculated output
totalContributionExTax = total revenue - total direct costWhere
- totalRevenueExTax
- Total menu revenue (currency units, ex tax)Source: Calculated output
- totalDirectCostExTax
- Total direct menu cost (currency units, ex tax)Source: Calculated output
- totalContributionExTax
- Total menu contribution (currency units, ex tax)Source: Calculated output
contributionMargin = total contribution / total revenueWhere
- totalRevenueExTax
- Total menu revenue (currency units, ex tax)Source: Calculated output
- totalContributionExTax
- Total menu contribution (currency units, ex tax)Source: Calculated output
- contributionMargin
- Menu contribution margin (decimal rate)Source: Calculated output
signatureRequiredPriceExTax = signature non-fee cost / (1 - channel fee - target margin)Where
- signatureRequiredPriceExTax
- Signature price required at target (currency units, ex tax)Source: Calculated output
- secondRequiredPriceExTax
- Second-item price required at target (currency units, ex tax)Source: Calculated output
secondRequiredPriceExTax = second-item non-fee cost / (1 - channel fee - target margin)Where
- signatureRequiredPriceExTax
- Signature price required at target (currency units, ex tax)Source: Calculated output
- secondRequiredPriceExTax
- Second-item price required at target (currency units, ex tax)Source: Calculated output
Money inputs and outputs use the currency selected in the scenario without changing the canonical methodology. Rates, margins, utilisation and buffers are entered as percentages and converted to decimal values for calculation.
2. Worked example
Input assumptions
The worked rows below are evaluated at render time by the same shared engine and visible default fixture as the interactive workflow.
- Signature item units sold
- 420 whole portions/review period
- Signature item menu price
- 24 currency units/portion, ex tax
- Signature item ingredient cost
- 6.2 currency units/portion, ex tax
- Signature item labour minutes
- 9 minutes/portion
- Signature item packaging cost
- 0.8 currency units/portion, ex tax
- Signature item channel-fee rate
- 0.08 decimal fraction of signature-item revenue
- Signature item waste rate
- 0.06 decimal fraction of signature-item ingredient requirement lost
- Second item units sold
- 310 whole portions/review period
- Second item menu price
- 19 currency units/portion, ex tax
- Second item ingredient cost
- 4.7 currency units/portion, ex tax
- Second item labour minutes
- 7 minutes/portion
- Second item packaging cost
- 0.55 currency units/portion, ex tax
- Second item channel-fee rate
- 0.03 decimal fraction of second-item revenue
- Second item waste rate
- 0.04 decimal fraction of second-item ingredient requirement lost
- Loaded kitchen labour cost per hour
- 36 currency units/hour, ex tax
- Target contribution margin
- 0.32 decimal fraction of item revenue
Calculation and outputs
Total menu revenue
totalRevenueExTax = sum(item units sold * item price)- Signature item units sold
- 420 whole portions/review period
- Signature item menu price
- 24 currency units/portion, ex tax
- Second item units sold
- 310 whole portions/review period
- Second item menu price
- 19 currency units/portion, ex tax
- Signature price required at target
- 21.326241 money
- Second-item price required at target
- 14.839744 money
Engine result: 15,970 money
Total direct menu cost
totalDirectCostExTax = sum(waste-adjusted ingredients + labour + packaging + channel fees)- Signature item labour minutes
- 9 minutes/portion
- Signature item packaging cost
- 0.8 currency units/portion, ex tax
- Signature item channel-fee rate
- 0.08 decimal fraction of signature-item revenue
- Signature item waste rate
- 0.06 decimal fraction of signature-item ingredient requirement lost
- Second item labour minutes
- 7 minutes/portion
- Second item packaging cost
- 0.55 currency units/portion, ex tax
- Second item channel-fee rate
- 0.03 decimal fraction of second-item revenue
- Second item waste rate
- 0.04 decimal fraction of second-item ingredient requirement lost
- Loaded kitchen labour cost per hour
- 36 currency units/hour, ex tax
Engine result: 9,347.521099 money
Total menu contribution
totalContributionExTax = total revenue - total direct cost- Signature item ingredient cost
- 6.2 currency units/portion, ex tax
- Signature item packaging cost
- 0.8 currency units/portion, ex tax
- Second item ingredient cost
- 4.7 currency units/portion, ex tax
- Second item packaging cost
- 0.55 currency units/portion, ex tax
- Loaded kitchen labour cost per hour
- 36 currency units/hour, ex tax
- Total menu revenue
- 15,970 money
- Total direct menu cost
- 9,347.521099 money
Engine result: 6,622.478901 money
Menu contribution margin
contributionMargin = total contribution / total revenue- Target contribution margin
- 0.32 decimal fraction of item revenue
- Total menu revenue
- 15,970 money
- Total menu contribution
- 6,622.478901 money
Engine result: 0.414682 percent
Signature price required at target
signatureRequiredPriceExTax = signature non-fee cost / (1 - channel fee - target margin)- Signature item ingredient cost
- 6.2 currency units/portion, ex tax
- Signature item packaging cost
- 0.8 currency units/portion, ex tax
- Signature item channel-fee rate
- 0.08 decimal fraction of signature-item revenue
- Second item ingredient cost
- 4.7 currency units/portion, ex tax
- Second item packaging cost
- 0.55 currency units/portion, ex tax
- Second item channel-fee rate
- 0.03 decimal fraction of second-item revenue
- Loaded kitchen labour cost per hour
- 36 currency units/hour, ex tax
- Target contribution margin
- 0.32 decimal fraction of item revenue
- Total direct menu cost
- 9,347.521099 money
- Menu contribution margin
- 0.414682 percent
- Second-item price required at target
- 14.839744 money
Engine result: 21.326241 money
Second-item price required at target
secondRequiredPriceExTax = second-item non-fee cost / (1 - channel fee - target margin)- Signature item ingredient cost
- 6.2 currency units/portion, ex tax
- Signature item packaging cost
- 0.8 currency units/portion, ex tax
- Signature item channel-fee rate
- 0.08 decimal fraction of signature-item revenue
- Second item ingredient cost
- 4.7 currency units/portion, ex tax
- Second item packaging cost
- 0.55 currency units/portion, ex tax
- Second item channel-fee rate
- 0.03 decimal fraction of second-item revenue
- Loaded kitchen labour cost per hour
- 36 currency units/hour, ex tax
- Target contribution margin
- 0.32 decimal fraction of item revenue
- Total direct menu cost
- 9,347.521099 money
- Menu contribution margin
- 0.414682 percent
- Signature price required at target
- 21.326241 money
Engine result: 14.839744 money
Example
The worked rows below are evaluated at render time by the same shared engine and visible default fixture as the interactive workflow.
- Total menu revenue
- 15,970 currency units
- Total direct menu cost
- 9,347.52 currency units
- Total menu contribution
- 6,622.48 currency units
- Menu contribution margin
- 41.5%
- Signature price required at target
- 21.33 currency units
- Second-item price required at target
- 14.84 currency units
The exact engine-derived outputs are shown in the labelled rows below.
Interpretation
Use contribution and sales mix together; the highest-margin item is not automatically the best menu priority.
3. Validation and boundary checks
- All inputs must be finite and inside the visible validation boundaries.
- Rates are retained as decimal values and shown as percentages only at the presentation boundary.
- The worked fixture must expose every declared result: totalRevenueExTax, totalDirectCostExTax, totalContributionExTax, contributionMargin, signatureRequiredPriceExTax, secondRequiredPriceExTax.
- Scenario comparison changes one declared driver while holding the remaining industry records constant.
- Signature item units sold minimum
signatureUnitsSold โฅ 0 whole portions/review periodโ A lower value is rejected before calculation.- Signature item units sold maximum
signatureUnitsSold โค 100,000,000 whole portions/review periodโ A higher value is rejected before calculation.- Signature item menu price minimum
signatureSellingPriceExTax โฅ 0 currency units/portion, ex taxโ A lower value is rejected before calculation.- Signature item menu price maximum
signatureSellingPriceExTax โค 10,000,000 currency units/portion, ex taxโ A higher value is rejected before calculation.- Signature item ingredient cost minimum
signatureIngredientCostPerUnitExTax โฅ 0 currency units/portion, ex taxโ A lower value is rejected before calculation.- Signature item ingredient cost maximum
signatureIngredientCostPerUnitExTax โค 10,000,000 currency units/portion, ex taxโ A higher value is rejected before calculation.- Signature item labour minutes minimum
signatureLabourMinutesPerUnit โฅ 0 minutes/portionโ A lower value is rejected before calculation.- Signature item labour minutes maximum
signatureLabourMinutesPerUnit โค 1,440 minutes/portionโ A higher value is rejected before calculation.- Signature item packaging cost minimum
signaturePackagingCostPerUnitExTax โฅ 0 currency units/portion, ex taxโ A lower value is rejected before calculation.- Signature item packaging cost maximum
signaturePackagingCostPerUnitExTax โค 10,000,000 currency units/portion, ex taxโ A higher value is rejected before calculation.- Signature item channel-fee rate minimum
signatureChannelFeeRate โฅ 0 decimal fraction of signature-item revenueโ A lower value is rejected before calculation.- Signature item channel-fee rate maximum
signatureChannelFeeRate โค 1 decimal fraction of signature-item revenueโ A higher value is rejected before calculation.- Signature item waste rate minimum
signatureWasteRate โฅ 0 decimal fraction of signature-item ingredient requirement lostโ A lower value is rejected before calculation.- Signature item waste rate maximum
signatureWasteRate โค 1 decimal fraction of signature-item ingredient requirement lostโ A higher value is rejected before calculation.- Second item units sold minimum
secondUnitsSold โฅ 0 whole portions/review periodโ A lower value is rejected before calculation.- Second item units sold maximum
secondUnitsSold โค 100,000,000 whole portions/review periodโ A higher value is rejected before calculation.- Second item menu price minimum
secondSellingPriceExTax โฅ 0 currency units/portion, ex taxโ A lower value is rejected before calculation.- Second item menu price maximum
secondSellingPriceExTax โค 10,000,000 currency units/portion, ex taxโ A higher value is rejected before calculation.- Second item ingredient cost minimum
secondIngredientCostPerUnitExTax โฅ 0 currency units/portion, ex taxโ A lower value is rejected before calculation.- Second item ingredient cost maximum
secondIngredientCostPerUnitExTax โค 10,000,000 currency units/portion, ex taxโ A higher value is rejected before calculation.- Second item labour minutes minimum
secondLabourMinutesPerUnit โฅ 0 minutes/portionโ A lower value is rejected before calculation.- Second item labour minutes maximum
secondLabourMinutesPerUnit โค 1,440 minutes/portionโ A higher value is rejected before calculation.- Second item packaging cost minimum
secondPackagingCostPerUnitExTax โฅ 0 currency units/portion, ex taxโ A lower value is rejected before calculation.- Second item packaging cost maximum
secondPackagingCostPerUnitExTax โค 10,000,000 currency units/portion, ex taxโ A higher value is rejected before calculation.- Second item channel-fee rate minimum
secondChannelFeeRate โฅ 0 decimal fraction of second-item revenueโ A lower value is rejected before calculation.- Second item channel-fee rate maximum
secondChannelFeeRate โค 1 decimal fraction of second-item revenueโ A higher value is rejected before calculation.- Second item waste rate minimum
secondWasteRate โฅ 0 decimal fraction of second-item ingredient requirement lostโ A lower value is rejected before calculation.- Second item waste rate maximum
secondWasteRate โค 1 decimal fraction of second-item ingredient requirement lostโ A higher value is rejected before calculation.- Loaded kitchen labour cost per hour minimum
loadedKitchenLabourCostPerHourExTax โฅ 0 currency units/hour, ex taxโ A lower value is rejected before calculation.- Loaded kitchen labour cost per hour maximum
loadedKitchenLabourCostPerHourExTax โค 10,000,000 currency units/hour, ex taxโ A higher value is rejected before calculation.- Target contribution margin minimum
targetContributionMargin โฅ 0 decimal fraction of item revenueโ A lower value is rejected before calculation.- Target contribution margin maximum
targetContributionMargin โค 0.99 decimal fraction of item revenueโ A higher value is rejected before calculation.- Per-item whole-unit and rate validation
Number.isInteger(item units sold) and 0 โค channel fee โค 1 and 0 โค waste rate < 1โ A menu item outside any combined boundary is rejected.- Zero-revenue contribution margin
totalRevenueExTax = 0โ contributionMargin is null rather than Infinity or NaN.- Required-price retained share
1 โ channel fee rate โ target contribution margin โค 0โ The engine returns unreachable_target and no required item price.
4. Assumptions and source classification
- Costs, capacity, contract terms, tax rates and targets are supplied by the user.
- No provider default, jurisdictional rule or industry benchmark is embedded.
- The shared engine retains full precision and display formatting never feeds calculation.
This planner has no current policy-data dependency. Its commercial assumptions are user supplied. Registered family-level regression suites exercise the shared business-logic engine and worked-result reconciliation.
5. Limitations
- Results are only as reliable as the timing, scope and basis of the entered records.
- The workflow does not predict demand or establish accounting, tax, contractual or legal treatment.
- Channel fees, loaded labour cost, waste rates and target margin are editable scenario inputs; the visible starting values are not provider fees, wage rules or industry benchmarks.
- Tax, tips, service charges, menu-labelling requirements and delivery-platform contract terms are outside the model.
This is educational decision support, not tax, accounting, legal or financial advice. Check the treatment of your actual transactions under the rules that apply to your business and seek qualified advice where appropriate.
6. Update and evidence policy
Registered family-level suites test formula invariants and example reconciliation; the release ledger records that coverage without claiming a separate oracle for every line of public copy. There is no official threshold or benchmark to refresh for this planner. Commercial inputs remain user-supplied because they vary by business and contract.
Change history
- : Initial public release of the planner and methodology after pre-launch calculation, content, source and interaction review.
Related reading
Guides to interpret the decision and its assumptions.
- Restaurant Economics: From Menu Price to Operating Profit
Trace menu price through contribution, operating capacity and period costs without confusing a dish margin with operating profit.
Read guide - Menu Engineering Without a Misleading Popularity Matrix
Compare item contribution and observed sales mix while keeping popularity thresholds and demand claims explicit.
Read guide