{
  "slug": "change-order-markup-stacking",
  "title": "Change Order Markup Stacking Calculator",
  "heading": "Subcontractor Tier Markup Stacking Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/change-order-markup-stacking",
  "summary": "See how markup compounds across sub-tier, GC, and CM layers on a change.",
  "description": "On a multi-tier project — a sub-subcontractor doing the work, the sub marking it up, and the GC or CM marking up again — each layer of markup compounds on top of the previous layer's markup, not just the base cost, and owners frequently don't realize how much a small base cost change can balloon by the time it passes through three markup layers. This calculator lets you model up to three tiers of markup stacking on a single change order dollar amount so you can see exactly how much of the final number is base cost versus accumulated markup, which is essential both for a GC pricing a change order transparently and for an owner's rep reviewing one for reasonableness. Many contracts explicitly cap total stacked markup (for example, 20% combined maximum regardless of how many tiers touch the work) specifically to prevent this compounding effect from inflating small changes disproportionately.",
  "formula": "Tier 1 total = Base cost × (1 + Tier1%). Tier 2 total = Tier 1 total × (1 + Tier2%). Tier 3 total = Tier 2 total × (1 + Tier3%).",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=change-order-markup-stacking",
  "inputs": [
    {
      "id": "baseCost",
      "label": "Base labor + material cost",
      "kind": "number",
      "hint": null,
      "default": 4000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "tier1Pct",
      "label": "Sub-subcontractor markup",
      "kind": "number",
      "hint": null,
      "default": 15,
      "unit": "%",
      "min": 0,
      "max": 30
    },
    {
      "id": "tier2Pct",
      "label": "Subcontractor markup",
      "kind": "number",
      "hint": null,
      "default": 10,
      "unit": "%",
      "min": 0,
      "max": 30
    },
    {
      "id": "tier3Pct",
      "label": "GC/CM markup",
      "kind": "number",
      "hint": null,
      "default": 10,
      "unit": "%",
      "min": 0,
      "max": 30
    },
    {
      "id": "capPct",
      "label": "Contract markup cap (0 = no cap)",
      "kind": "number",
      "hint": null,
      "default": 30,
      "unit": "%",
      "min": 0,
      "max": 100
    }
  ],
  "outputs": [
    {
      "id": "final",
      "label": "Final stacked price",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "totalMarkupPct",
      "label": "Total effective markup",
      "format": "percent",
      "hint": null,
      "primary": false
    },
    {
      "id": "capped",
      "label": "Price if capped per contract",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "overCapAmount",
      "label": "Amount exceeding contract cap",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Base labor + material cost: 4000 $",
      "Sub-subcontractor markup: 15 %",
      "Subcontractor markup: 10 %",
      "GC/CM markup: 10 %",
      "Contract markup cap (0 = no cap): 30 %"
    ],
    "outputs": [
      "Final stacked price: $5,566.00",
      "Total effective markup: 39.1%",
      "Price if capped per contract: $5,200.00",
      "Amount exceeding contract cap: $366.00"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter base labor + material cost ($).",
      "Enter sub-subcontractor markup (%).",
      "Enter subcontractor markup (%).",
      "Enter gc/cm markup (%).",
      "Enter contract markup cap (0 = no cap) (%).",
      "Read your final stacked price on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "baseCost": 2400,
        "tier1Pct": 9,
        "tier2Pct": 6,
        "tier3Pct": 6,
        "capPct": 18
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "baseCost": 4000,
        "tier1Pct": 15,
        "tier2Pct": 10,
        "tier3Pct": 10,
        "capPct": 30
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "baseCost": 6400,
        "tier1Pct": 24,
        "tier2Pct": 16,
        "tier3Pct": 16,
        "capPct": 48
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "Why does 15% + 10% + 10% stacked markup add up to more than 35%?",
      "a": "Because each tier applies its percentage to the previous tier's already-marked-up total, not the original base cost, the effect compounds: 15% then 10% then 10% stacked multiplicatively works out to roughly 39% total markup on the original base cost, not the 35% you'd get from simply adding the three percentages together. This compounding is exactly why owners push for markup caps."
    },
    {
      "q": "What's a reasonable total markup cap to negotiate into a contract?",
      "a": "Many standard contract forms and public agency guidelines cap total combined markup across all tiers at 15-25% of the base change order cost specifically to prevent compounding stacking from inflating small changes. The right number depends on how many tiers are realistically involved — a two-tier structure (sub plus GC) can reasonably run a bit lower than a three-tier structure with a sub-subcontractor involved."
    },
    {
      "q": "Does a markup cap apply to base cost or to each tier's markup separately?",
      "a": "Effective caps are almost always written against total price relative to base cost (i.e., the final number can't exceed base cost plus X%), not as a limit on each tier's individual percentage, because capping only individual tier percentages does nothing to stop the compounding effect this calculator demonstrates. Read the actual cap language carefully — vague wording here is a common source of disputes."
    },
    {
      "q": "How should a GC present this to an owner without looking like they're overcharging?",
      "a": "Show the base cost and each tier's markup percentage explicitly rather than presenting only the final number, and reference the contract's markup cap clause to demonstrate the pricing is compliant. Transparency here builds trust and heads off disputes that otherwise drag out payment on legitimate change order work."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/construction-change-order-pricing",
    "https://www.revenuelab.fyi/toolbox/general-contractor-fee-calculator",
    "https://www.revenuelab.fyi/toolbox/overhead-and-profit-allocation"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Change Order Markup Stacking Calculator (https://www.revenuelab.fyi/toolbox/change-order-markup-stacking)"
}