{
  "slug": "job-bid-markup",
  "title": "Job Bid Markup Calculator",
  "heading": "Job Bid, Markup & Margin Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/job-bid-markup",
  "summary": "Turn job costs into a bid price that actually holds margin.",
  "description": "Markup and margin are not the same number. A 30% markup on cost is only a 23% gross margin — the gap is where small contractors lose their profit.",
  "formula": "Price = cost ÷ (1 − target margin); markup% = price ÷ cost − 1.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=job-bid-markup",
  "inputs": [
    {
      "id": "materials",
      "label": "Material cost",
      "kind": "number",
      "hint": null,
      "default": 4200,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "labor",
      "label": "Labor cost",
      "kind": "number",
      "hint": null,
      "default": 5600,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "subs",
      "label": "Subcontractor cost",
      "kind": "number",
      "hint": null,
      "default": 1500,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "other",
      "label": "Permits, dump, equipment",
      "kind": "number",
      "hint": null,
      "default": 700,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "margin",
      "label": "Target gross margin",
      "kind": "number",
      "hint": null,
      "default": 30,
      "unit": "%",
      "min": 0,
      "max": 80
    },
    {
      "id": "contingency",
      "label": "Contingency",
      "kind": "number",
      "hint": null,
      "default": 5,
      "unit": "%",
      "min": 0,
      "max": 25
    }
  ],
  "outputs": [
    {
      "id": "price",
      "label": "Bid price",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "profit",
      "label": "Gross profit",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "markup",
      "label": "Markup on cost (%)",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "cost",
      "label": "Hard cost",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "withCont",
      "label": "Cost with contingency",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "deposit",
      "label": "Suggested 30% deposit",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Material cost: 4200 $",
      "Labor cost: 5600 $",
      "Subcontractor cost: 1500 $",
      "Permits, dump, equipment: 700 $",
      "Target gross margin: 30 %",
      "Contingency: 5 %"
    ],
    "outputs": [
      "Bid price: $18,000",
      "Gross profit: $5,400",
      "Markup on cost (%): 42.9",
      "Hard cost: $12,000",
      "Cost with contingency: $12,600",
      "Suggested 30% deposit: $5,400"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter material cost ($).",
      "Enter labor cost ($).",
      "Enter subcontractor cost ($).",
      "Enter permits, dump, equipment ($).",
      "Enter target gross margin (%).",
      "Enter contingency (%).",
      "Read your bid 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": {
        "materials": 2500,
        "labor": 3350,
        "subs": 900,
        "other": 400,
        "margin": 18,
        "contingency": 3
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "materials": 4200,
        "labor": 5600,
        "subs": 1500,
        "other": 700,
        "margin": 30,
        "contingency": 5
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "materials": 6700,
        "labor": 8950,
        "subs": 2400,
        "other": 1100,
        "margin": 48,
        "contingency": 8
      }
    }
  ],
  "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": "How does the job bid, markup & margin calculator work?",
      "a": "Markup and margin are not the same number. A 30% markup on cost is only a 23% gross margin — the gap is where small contractors lose their profit. The underlying maths is: Price = cost ÷ (1 − target margin); markup% = price ÷ cost − 1."
    },
    {
      "q": "What do I need to enter?",
      "a": "6 values: material cost, labor cost, subcontractor cost, permits, dump, equipment, target gross margin, and contingency. Each field starts with a sensible default, so you can change one number at a time and watch the result move."
    },
    {
      "q": "What does the bid price result mean?",
      "a": "It is returned as a money amount in US dollars and updates live as you edit the inputs, so you can compare two or three versions of a scenario in a few seconds."
    },
    {
      "q": "Is this calculator free, and do I need an account?",
      "a": "Yes, it's free, and no account is required. Nothing you type is stored on our servers — the maths runs entirely in your browser."
    },
    {
      "q": "How accurate is the result?",
      "a": "It applies the standard formula exactly, so the arithmetic is precise. Results are estimates before tax, fees, and inflation unless an input explicitly covers them."
    },
    {
      "q": "Who is this tool for?",
      "a": "It's built for anyone comparing money scenarios before committing — budgeting a payment, sanity-checking a quote, or seeing what a change in rate or term actually costs."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/contractor-hourly-rate",
    "https://www.revenuelab.fyi/toolbox/break-even-point"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Job Bid Markup Calculator (https://www.revenuelab.fyi/toolbox/job-bid-markup)"
}