Methodology
Subcontractor Markup 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
minimumClientPrice = total delivery cost ÷ (1 − target margin)Where
- targetMargin
- Target margin (proportion of client price retained as contribution)Source: User decision
- minimumClientPrice
- Minimum Client Price (currency units/project)Source: Calculated output
- totalDeliveryCost
- Total Delivery Cost (currency units/project)Source: Calculated output
baseDeliveryCost = subcontractor cost + coordination hours × internal cost per hourWhere
- subcontractorCost
- Subcontractor cost (currency units/project)Source: Business record
- coordinationHours
- Coordination hours (hours/project)Source: User assumption
- internalCostPerHour
- Internal cost per hour (currency units/hour)Source: Business record
- baseDeliveryCost
- Base Delivery Cost (currency units/project)Source: Calculated output
- totalDeliveryCost
- Total Delivery Cost (currency units/project)Source: Calculated output
protectedDeliveryCost = base delivery cost ÷ (1 − risk buffer rate)Where
- riskBufferRate
- Risk buffer rate (proportion of base delivery cost protected for risk)Source: User assumption
- baseDeliveryCost
- Base Delivery Cost (currency units/project)Source: Calculated output
- protectedDeliveryCost
- Protected Delivery Cost (currency units/project)Source: Calculated output
- totalDeliveryCost
- Total Delivery Cost (currency units/project)Source: Calculated output
totalDeliveryCost = protected delivery cost + additional risk allowanceWhere
- riskAllowance
- Additional risk allowance (currency units/project)Source: User assumption
- protectedDeliveryCost
- Protected Delivery Cost (currency units/project)Source: Calculated output
- totalDeliveryCost
- Total Delivery Cost (currency units/project)Source: Calculated output
requiredMarkup = minimum client price ÷ subcontractor cost − 1Where
- subcontractorCost
- Subcontractor cost (currency units/project)Source: Business record
- minimumClientPrice
- Minimum Client Price (currency units/project)Source: Calculated output
- requiredMarkup
- Required Markup (decimal rate)Source: Calculated output
proposedContribution = proposed price − total delivery costWhere
- totalDeliveryCost
- Total Delivery Cost (currency units/project)Source: Calculated output
- proposedContribution
- Proposed Contribution (currency units/project)Source: Calculated output
proposedMargin = proposed contribution ÷ proposed priceWhere
- proposedContribution
- Proposed Contribution (currency units/project)Source: Calculated output
- proposedMargin
- Proposed Margin (decimal rate)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 are rendered from the registered engine and visible default fixture.
- Subcontractor cost
- 3,000 currency units/project
- Coordination hours
- 8 hours/project
- Internal cost per hour
- 60 currency units/hour
- Risk buffer rate
- 0 proportion of base delivery cost protected for risk
- Additional risk allowance
- 300 currency units/project
- Target margin
- 0.3 proportion of client price retained as contribution
- Proposed client price
- 5,500 currency units/project
Calculation and outputs
minimumClientPrice
minimumClientPrice = total delivery cost ÷ (1 − target margin)- Subcontractor cost
- 3,000 currency units/project
- Internal cost per hour
- 60 currency units/hour
- Target margin
- 0.3 proportion of client price retained as contribution
- baseDeliveryCost
- 3,480 declared output unit
- protectedDeliveryCost
- 3,480 declared output unit
- totalDeliveryCost
- 3,780 declared output unit
- proposedMargin
- 0.312727 declared output unit
Engine result: 5,400
baseDeliveryCost
baseDeliveryCost = subcontractor cost + coordination hours × internal cost per hour- Subcontractor cost
- 3,000 currency units/project
- Coordination hours
- 8 hours/project
- Internal cost per hour
- 60 currency units/hour
- protectedDeliveryCost
- 3,480 declared output unit
- totalDeliveryCost
- 3,780 declared output unit
Engine result: 3,480
protectedDeliveryCost
protectedDeliveryCost = base delivery cost ÷ (1 − risk buffer rate)- Subcontractor cost
- 3,000 currency units/project
- Internal cost per hour
- 60 currency units/hour
- Risk buffer rate
- 0 proportion of base delivery cost protected for risk
- Additional risk allowance
- 300 currency units/project
- baseDeliveryCost
- 3,480 declared output unit
- totalDeliveryCost
- 3,780 declared output unit
Engine result: 3,480
totalDeliveryCost
totalDeliveryCost = protected delivery cost + additional risk allowance- Subcontractor cost
- 3,000 currency units/project
- Internal cost per hour
- 60 currency units/hour
- Risk buffer rate
- 0 proportion of base delivery cost protected for risk
- Additional risk allowance
- 300 currency units/project
- baseDeliveryCost
- 3,480 declared output unit
- protectedDeliveryCost
- 3,480 declared output unit
Engine result: 3,780
requiredMarkup
requiredMarkup = minimum client price ÷ subcontractor cost − 1- Subcontractor cost
- 3,000 currency units/project
- Internal cost per hour
- 60 currency units/hour
- Proposed client price
- 5,500 currency units/project
- minimumClientPrice
- 5,400 declared output unit
- baseDeliveryCost
- 3,480 declared output unit
- protectedDeliveryCost
- 3,480 declared output unit
- totalDeliveryCost
- 3,780 declared output unit
Engine result: 0.8
proposedContribution
proposedContribution = proposed price − total delivery cost- Subcontractor cost
- 3,000 currency units/project
- Internal cost per hour
- 60 currency units/hour
- Proposed client price
- 5,500 currency units/project
- minimumClientPrice
- 5,400 declared output unit
- baseDeliveryCost
- 3,480 declared output unit
- protectedDeliveryCost
- 3,480 declared output unit
- totalDeliveryCost
- 3,780 declared output unit
- proposedMargin
- 0.312727 declared output unit
Engine result: 1,720
proposedMargin
proposedMargin = proposed contribution ÷ proposed price- Proposed client price
- 5,500 currency units/project
- minimumClientPrice
- 5,400 declared output unit
- proposedContribution
- 1,720 declared output unit
Engine result: 0.312727
Example
The worked rows are rendered from the registered engine and visible default fixture.
- Base Delivery Cost
- 3,480 currency units/project
- Protected Delivery Cost
- 3,480 currency units/project
- Total Delivery Cost
- 3,780 currency units/project
- Minimum Client Price
- 5,400 currency units/project
- Required Markup
- 80%
- Proposed Contribution
- 1,720 currency units/project
- Proposed Margin
- 31.3%
The exact engine-derived outputs are shown in the labelled rows below.
Interpretation
The subcontractor markup result uses only the entered commercial assumptions.
Scenario study: project decision boundary
Separate recovery, coordination and contribution
Keep the subcontractor invoice distinct from evidenced coordination and risk costs, then apply the user-selected target margin once.
Input basis
- Fictional subcontractor invoice: 10,000 CU.
- Coordination: 10 hours at 80 CU per hour; other evidenced risk cost: 200 CU.
- User-selected target margin: 20%; all values before indirect tax.
| Row | Intermediate calculation | Result |
|---|---|---|
| Coordination cost | 10 × 80 | 800 CU |
| Total delivery cost | 10,000 + 800 + 200 | 11,000 CU |
| Minimum client price | 11,000 ÷ (1 − 0.20) | 13,750 CU |
| Markup on subcontract cost | (13,750 − 10,000) ÷ 10,000 | 37.5% |
| Margin on client price | (13,750 − 11,000) ÷ 13,750 | 20% |
Interpretation
Markup and margin differ because they use different denominators. The example prevents an unexplained markup from hiding coordination cost or double counting overhead.
Boundaries and next step
- No universal markup, coordination allowance or legal responsibility rule is supplied.
- Change subcontract cost, coordination cost and target margin independently before combining sensitivities.
Continue with Subcontractor Markup Planner or service-pricing and quoting guide.
3. Validation and boundary checks
- Inputs must be finite and remain within the visible boundaries.
- Rates are decimal values and all monetary inputs use one consistent currency and period.
- Whole operational capacity is rounded only where the engine explicitly applies floor or ceiling.
- Subcontractor cost minimum
subcontractorCost ≥ 0 currency units/project— A lower value is rejected before calculation.- Subcontractor cost maximum
subcontractorCost ≤ 10,000,000 currency units/project— A higher value is rejected before calculation.- Coordination hours minimum
coordinationHours ≥ 0 hours/project— A lower value is rejected before calculation.- Coordination hours maximum
coordinationHours ≤ 10,000,000 hours/project— A higher value is rejected before calculation.- Internal cost per hour minimum
internalCostPerHour ≥ 0 currency units/hour— A lower value is rejected before calculation.- Internal cost per hour maximum
internalCostPerHour ≤ 10,000,000 currency units/hour— A higher value is rejected before calculation.- Risk buffer rate minimum
riskBufferRate ≥ 0 proportion of base delivery cost protected for risk— A lower value is rejected before calculation.- Risk buffer rate maximum
riskBufferRate ≤ 0.99 proportion of base delivery cost protected for risk— A higher value is rejected before calculation.- Additional risk allowance minimum
riskAllowance ≥ 0 currency units/project— A lower value is rejected before calculation.- Additional risk allowance maximum
riskAllowance ≤ 10,000,000 currency units/project— A higher value is rejected before calculation.- Target margin minimum
targetMargin ≥ 0 proportion of client price retained as contribution— A lower value is rejected before calculation.- Target margin maximum
targetMargin ≤ 0.99 proportion of client price retained as contribution— A higher value is rejected before calculation.- Proposed client price minimum
proposedClientPrice ≥ 0 currency units/project— A lower value is rejected before calculation.- Proposed client price maximum
proposedClientPrice ≤ 10,000,000 currency units/project— A higher value is rejected before calculation.
4. Assumptions and source classification
- All costs, prices, hours, probabilities and volumes are user-supplied; no market benchmark is inferred.
- Tax is outside these neutral commercial comparisons.
- The engine retains full precision; formatting never feeds back into 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
- The model does not predict demand, delivery performance, contract enforceability or customer behaviour.
- It does not replace accounting, tax, legal or financial advice.
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 Subcontractor Markup planner and methodology.
Related reading
Guides to interpret the decision and its assumptions.
- How to Cost Labour and Materials in a Service Quote
Keep labour, materials, subcontractors and allocated overhead visible without counting the same cost twice.
Read guide