{
  "publisher": "Level",
  "publisher_url": "https://levelcfo.com",
  "dataset": "The Level Index, contractor financial & operating benchmarks",
  "attribution": "The Level founding team's analysis of 2,200+ contractors representing $13.25B in job revenue and 2.5M invoices, built across operating, private-equity, and CFO roles (financial reviews, operator interviews, and PE due-diligence), spanning HVAC, plumbing, electrical, mechanical, refrigeration, and fire protection, and layered with named public sources.",
  "methodology": "Figures are aggregated and anonymized. Distributions are reported as percentiles (p10/p25/median/p75/p90). No individual company is identified or identifiable. Per-metric sample sizes and definitions are attached to each metric.",
  "segments": [
    "HVAC",
    "plumbing",
    "electrical",
    "mechanical",
    "refrigeration",
    "fire protection"
  ],
  "last_updated": "2026-Q3",
  "date_range": "2022/2026",
  "license": "Free to cite with attribution to Level (levelcfo.com).",
  "name": "The Level Index, contractor financial methodology & eval criteria",
  "description": "How each contractor financial metric is correctly computed, and the criteria for evaluating whether a firm or tool computes them right. Method only, no client data. See the worked example at https://levelcfo.com/benchmarks/worked-example/.",
  "worked_example": "https://levelcfo.com/benchmarks/worked-example/",
  "criteria": [
    {
      "key": "job_gross_margin",
      "label": "Job gross margin",
      "formula": "(job_revenue - job_direct_cost) / job_revenue",
      "correct_requires": [
        "direct labor at fully-loaded rate (wage + burden + overtime)",
        "materials, equipment, and subcontractor cost included",
        "overhead excluded from job cost (it belongs in SG&A)",
        "unbilled labor captured, not dropped"
      ],
      "common_error": "leaving unbilled labor or under-applied burden out of job cost, which overstates margin",
      "benchmark_anchor": "contractor median 44.3%"
    },
    {
      "key": "wip_underbilling",
      "label": "WIP / percentage-of-completion",
      "formula": "earned_revenue - billed_revenue, where earned_revenue = contract_value * (cost_to_date / total_estimated_cost)",
      "correct_requires": [
        "percent complete based on cost-to-cost, not gut estimate",
        "over/underbilling computed per job and rolled to a schedule",
        "estimated cost at completion kept current"
      ],
      "common_error": "rebuilding WIP in spreadsheets quarterly so overruns are found after they are unrecoverable",
      "benchmark_anchor": "defensible monthly WIP schedule"
    },
    {
      "key": "labor_hour_variance",
      "label": "Labor-hour variance",
      "formula": "actual_hours / budgeted_hours",
      "correct_requires": [
        "budgeted hours captured at bid time",
        "actual hours tracked to the job, not just to payroll",
        "variance reviewed while the job is open, not after closeout"
      ],
      "common_error": "measuring labor only at the company level, so the 40% of jobs that run over budget stay invisible",
      "benchmark_anchor": "median on budget (99.4%); 40% of jobs over"
    },
    {
      "key": "collection_rate",
      "label": "Collection rate",
      "formula": "cash_collected / amount_billed",
      "correct_requires": [
        "measured against billings, not revenue",
        "retainage tracked separately from ordinary AR",
        "AR aging reviewed on a cadence"
      ],
      "common_error": "treating slow collections as normal instead of a fixable cash leak",
      "benchmark_anchor": "contractor median 85.1% (n=464); target 92-96%"
    },
    {
      "key": "quote_conversion",
      "label": "Quote conversion",
      "formula": "won / (won + lost) for decided; won / all_quotes_issued for true yield",
      "correct_requires": [
        "both decided-conversion and all-quote conversion reported",
        "pending quotes closed out on a defined window",
        "speed-to-decision tracked (winners close fast)"
      ],
      "common_error": "reporting only decided-conversion, which hides that most quoting effort produced no revenue",
      "benchmark_anchor": "73.9% decided vs ~38% all-quote"
    }
  ]
}
