Skip to main content

Methodology

Restaurant Menu Profitability Planner methodology

See which menu item contributes most and the price each item needs to protect the entered margin. Compare two restaurant menu items using actual sales mix, menu price, ingredient waste, preparation labour, packaging, ordering-channel fees and a target margin.

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

Total menu revenue
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
Total direct menu cost
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
Total menu contribution
totalContributionExTax = total revenue - total direct cost

Where

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
Menu contribution margin
contributionMargin = total contribution / total revenue

Where

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
Signature price required at target
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
Second-item price required at target
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

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  1. : Initial public release of the planner and methodology after pre-launch calculation, content, source and interaction review.

Guides to interpret the decision and its assumptions.

Return to the planner