{
  "slug": "general-contractor-fee-calculator",
  "title": "General Contractor Fee Calculator",
  "heading": "General Contractor Fee Calculator (Cost-Plus)",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/general-contractor-fee-calculator",
  "summary": "Compute GC fee on a cost-plus-fee contract and the guaranteed max price.",
  "description": "Cost-plus-fee contracts pay the contractor their actual verified cost of the work plus a negotiated fee, commonly structured as a flat fee or a percentage of cost, often with a guaranteed maximum price (GMP) cap that shifts overrun risk back to the contractor above that ceiling while sharing savings below it. This calculator computes GC fee under either a percentage-of-cost or flat-fee structure, adds it to estimated cost of work to produce the total contract sum, and applies a GMP cap if one is negotiated, showing the contractor's exposure if actual cost exceeds the cap. It also models a savings-share clause, common on GMP contracts, where cost coming in under the GMP is split between owner and contractor at an agreed percentage, which is a meaningful incentive-alignment tool worth understanding before you negotiate the split ratio.",
  "formula": "Fee = Cost of work × Fee% (or flat fee). Contract sum = Cost + Fee, capped at GMP. Savings below GMP split per agreed ratio.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=general-contractor-fee-calculator",
  "inputs": [
    {
      "id": "estCost",
      "label": "Estimated cost of work",
      "kind": "number",
      "hint": null,
      "default": 1800000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "feeType",
      "label": "Fee structure",
      "kind": "select",
      "hint": null,
      "default": "percent",
      "options": [
        {
          "value": "percent",
          "label": "Percentage of cost"
        },
        {
          "value": "flat",
          "label": "Flat fee"
        }
      ]
    },
    {
      "id": "feePct",
      "label": "Fee percentage",
      "kind": "number",
      "hint": null,
      "default": 12,
      "unit": "%",
      "min": 0,
      "max": 30
    },
    {
      "id": "flatFee",
      "label": "Flat fee amount",
      "kind": "number",
      "hint": null,
      "default": 200000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "gmp",
      "label": "GMP cap (0 = no cap)",
      "kind": "number",
      "hint": null,
      "default": 2100000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "actualCost",
      "label": "Actual cost realized",
      "kind": "number",
      "hint": null,
      "default": 1700000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "ownerSharePct",
      "label": "Owner's share of savings below GMP",
      "kind": "number",
      "hint": null,
      "default": 50,
      "unit": "%",
      "min": 0,
      "max": 100
    }
  ],
  "outputs": [
    {
      "id": "contractSum",
      "label": "Estimated contract sum",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "fee",
      "label": "GC fee",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "contractorSavings",
      "label": "Contractor's share of savings under GMP",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "ownerSavings",
      "label": "Owner's share of savings under GMP",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "overrun",
      "label": "Contractor-absorbed overrun above GMP",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Estimated cost of work: 1800000 $",
      "Fee structure: Percentage of cost",
      "Fee percentage: 12 %",
      "Flat fee amount: 200000 $",
      "GMP cap (0 = no cap): 2100000 $",
      "Actual cost realized: 1700000 $",
      "Owner's share of savings below GMP: 50 %"
    ],
    "outputs": [
      "Estimated contract sum: $2,016,000.00",
      "GC fee: $216,000.00",
      "Contractor's share of savings under GMP: $92,000.00",
      "Owner's share of savings under GMP: $92,000.00",
      "Contractor-absorbed overrun above GMP: $0.00"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter estimated cost of work ($).",
      "Enter fee structure.",
      "Enter fee percentage (%).",
      "Enter flat fee amount ($).",
      "Enter gmp cap (0 = no cap) ($).",
      "Enter actual cost realized ($).",
      "Enter owner's share of savings below gmp (%).",
      "Read your estimated contract sum 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": {
        "estCost": 1080000,
        "feeType": "percent",
        "feePct": 7.199999999999999,
        "flatFee": 120000,
        "gmp": 1260000,
        "actualCost": 1020000,
        "ownerSharePct": 30
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "estCost": 1800000,
        "feeType": "percent",
        "feePct": 12,
        "flatFee": 200000,
        "gmp": 2100000,
        "actualCost": 1700000,
        "ownerSharePct": 50
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "estCost": 2880000,
        "feeType": "percent",
        "feePct": 19.200000000000003,
        "flatFee": 320000,
        "gmp": 3360000,
        "actualCost": 2720000,
        "ownerSharePct": 80
      }
    }
  ],
  "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": "What fee percentage is typical for a cost-plus-GMP contract?",
      "a": "Commercial GC fees on cost-plus-GMP contracts commonly run 5-15% of cost depending on project complexity, risk, and market competitiveness, with straightforward repeat-design work at the low end and complex, high-risk, or fast-tracked projects at the higher end. Fee percentage should reflect the actual risk the contractor is absorbing, which is why a hard GMP cap often justifies a slightly higher fee than pure cost-reimbursable with no cap."
    },
    {
      "q": "Why would an owner prefer a percentage fee over a flat fee?",
      "a": "Actually the opposite is usually true from the owner's perspective — a percentage-of-cost fee gives the contractor a perverse incentive to let costs run higher since their fee grows with cost, while a flat fee removes that incentive and aligns the contractor toward genuine cost control. Sophisticated owners frequently push for flat fee structures on cost-plus work specifically to avoid this misalignment."
    },
    {
      "q": "How does the savings split incentivize the contractor under a GMP?",
      "a": "If the contractor keeps 50% of savings below the GMP, they're financially motivated to find real cost efficiencies since half the benefit flows to their own bottom line rather than 100% going to the owner. Splits commonly range from 50/50 to 80/20 in the owner's favor, with the exact ratio negotiated based on how much of the savings potential came from the contractor's expertise versus a padded initial GMP."
    },
    {
      "q": "What happens to the fee itself if actual cost exceeds the GMP?",
      "a": "The fee is typically locked in at the amount calculated from the original estimated cost (or sometimes recalculated on the GMP itself), and does not grow if actual cost overruns — the contractor absorbs the overrun in cost, not fee, which is exactly the risk-shifting mechanism a GMP is designed to create. Confirm this explicitly in contract language since ambiguous fee-recalculation clauses are a common source of GMP disputes."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/overhead-and-profit-allocation",
    "https://www.revenuelab.fyi/toolbox/change-order-markup-stacking",
    "https://www.revenuelab.fyi/toolbox/contingency-reserve-percentage"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — General Contractor Fee Calculator (https://www.revenuelab.fyi/toolbox/general-contractor-fee-calculator)"
}