{
  "slug": "trade-benchmark-facts",
  "name": "Contractor Trade Benchmarks (HVAC, plumbing, electrical, mechanical, roofing, GC)",
  "publisher": "Level",
  "publisher_url": "https://levelcfo.com",
  "last_updated": "2026-07-20",
  "license": "https://creativecommons.org/licenses/by/4.0/ (free to cite with attribution to Level, levelcfo.com)",
  "field_dictionary": {
    "tier": "Confidence tier. A = public-company SEC 10-K filing or BLS government data (primary, permanent URL). B = trade association / CFMA / IBISWorld survey. C = industry publication or coaching source, directional only.",
    "metric": "The benchmarked quantity.",
    "value": "The figure or range as reported by the source.",
    "detail": "Context, scope, and any caveat (e.g. commercial vs residential, computed vs reported).",
    "source": "Named source.",
    "url": "Direct link to the primary source for verification.",
    "segment_reads": "Public-company SEGMENT-level margins that isolate the service arm from the construction/manufacturing arm (consolidated 10-K margins blend them). Each row is a Tier A filing.",
    "true_margin_bridge": "Level's reproducible reported-vs-real margin computation for the trade. Directional/illustrative; every input is a public source (BLS wage + burden, DSO from filings).",
    "findings": "The chart-backed findings shown on the page. Each carries its own source; directional operator figures are labeled as such."
  },
  "important_note": "Level measured a BLENDED 6-trade pool, so these per-trade pages lead with EXTERNAL, CITABLE trade-specific benchmarks (tiered A/B/C) and the public-company segment reads, then layer Level's blended cross-trade metrics (below) as clearly-labeled context. Level does NOT publish a per-trade split of its own dataset. Public-company figures are large scaled operators and read as an upper reference, not a typical private contractor.",
  "level_cross_trade_blended": [
    {
      "label": "Median collection rate",
      "value": "85.1%",
      "n": 464,
      "note": "Effective cash conversion across the blended 6-trade pool; top decile 96.0%."
    },
    {
      "label": "Median billing speed",
      "value": "1 day",
      "n": 733,
      "note": "1 day with progress billing included; 7 days among post-completion invoicers."
    },
    {
      "label": "Quote conversion (decided)",
      "value": "73.9%",
      "n": 794,
      "note": "On decided quotes; 38.1% across all quotes."
    },
    {
      "label": "Median job gross margin",
      "value": "44.3%",
      "n": 430,
      "note": "Blended across trades; 91% of jobs carry revenue with no cost data attached."
    }
  ],
  "trades": [
    {
      "slug": "hvac",
      "trade": "HVAC",
      "page": "https://levelcfo.com/benchmarks/hvac/",
      "public_company_comps": [
        "Comfort Systems USA (FIX)",
        "EMCOR (EME)",
        "Limbach (LMB)"
      ],
      "benchmarks": [
        {
          "tier": "A",
          "metric": "Public commercial-mechanical gross margin",
          "value": "19% to 24%",
          "detail": "Comfort Systems USA (FIX) 24.1%, EMCOR (EME) 19.3%, FY2025.",
          "source": "SEC 10-K filings (FIX, EME) FY2025",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001035983&type=10-K"
        },
        {
          "tier": "A",
          "metric": "Public commercial-mechanical operating margin",
          "value": "10% to 14%",
          "detail": "Comfort Systems 14.4%, EMCOR 10.1%, FY2025.",
          "source": "SEC 10-K filings FY2025",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000105634&type=10-K"
        },
        {
          "tier": "A",
          "metric": "HVAC mechanic median wage (SOC 49-9021)",
          "value": "$59,810/yr",
          "detail": "Mean $62,690, ~397,000 employed, median hourly $28.75.",
          "source": "BLS OEWS, May 2024",
          "url": "https://www.bls.gov/oes/tables.htm"
        },
        {
          "tier": "A",
          "metric": "Commercial mechanical DSO (implied)",
          "value": "~90 to 105 days",
          "detail": "EMCOR ~91, Comfort Systems ~103, computed from FY2025 receivables/revenue. Residential service collects far faster.",
          "source": "Computed from SEC 10-K filings FY2025",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001035983&type=10-K"
        },
        {
          "tier": "B",
          "metric": "All-contractor net profit before tax",
          "value": "6.3% (top quartile ~11.9%)",
          "detail": "The reality-check on what a healthy contractor nets.",
          "source": "CFMA 2024 Construction Financial Benchmarker (n=1,290)",
          "url": "https://cfma.org/benchmarker"
        },
        {
          "tier": "B",
          "metric": "US HVAC contractor market size",
          "value": "~$159B, ~115,000-120,000 firms",
          "detail": "Fragmented; no firm above a few percent share.",
          "source": "IBISWorld, Heating & Air-Conditioning Contractors (2025/2026)",
          "url": "https://www.ibisworld.com/united-states/industry/heating-air-conditioning-contractors/1945/"
        },
        {
          "tier": "C",
          "metric": "Service vs install gross margin (small/residential)",
          "value": "service ~48-58%, install ~30-40%",
          "detail": "Directional; service and maintenance carry materially higher gross margin than new installation.",
          "source": "Industry coaching sources (ServiceTitan, CallJolt) - directional",
          "url": "https://www.servicetitan.com/blog/hvac-profit-margins"
        }
      ],
      "key_stat": {
        "value": "24.1%",
        "label": "gross margin, Comfort Systems USA (largest public commercial mechanical contractor, FY2025 10-K)"
      },
      "hero_stats": [
        {
          "value": "24.1%",
          "caption": "Gross margin",
          "label": "largest public commercial HVAC contractor (FIX, FY2025)"
        },
        {
          "value": "$59,810",
          "caption": "Median tech wage",
          "label": "HVAC mechanics (BLS OEWS, May 2024)"
        },
        {
          "value": "~90-105 days",
          "caption": "DSO",
          "label": "commercial mechanical (SEC filings)"
        },
        {
          "value": "~$159B",
          "caption": "US market size",
          "label": "HVAC contractors (IBISWorld)"
        }
      ],
      "segment_reads": {
        "title": "What the public HVAC and mechanical contractors actually earn",
        "note": "n/d = not disclosed at that cut. EMCOR FY2025 consolidated operating margin (10.1%) includes an 85 bps one-time gain on a UK-ops sale; the segment margins shown are clean.",
        "rows": [
          {
            "company": "Comfort Systems USA (FIX)",
            "scope": "Consolidated, FY2025",
            "gross": "24.1%",
            "operating": "14.4%",
            "net": "~11.2%",
            "note": "Largest public commercial mechanical/HVAC contractor. Does not split service vs construction."
          },
          {
            "company": "EMCOR (EME)",
            "scope": "US Mechanical Construction segment, FY2025",
            "gross": "n/d",
            "operating": "12.8%",
            "net": "n/d",
            "note": "The construction arm."
          },
          {
            "company": "EMCOR (EME)",
            "scope": "US Building Services segment, FY2025",
            "gross": "n/d",
            "operating": "6.0%",
            "net": "n/d",
            "note": "The recurring facilities/O&M arm (bid on price), roughly half the construction margin. Note this is O&M, not owner-direct repair, see Limbach ODR below."
          },
          {
            "company": "Limbach (LMB)",
            "scope": "Consolidated, FY2025",
            "gross": "26.2%",
            "operating": "7.7%",
            "net": "6.0%",
            "note": "Pivoting hard toward direct-to-owner service work (75% of revenue in FY2025)."
          }
        ]
      },
      "true_margin_bridge": {
        "headline": "The service call looked like a 55% job. After the truck, the tech burden, and the callback, it is closer to 30%.",
        "method": "Reproduce it on your own book: start from the quoted gross margin, subtract the fully-burdened technician hours (BLS SOC 49-9021 median $28.75/hr times about 1.3 for taxes, workers' comp, and benefits), then the truck, drive, and dispatch time the job never gets charged for, then the callback rate on that job type. The gap between the quoted margin and what lands is where service shops quietly lose money on jobs that look profitable on the invoice.",
        "chart": {
          "title": "Where a residential HVAC service call's apparent margin goes",
          "unit": "%",
          "sample": "Level analysis; labor anchored to BLS SOC 49-9021 wage + statutory burden",
          "points": [
            {
              "name": "Apparent gross margin",
              "value": 55
            },
            {
              "name": "Less fully-burdened tech",
              "value": 44
            },
            {
              "name": "Less truck / drive / dispatch",
              "value": 37
            },
            {
              "name": "True margin after callback",
              "value": 30
            }
          ]
        }
      },
      "findings": [
        {
          "headline": "HVAC service work out-earns installation, but only at the small-shop level.",
          "insight": "Across independent operator sources, residential service and maintenance runs roughly 50 to 58% gross, equipment install 35 to 48%, and new construction 28 to 38%. Service carries more billable diagnostic labor and less pass-through material. These are directional industry figures, not measured survey data, but the direction is consistent across sources.",
          "source": "CallJolt, Profitability Partners, RunClockwork 2026 (directional)",
          "chart": {
            "title": "Gross margin by job type (directional, industry sources)",
            "unit": "%",
            "sample": "Directional: CallJolt, Profitability Partners, RunClockwork (2026)",
            "points": [
              {
                "name": "Service / maintenance",
                "value": 55
              },
              {
                "name": "Equipment install",
                "value": 42
              },
              {
                "name": "New construction",
                "value": 33
              }
            ]
          }
        },
        {
          "headline": "Not all 'service' is one business. Recurring O&M runs thin at scale; owner-direct service does not.",
          "insight": "EMCOR is the one public contractor that breaks out its recurring building-services (facilities O&M) arm. In FY2025 it ran a 6.0% operating margin, roughly half its mechanical-construction segment at 12.8%, because large O&M contracts are bid on price and carry heavy admin and personnel overhead. Do not read that as 'all service thins at scale.' Limbach's owner-direct service arm ran a 31.2% gross margin in FY2024 versus 21.1% for its subcontracted construction (gross, same company). The service premium is real, it lives in owner-direct diagnostic and repair work, not in low-bid recurring O&M.",
          "source": "EMCOR FY2025 10-K; Limbach FY2024 10-K",
          "url": "https://www.sec.gov/Archives/edgar/data/105634/000010563426000025/eme-20251231.htm",
          "chart": {
            "title": "EMCOR segment operating margin, FY2025",
            "unit": "%",
            "sample": "EMCOR FY2025 10-K segment operating income",
            "points": [
              {
                "name": "Mechanical Construction",
                "value": 12.8
              },
              {
                "name": "Electrical Construction",
                "value": 12.1
              },
              {
                "name": "Building Services (recurring O&M)",
                "value": 6
              }
            ]
          }
        },
        {
          "headline": "The HVAC tech wage runs from about $19 to $44 an hour, and your local market sets your labor cost.",
          "insight": "These are employee wages, not your fully-loaded cost. Add roughly 30% for payroll taxes, workers' comp, and benefits to get true cost per hour, then compare it to your revenue per labor hour. Costing labor at the base wage is the single most common reason a job that looks profitable on the invoice is not.",
          "source": "BLS Occupational Employment & Wage Statistics, May 2024, SOC 49-9021",
          "chart": {
            "title": "HVAC mechanic hourly wage percentiles (BLS OEWS, May 2024)",
            "unit": "",
            "sample": "BLS OEWS May 2024, SOC 49-9021 (n=396,870)",
            "points": [
              {
                "name": "P10",
                "value": 18.81
              },
              {
                "name": "P25",
                "value": 23
              },
              {
                "name": "Median",
                "value": 28.75
              },
              {
                "name": "P75",
                "value": 35.97
              },
              {
                "name": "P90",
                "value": 43.76
              }
            ]
          }
        }
      ]
    },
    {
      "slug": "plumbing",
      "trade": "Plumbing",
      "page": "https://levelcfo.com/benchmarks/plumbing/",
      "public_company_comps": [
        "Comfort Systems USA (FIX)",
        "Limbach (LMB)",
        "IES Holdings (IESC)"
      ],
      "benchmarks": [
        {
          "tier": "A",
          "metric": "Plumber median wage (SOC 47-2152)",
          "value": "$62,970/yr",
          "detail": "Mean $69,940, ~456,000 employed, median hourly ~$30.27; 10th pct $40,670, 90th $105,150.",
          "source": "BLS OEWS, May 2024",
          "url": "https://www.bls.gov/oes/tables.htm"
        },
        {
          "tier": "A",
          "metric": "MEP public-company gross margin (plumbing exposure)",
          "value": "21% to 28%",
          "detail": "Comfort Systems 21-24%, Limbach 26-28% (FY2024-2025). Diversified MEP with plumbing/piping.",
          "source": "SEC 10-K filings (FIX, LMB)",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001035983&type=10-K"
        },
        {
          "tier": "A",
          "metric": "MEP public-company net margin",
          "value": "6% to 11%",
          "detail": "Limbach ~6%, Comfort Systems 7-11% (FY2024-2025).",
          "source": "SEC 10-K filings",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001624794&type=10-K"
        },
        {
          "tier": "B",
          "metric": "All-contractor net profit before tax",
          "value": "6.3% (top quartile ~11.9%)",
          "detail": "The reality-check on what a healthy contractor nets.",
          "source": "CFMA 2024 Construction Financial Benchmarker (n=1,290)",
          "url": "https://cfma.org/benchmarker"
        },
        {
          "tier": "B",
          "metric": "US plumbing contractor market size",
          "value": "~$124-191B, ~129,000 firms",
          "detail": "Fragmented; no firm above ~5% share. Range reflects differing report scopes.",
          "source": "IBISWorld, Plumbers (2026)",
          "url": "https://www.ibisworld.com/united-states/industry/plumbers/1946/"
        },
        {
          "tier": "C",
          "metric": "Service vs new-construction gross margin",
          "value": "service ~40-70%, new construction ~10-32%",
          "detail": "Directional; service/repair carries far higher gross margin than new-construction install.",
          "source": "Industry coaching sources - directional",
          "url": "https://profitabilitypartners.io/plumbing-profit-margins"
        }
      ],
      "key_stat": {
        "value": "$62,970",
        "label": "median plumber wage (BLS OEWS, SOC 47-2152, May 2024)"
      },
      "hero_stats": [
        {
          "value": "$62,970",
          "caption": "Median plumber wage",
          "label": "BLS OEWS, SOC 47-2152, May 2024"
        },
        {
          "value": "21-28%",
          "caption": "Gross margin",
          "label": "MEP public companies with plumbing exposure"
        },
        {
          "value": "6.3%",
          "caption": "Net margin (before tax)",
          "label": "all-contractor, CFMA; top quartile ~11.9%"
        },
        {
          "value": "~$124-191B",
          "caption": "US market size",
          "label": "plumbing contractors (IBISWorld)"
        }
      ],
      "segment_reads": {
        "title": "What the public mechanical and plumbing contractors actually earn",
        "note": "n/d = not disclosed at that cut. Limbach discloses revenue and gross profit by segment; SG&A and net are consolidated only.",
        "rows": [
          {
            "company": "Limbach (LMB)",
            "scope": "ODR (direct-to-owner service), FY2024",
            "gross": "31.2%",
            "operating": "n/d",
            "net": "n/d",
            "note": "The direct-to-owner service arm. FY2023 was 29.0%."
          },
          {
            "company": "Limbach (LMB)",
            "scope": "GCR (subcontract construction), FY2024",
            "gross": "21.1%",
            "operating": "n/d",
            "net": "n/d",
            "note": "The subcontract arm, ~10 pts thinner than ODR. FY2023 was 17.0%."
          },
          {
            "company": "Comfort Systems USA (FIX)",
            "scope": "Consolidated, FY2025",
            "gross": "24.1%",
            "operating": "14.4%",
            "net": "~11.2%",
            "note": "Large diversified MEP with plumbing/piping."
          },
          {
            "company": "IES Holdings (IESC)",
            "scope": "Consolidated, FY2025",
            "gross": "25.5%",
            "operating": "11.4%",
            "net": "n/d",
            "note": "Diversified electrical + mechanical."
          }
        ]
      },
      "true_margin_bridge": {
        "headline": "The repair job looked like a 60% margin. After the fully-burdened plumber and the drive time, it is closer to 35%.",
        "method": "Reproduce it on your own book: start from the quoted gross margin, subtract the fully-burdened plumber hours (BLS SOC 47-2152 median $30.27/hr times about 1.3 for taxes, workers' comp, and benefits), then the truck, drive, and dispatch time the job never gets charged for, then the callback rate on that job type. The gap between the quoted margin and what actually lands is where service plumbers quietly lose money on jobs that look great on the invoice.",
        "chart": {
          "title": "Where a residential plumbing repair's apparent margin goes",
          "unit": "%",
          "sample": "Level analysis; labor anchored to BLS SOC 47-2152 wage + statutory burden",
          "points": [
            {
              "name": "Apparent gross margin",
              "value": 60
            },
            {
              "name": "Less fully-burdened plumber",
              "value": 47
            },
            {
              "name": "Less truck / drive / dispatch",
              "value": 40
            },
            {
              "name": "True margin after callback",
              "value": 35
            }
          ]
        }
      },
      "findings": [
        {
          "headline": "Direct-to-owner service beat subcontracted construction by 10 points, inside the same company.",
          "insight": "Limbach, a public mechanical contractor with a plumbing/piping arm, reports its book two ways. In FY2024 its owner-directed service arm ran 31.2% gross versus 21.1% for its subcontracted construction arm, a 10-point gap for the same company. Management has been shifting deliberately: owner-direct work went from 51% of revenue in FY2023 to 75% in FY2025. Limbach's book is mostly mechanical, not plumbing, so read this as the STRUCTURAL proof, the mechanism travels to plumbing because service is the same kind of diagnostic-labor-heavy, low-pass-through work. The plumbing-specific numbers below confirm the direction.",
          "source": "Limbach FY2024 10-K",
          "url": "https://www.sec.gov/Archives/edgar/data/1606163/000162828025011745/lmb-20241231.htm",
          "chart": {
            "title": "Limbach gross margin: owner-direct (ODR) vs GC-subcontract (GCR), FY2024",
            "unit": "%",
            "sample": "Limbach FY2024 10-K, segment gross margin",
            "points": [
              {
                "name": "ODR (direct-to-owner service)",
                "value": 31.2
              },
              {
                "name": "GCR (subcontract construction)",
                "value": 21.1
              }
            ]
          }
        },
        {
          "headline": "Service and repair carries far higher gross margin than new-construction plumbing.",
          "insight": "Independent operator sources put plumbing service and repair around 55 to 65% gross versus roughly 22 to 40% on new construction. Repair work is diagnostic-labor-heavy with little pass-through material, so it structurally out-earns bid new-construction. Directional industry figures, consistent in direction across sources.",
          "source": "Build-Folio, RunClockwork 2026 (directional)",
          "chart": {
            "title": "Gross margin by job type (directional, industry sources)",
            "unit": "%",
            "sample": "Directional: Build-Folio, RunClockwork (2026)",
            "points": [
              {
                "name": "Service / repair",
                "value": 58
              },
              {
                "name": "Remodel",
                "value": 40
              },
              {
                "name": "New construction",
                "value": 30
              }
            ]
          }
        },
        {
          "headline": "The plumber wage spans about $20 to $51 an hour; the top decile costs more than double the bottom.",
          "insight": "Employee wages, not fully-loaded cost. Add roughly 30% for taxes, workers' comp, and benefits to get true cost per hour. In high-cost metros the P90 rate is effectively the floor, which is why the same job priced off a national average quietly loses money in those markets.",
          "source": "BLS Occupational Employment & Wage Statistics, May 2024, SOC 47-2152",
          "chart": {
            "title": "Plumber hourly wage percentiles (BLS OEWS, May 2024)",
            "unit": "",
            "sample": "BLS OEWS May 2024, SOC 47-2152 (n=455,940)",
            "points": [
              {
                "name": "P10",
                "value": 19.55
              },
              {
                "name": "P25",
                "value": 23.49
              },
              {
                "name": "Median",
                "value": 30.27
              },
              {
                "name": "P75",
                "value": 39.37
              },
              {
                "name": "P90",
                "value": 50.55
              }
            ]
          }
        }
      ]
    },
    {
      "slug": "electrical",
      "trade": "Electrical",
      "page": "https://levelcfo.com/benchmarks/electrical/",
      "public_company_comps": [
        "IES Holdings (IESC)",
        "EMCOR (EME)"
      ],
      "benchmarks": [
        {
          "tier": "A",
          "metric": "Public electrical field-contracting gross margin",
          "value": "~20%",
          "detail": "IES Holdings (IESC) Commercial & Industrial segment 20.3% FY2025. The consolidated 25.5% is higher only because it blends in switchgear/power-equipment manufacturing (34.4% gross), which is not field electrical work.",
          "source": "SEC 10-K filing (IESC)",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001048268&type=10-K"
        },
        {
          "tier": "A",
          "metric": "Electrician median wage (SOC 47-2111)",
          "value": "$62,350/yr",
          "detail": "Median hourly $29.98; 10th pct $39,430, 90th $106,030. One of the largest construction trades by headcount.",
          "source": "BLS OEWS, May 2024",
          "url": "https://www.bls.gov/ooh/construction-and-extraction/electricians.htm"
        },
        {
          "tier": "A",
          "metric": "Diversified MEP operating margin (EMCOR)",
          "value": "operating ~10%",
          "detail": "EMCOR's consolidated operating margin ~10.1%, FY2025 (EMCOR is a large diversified mechanical and electrical contractor).",
          "source": "SEC 10-K filing (EME) FY2025",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000105634&type=10-K"
        },
        {
          "tier": "B",
          "metric": "All-contractor net profit before tax",
          "value": "6.3% (top quartile ~11.9%)",
          "detail": "The reality-check on what a healthy contractor nets.",
          "source": "CFMA 2024 Construction Financial Benchmarker (n=1,290)",
          "url": "https://cfma.org/benchmarker"
        },
        {
          "tier": "C",
          "metric": "Electrical margin by job type",
          "value": "service higher than project; net ~10-18%",
          "detail": "Directional; service/repair carries higher gross margin than project work.",
          "source": "Industry coaching sources - directional",
          "url": "https://stephsbooks.com/blog/electrical-contractor-profit-margins"
        }
      ],
      "key_stat": {
        "value": "20.3%",
        "label": "field electrical-contracting gross margin, IES Holdings C&I segment (FY2025 10-K); consolidated 25.5% blends in power-equipment manufacturing"
      },
      "hero_stats": [
        {
          "value": "20.3%",
          "caption": "Gross margin (field)",
          "label": "IES C&I segment, FY2025; consolidated 25.5% blends in manufacturing"
        },
        {
          "value": "$62,350",
          "caption": "Median electrician wage",
          "label": "BLS OEWS, SOC 47-2111, May 2024"
        },
        {
          "value": "6.3%",
          "caption": "Net margin (before tax)",
          "label": "all-contractor, CFMA; top quartile ~11.9%"
        },
        {
          "value": "742,580",
          "caption": "Electricians employed",
          "label": "US, one of the largest trades (BLS)"
        }
      ],
      "segment_reads": {
        "title": "What the public electrical contractors actually earn",
        "note": "n/d = not disclosed at that cut. IES segment operating margins exclude ~$52M unallocated corporate SG&A, so they slightly overstate fully-loaded segment profitability. Gross margins are clean.",
        "rows": [
          {
            "company": "IES Holdings (IESC)",
            "scope": "Commercial & Industrial segment, FY2025",
            "gross": "20.3%",
            "operating": "11.0%",
            "net": "n/d",
            "note": "The traditional commercial electrical-CONTRACTING read, the thinnest segment."
          },
          {
            "company": "IES Holdings (IESC)",
            "scope": "Communications segment, FY2025",
            "gross": "23.2%",
            "operating": "14.6%",
            "net": "n/d",
            "note": "Data-center / network install, riding data-center demand."
          },
          {
            "company": "IES Holdings (IESC)",
            "scope": "Infrastructure Solutions segment, FY2025",
            "gross": "34.4%",
            "operating": "23.8%",
            "net": "n/d",
            "note": "NOT field electrical: engineered power products / switchgear MANUFACTURING."
          },
          {
            "company": "EMCOR (EME)",
            "scope": "US Electrical Construction segment, FY2025",
            "gross": "n/d",
            "operating": "12.1%",
            "net": "n/d",
            "note": "Large diversified electrical construction arm."
          }
        ]
      },
      "true_margin_bridge": {
        "headline": "The service call looked like a 50% margin. After the fully-burdened electrician and the truck, it is closer to 28%.",
        "method": "Reproduce it on your own book: start from the quoted gross margin, subtract the fully-burdened electrician hours (BLS SOC 47-2111 median $29.98/hr times about 1.3 for taxes, workers' comp, and benefits), then the truck, drive, and dispatch time the job never gets charged for, then the callback rate on that job type. The gap between the quoted margin and what lands is where service work quietly loses margin on jobs that look profitable on the invoice.",
        "chart": {
          "title": "Where a residential electrical service call's apparent margin goes",
          "unit": "%",
          "sample": "Level analysis; labor anchored to BLS SOC 47-2111 wage + statutory burden",
          "points": [
            {
              "name": "Apparent gross margin",
              "value": 50
            },
            {
              "name": "Less fully-burdened electrician",
              "value": 39
            },
            {
              "name": "Less truck / drive / dispatch",
              "value": 33
            },
            {
              "name": "True margin after callback",
              "value": 28
            }
          ]
        }
      },
      "findings": [
        {
          "headline": "Field electrical work is the thin end of a public electrical company; the fat margin is manufacturing.",
          "insight": "IES reports four segments. The two that are actual field electrical contracting, Commercial & Industrial (11.0% operating) and Residential (8.0% operating), sit at the bottom; Residential is the thinnest on operating margin, C&I the thinnest on gross (20.3%). The eye-popping 23.8% is Infrastructure Solutions, which is engineered power-products and switchgear manufacturing, not field work. So the headline 25.5% company margin is propped up by non-contracting businesses. Read the segment, not the blend.",
          "source": "IES Holdings FY2025 10-K",
          "url": "https://www.sec.gov/Archives/edgar/data/1048268/000104826825000174/iesc-20250930.htm",
          "chart": {
            "title": "IES Holdings operating margin by segment, FY2025",
            "unit": "%",
            "sample": "IES Holdings FY2025 10-K segment operating margin",
            "points": [
              {
                "name": "Infrastructure (mfg, not field)",
                "value": 23.8
              },
              {
                "name": "Communications",
                "value": 14.6
              },
              {
                "name": "Commercial & Industrial (electrical contracting)",
                "value": 11
              },
              {
                "name": "Residential",
                "value": 8
              }
            ]
          }
        },
        {
          "headline": "Electrical service work runs higher margin than project and new-construction work.",
          "insight": "Operator sources put residential electrical service around 50 to 65% gross versus roughly 20 to 35% on commercial or new-construction bid work. The public data agrees on direction: IES's field-contracting segments (C&I 20.3% gross, Residential thinner on operating margin) sit below its manufacturing arm. Service is billable-labor-heavy; project work is competed on price. Directional industry figures.",
          "source": "AceWatt, RunClockwork 2026 (directional)",
          "chart": {
            "title": "Gross margin by job type (directional, industry sources)",
            "unit": "%",
            "sample": "Directional: AceWatt, RunClockwork (2026)",
            "points": [
              {
                "name": "Residential service",
                "value": 55
              },
              {
                "name": "Commercial / project (bid)",
                "value": 30
              }
            ]
          }
        },
        {
          "headline": "The electrician wage runs about $19 to $51 an hour, one of the widest spreads in the trades.",
          "insight": "Employee wages, not fully-loaded cost; add roughly 30% for taxes, workers' comp, and benefits. Electricians are one of the largest construction trades by headcount, and the P10-to-P90 spread is wide, so a master electrician's true loaded cost can be more than double a helper's. Cost each role at its burdened rate, not a blended average.",
          "source": "BLS Occupational Employment & Wage Statistics, May 2024, SOC 47-2111",
          "chart": {
            "title": "Electrician hourly wage percentiles (BLS OEWS, May 2024)",
            "unit": "",
            "sample": "BLS OEWS May 2024, SOC 47-2111 (n=742,580)",
            "points": [
              {
                "name": "P10",
                "value": 18.96
              },
              {
                "name": "P25",
                "value": 23.47
              },
              {
                "name": "Median",
                "value": 29.98
              },
              {
                "name": "P75",
                "value": 39.29
              },
              {
                "name": "P90",
                "value": 50.98
              }
            ]
          }
        }
      ]
    },
    {
      "slug": "mechanical",
      "trade": "Mechanical",
      "page": "https://levelcfo.com/benchmarks/mechanical/",
      "public_company_comps": [
        "Comfort Systems USA (FIX)",
        "EMCOR (EME)",
        "Limbach (LMB)"
      ],
      "benchmarks": [
        {
          "tier": "A",
          "metric": "Public mechanical gross margin",
          "value": "19% to 28%",
          "detail": "Comfort Systems 21-24%, EMCOR 19%, Limbach 26-28% (FY2024-2025).",
          "source": "SEC 10-K filings (FIX, EME, LMB)",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001035983&type=10-K"
        },
        {
          "tier": "A",
          "metric": "Public mechanical net margin",
          "value": "6% to 11%",
          "detail": "Comfort Systems 7-11%, EMCOR 6.9%, Limbach 6.0% (FY2024-2025).",
          "source": "SEC 10-K filings",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000105634&type=10-K"
        },
        {
          "tier": "A",
          "metric": "Revenue per employee",
          "value": "~$310K to $400K",
          "detail": "Comfort Systems ~$401K, EMCOR ~$386K, Limbach ~$324K (FY2024-2025).",
          "source": "Computed from SEC 10-K filings",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001624794&type=10-K"
        },
        {
          "tier": "A",
          "metric": "Mechanical DSO (implied)",
          "value": "~90 to 118 days",
          "detail": "EMCOR ~91, Comfort Systems ~103, Limbach ~118, computed from FY2024-2025 receivables. Reflects retainage and progress billing.",
          "source": "Computed from SEC 10-K filings",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001035983&type=10-K"
        },
        {
          "tier": "B",
          "metric": "CFMA specialty-trade net before tax",
          "value": "6.9% (best-in-class 11.9%)",
          "detail": "Corroborates the public net margins.",
          "source": "CFMA 2024 Construction Financial Benchmarker (n=1,290)",
          "url": "https://cfma.org/benchmarker"
        }
      ],
      "key_stat": {
        "value": "19% to 28%",
        "label": "gross margin range across the three largest public mechanical contractors (FY2024-2025)"
      },
      "hero_stats": [
        {
          "value": "19-28%",
          "caption": "Gross margin",
          "label": "across the 3 largest public mechanical contractors (FY2024-2025)"
        },
        {
          "value": "6-11%",
          "caption": "Net margin",
          "label": "Comfort Systems, EMCOR, Limbach (FY2024-2025)"
        },
        {
          "value": "~$310-400K",
          "caption": "Revenue / employee",
          "label": "from SEC filings"
        },
        {
          "value": "~90-118 days",
          "caption": "DSO",
          "label": "mechanical, reflects retainage + progress billing"
        }
      ],
      "segment_reads": {
        "title": "What the public mechanical contractors actually earn",
        "note": "n/d = not disclosed at that cut. EMCOR FY2025 consolidated operating margin (10.1%) includes an 85 bps one-time UK-ops-sale gain; segment margins shown are clean. Limbach discloses gross margin by segment only.",
        "rows": [
          {
            "company": "Comfort Systems USA (FIX)",
            "scope": "Consolidated, FY2025",
            "gross": "24.1%",
            "operating": "14.4%",
            "net": "~11.2%",
            "note": "Largest public commercial mechanical contractor."
          },
          {
            "company": "EMCOR (EME)",
            "scope": "US Mechanical Construction segment, FY2025",
            "gross": "n/d",
            "operating": "12.8%",
            "net": "n/d",
            "note": "The mechanical-construction arm."
          },
          {
            "company": "EMCOR (EME)",
            "scope": "US Building Services segment, FY2025",
            "gross": "n/d",
            "operating": "6.0%",
            "net": "n/d",
            "note": "Recurring facilities/O&M, roughly half the construction margin at scale."
          },
          {
            "company": "Limbach (LMB)",
            "scope": "ODR vs GCR gross margin, FY2024",
            "gross": "31.2% / 21.1%",
            "operating": "n/d",
            "net": "n/d",
            "note": "Direct-to-owner service vs subcontracted construction, same company."
          }
        ]
      },
      "true_margin_bridge": {
        "headline": "The service contract looked like a 40% margin. After the fully-burdened tech and the AR carry, it is closer to 22%.",
        "method": "Reproduce it on your own book: start from the quoted gross margin, subtract the fully-burdened technician hours (this illustration uses BLS SOC 49-9021, HVAC mechanics, median $28.75/hr times about 1.3 for taxes, workers' comp, and benefits; a pipefitter-heavy commercial mechanical crew should use the higher SOC 47-2152 pipefitter/steamfitter wage), then the drive and coordination time the job never gets charged for, then the financing cost of a 90-to-118-day mechanical collection cycle (DSO over 365, times the balance, times your cost of capital). The gap between the quoted margin and what lands is where mechanical shops quietly lose money on contracts that look profitable on paper.",
        "chart": {
          "title": "Where a commercial mechanical service contract's apparent margin goes",
          "unit": "%",
          "sample": "Level analysis; labor anchored to BLS SOC 49-9021 wage + statutory burden (adjust up for pipefitter-heavy crews)",
          "points": [
            {
              "name": "Apparent gross margin",
              "value": 40
            },
            {
              "name": "Less fully-burdened tech",
              "value": 31
            },
            {
              "name": "Less unbilled drive / coordination",
              "value": 27
            },
            {
              "name": "True margin after AR carry",
              "value": 22
            }
          ]
        }
      },
      "findings": [
        {
          "headline": "The public pure-plays that ARE mechanical contractors, side by side.",
          "insight": "Mechanical is the one trade with true public pure-plays, so their audited filings are a real read on the trade, not a loose proxy. Gross margin runs 19 to 28% and net 6 to 11%. These are large scaled operators, so treat the levels as an upper reference, not a typical private-shop number, and read the segment splits below as the more portable lesson.",
          "source": "Comfort Systems, EMCOR, Limbach FY2025 10-Ks",
          "url": "https://www.sec.gov/Archives/edgar/data/105634/000010563426000025/eme-20251231.htm",
          "chart": {
            "title": "Public mechanical contractor gross margin, FY2025",
            "unit": "%",
            "sample": "FY2025 10-Ks (LMB, FIX, EME)",
            "points": [
              {
                "name": "Limbach",
                "value": 26.2
              },
              {
                "name": "Comfort Systems",
                "value": 24.1
              },
              {
                "name": "EMCOR",
                "value": 19.3
              }
            ]
          }
        },
        {
          "headline": "Direct-to-owner service is fatter than subcontract work; large recurring O&M is thinner than construction.",
          "insight": "Two segment cuts tell the whole story. Limbach's direct-to-owner service ran 31.2% gross versus 21.1% for subcontracted work. But EMCOR's large recurring facilities-services arm ran just 6.0% operating versus 12.8% for mechanical construction. So direct-to-owner service beats being a sub, while big price-competed O&M contracts run thinner than project work. Which mechanical business you are in decides your margin.",
          "source": "Limbach FY2024 & EMCOR FY2025 10-Ks",
          "url": "https://www.sec.gov/Archives/edgar/data/1606163/000162828025011745/lmb-20241231.htm",
          "chart": {
            "title": "The two segment cuts that define mechanical margin",
            "unit": "%",
            "sample": "Limbach FY2024 (gross margin); EMCOR FY2025 (operating margin)",
            "points": [
              {
                "name": "Limbach ODR service (GM)",
                "value": 31.2
              },
              {
                "name": "Limbach GCR subcontract (GM)",
                "value": 21.1
              },
              {
                "name": "EMCOR Mech. Construction (OM)",
                "value": 12.8
              },
              {
                "name": "EMCOR Building Services (OM)",
                "value": 6
              }
            ]
          }
        },
        {
          "headline": "Mechanical DSO runs 90 to 118 days, and that AR carry is a real cost against margin.",
          "insight": "Retainage and progress billing stretch the mechanical collection cycle to roughly three to four months. That is real financing cost: at a 100-day cycle, carrying the AR at your cost of capital quietly eats margin the gross number never shows. It belongs in your true-margin math, not just your gross-margin math.",
          "source": "Computed from Comfort Systems, EMCOR, Limbach FY2024-2025 10-Ks",
          "chart": {
            "title": "Implied DSO from FY2024-2025 receivables (days)",
            "unit": "",
            "sample": "Computed from SEC 10-K receivables / revenue",
            "points": [
              {
                "name": "EMCOR",
                "value": 91
              },
              {
                "name": "Comfort Systems",
                "value": 103
              },
              {
                "name": "Limbach",
                "value": 118
              }
            ]
          }
        }
      ]
    },
    {
      "slug": "roofing",
      "trade": "Roofing",
      "page": "https://levelcfo.com/benchmarks/roofing/",
      "public_company_comps": [
        "Installed Building Products (IBP)",
        "TopBuild (BLD)",
        "Beacon Roofing Supply (BECN)"
      ],
      "benchmarks": [
        {
          "tier": "A",
          "metric": "Roofer median wage (SOC 47-2181)",
          "value": "$50,970/yr",
          "detail": "Mean $57,090, 10th pct $37,060, 90th $80,780.",
          "source": "BLS OEWS, May 2024",
          "url": "https://www.bls.gov/oes/tables.htm"
        },
        {
          "tier": "A",
          "metric": "Installation-trade public gross margin (proxy)",
          "value": "30% to 34%",
          "detail": "Installed Building Products (IBP) 33.8%, TopBuild (BLD) 30.5%, FY2024. These are insulation installers, not roofers (TopBuild's figure blends a lower-margin distribution segment), and roofing carries a different material-cost share. Treat as a loose installation-trade analog, not a roofing gross margin.",
          "source": "SEC 10-K filings (IBP, BLD) FY2024",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001580905&type=10-K"
        },
        {
          "tier": "B",
          "metric": "Roofing contractor firm-wide net margin",
          "value": "~6% (firm-wide)",
          "detail": "Association figure, though dated (2018). Vendor blogs cite 12-25% but those are job-level or best-case, not firm-wide. We show both honestly.",
          "source": "NRCA (National Roofing Contractors Association), 2018",
          "url": "https://www.nrca.net/roofing-news/"
        },
        {
          "tier": "B",
          "metric": "US roofing market size",
          "value": "~$92B, ~109,000 firms",
          "detail": "Re-roofing/renovation is ~80% of demand. Roughly 80-90% of total roofing demand is non-discretionary (leaks, storm and age-driven replacement); the 80-85% figure is the widely cited manufacturer/distributor baseline (Owens Corning, Beacon), the ~90% upper bound comes from a 2025 mid-market banking report (Brown Gibbons Lang).",
          "source": "IBISWorld, Roofing Contractors (2026); Owens Corning / Beacon investor materials",
          "url": "https://www.ibisworld.com/united-states/industry/roofing-contractors/1976/"
        },
        {
          "tier": "C",
          "metric": "Roofing gross margin (well-run)",
          "value": "~35-40% GM; commercial job-level 25-30%+",
          "detail": "Directional; job-level commercial margins run well above firm-wide net.",
          "source": "Industry coaching sources - directional",
          "url": "https://profitabilitypartners.io/"
        }
      ],
      "key_stat": {
        "value": "~80%",
        "label": "of roofing demand is re-roof/repair, and 80-90% of total roofing demand is non-discretionary (recession-resistant)"
      },
      "hero_stats": [
        {
          "value": "80%+",
          "caption": "Re-roof / repair demand",
          "label": "share of roofing demand, recession-resistant"
        },
        {
          "value": "$50,970",
          "caption": "Median roofer wage",
          "label": "BLS OEWS, SOC 47-2181, May 2024"
        },
        {
          "value": "~34%",
          "caption": "Gross margin (proxy)",
          "label": "installation-trade comp, Installed Building Products FY2024"
        },
        {
          "value": "~$92B",
          "caption": "US market size",
          "label": "roofing contractors (IBISWorld)"
        }
      ],
      "segment_reads": {
        "title": "What the public installation and roofing-adjacent companies actually earn",
        "note": "n/d = not disclosed at that cut. TopBuild distribution margin shown on segment basis (includes intercompany); external basis is 17.3%. These are installation and distribution proxies, not roofing pure-plays, so treat the level as directional and the ladder as the real signal.",
        "rows": [
          {
            "company": "Installed Building Products (IBP)",
            "scope": "Consolidated, FY2024",
            "gross": "33.8%",
            "operating": "13.0%",
            "net": "8.7%",
            "note": "Insulation installer, the closest install-trade analog."
          },
          {
            "company": "TopBuild (BLD)",
            "scope": "Installation segment, FY2024",
            "gross": "n/d",
            "operating": "19.7%",
            "net": "n/d",
            "note": "The install arm, higher-margin than distribution."
          },
          {
            "company": "TopBuild (BLD)",
            "scope": "Specialty Distribution segment, FY2024",
            "gross": "n/d",
            "operating": "15.1%",
            "net": "n/d",
            "note": "The distribution arm, the drag on the blend."
          },
          {
            "company": "Beacon Roofing Supply (BECN)",
            "scope": "Consolidated, FY2024",
            "gross": "25.7%",
            "operating": "6.8%",
            "net": "3.7%",
            "note": "Pure roofing DISTRIBUTOR, the thin-margin contrast."
          }
        ]
      },
      "true_margin_bridge": {
        "headline": "The re-roof looked like a 35% margin. After the fully-burdened crew and the callback, it is closer to 20%.",
        "method": "Reproduce it on your own book: start from the quoted gross margin, subtract the fully-burdened roofing-crew hours (BLS SOC 47-2181 median wage times about 1.3 for taxes, workers' comp, which runs high for roofing, and benefits), then the tear-off, disposal, and drive time the job under-charges for, then the callback and warranty rate. The gap between the quoted margin and what lands is where roofers quietly lose money on jobs that priced fine.",
        "chart": {
          "title": "Where a residential re-roof's apparent margin goes",
          "unit": "%",
          "sample": "Level analysis; labor anchored to BLS SOC 47-2181 wage + statutory burden",
          "points": [
            {
              "name": "Apparent gross margin",
              "value": 35
            },
            {
              "name": "Less fully-burdened crew",
              "value": 27
            },
            {
              "name": "Less tear-off / disposal / drive",
              "value": 24
            },
            {
              "name": "True margin after callback",
              "value": 20
            }
          ]
        }
      },
      "findings": [
        {
          "headline": "The margin ladder: doing the install earns far more than moving the material.",
          "insight": "There is no public pure-play roofer, so the closest reads are installers and distributors. The pattern is a ladder: the installer (IBP 33.8% gross) out-earns the roofing distributor (Beacon 25.7% gross), and inside TopBuild the installation segment beats distribution on operating margin too. A roofing contractor's economics live in the install labor and the job, not in marking up shingles.",
          "source": "IBP, Beacon Roofing Supply, TopBuild FY2024 10-Ks",
          "url": "https://www.sec.gov/Archives/edgar/data/1580905/000158090525000010/R5.htm",
          "chart": {
            "title": "Installation-trade vs distribution gross margin, FY2024",
            "unit": "%",
            "sample": "IBP, Beacon, TopBuild FY2024 10-Ks (GM = gross, OM = operating)",
            "points": [
              {
                "name": "IBP (installer, GM)",
                "value": 33.8
              },
              {
                "name": "Beacon (roofing distributor, GM)",
                "value": 25.7
              },
              {
                "name": "TopBuild Install (OM)",
                "value": 19.7
              },
              {
                "name": "TopBuild Distribution (OM)",
                "value": 15.1
              }
            ]
          }
        },
        {
          "headline": "Roofing margin depends more on the labor model than the job type, especially on re-roofs.",
          "insight": "Roofing is the most contested trade for margin, and the reason is the labor model, not the job type. The same residential re-roof reads as 40 to 52% gross with in-house crews or 30 to 40% when labor is subbed out. Repairs run highest (45 to 65%) but are a small revenue share; new construction is thinnest. Treat these as directional, and know that your crew structure moves the number as much as the work does.",
          "source": "RoofPredict, RunClockwork 2026 (directional)",
          "chart": {
            "title": "Gross margin by work type (directional; re-roof split by labor model)",
            "unit": "%",
            "sample": "Directional: RoofPredict, RunClockwork (2026)",
            "points": [
              {
                "name": "Repair / small job",
                "value": 55
              },
              {
                "name": "Re-roof (in-house crew)",
                "value": 46
              },
              {
                "name": "Re-roof (subbed labor)",
                "value": 35
              },
              {
                "name": "New construction",
                "value": 23
              }
            ]
          }
        },
        {
          "headline": "The roofer wage runs about $18 to $39 an hour, the lowest base of the major trades.",
          "insight": "Base wages look low, but roofing carries some of the highest workers' comp rates of any trade, so the fully-loaded burden is heavier than the wage suggests. Add that plus tear-off, disposal, and callback exposure before you trust a job's quoted margin. Costing at the base wage overstates roofing margin more than most trades.",
          "source": "BLS Occupational Employment & Wage Statistics, May 2024, SOC 47-2181",
          "chart": {
            "title": "Roofer hourly wage percentiles (BLS OEWS, May 2024)",
            "unit": "",
            "sample": "BLS OEWS May 2024, SOC 47-2181 (n=136,740)",
            "points": [
              {
                "name": "P10",
                "value": 17.82
              },
              {
                "name": "P25",
                "value": 21.78
              },
              {
                "name": "Median",
                "value": 24.51
              },
              {
                "name": "P75",
                "value": 30.78
              },
              {
                "name": "P90",
                "value": 38.84
              }
            ]
          }
        }
      ]
    },
    {
      "slug": "general-contractor",
      "trade": "General Contractor",
      "page": "https://levelcfo.com/benchmarks/general-contractor/",
      "public_company_comps": [
        "Tutor Perini (TPC)",
        "Granite Construction (GVA)",
        "Sterling Infrastructure (STRL)"
      ],
      "benchmarks": [
        {
          "tier": "B",
          "metric": "Commercial/nonresidential GC net before tax",
          "value": "4.1%",
          "detail": "The thinnest of all CFMA segments; GCs pass cost through to subs. Heavy-highway runs higher at 7.2%.",
          "source": "CFMA 2024 Construction Financial Benchmarker (n=1,290)",
          "url": "https://cfma.org/benchmarker"
        },
        {
          "tier": "A",
          "metric": "Public GC gross margin",
          "value": "4.6% to 20%",
          "detail": "Tutor Perini 4.6% (pure pass-through), Granite 14.3%, Sterling 20.1% (mix-elevated), FY2024. Illustrates the self-perform-vs-management spread.",
          "source": "SEC 10-K filings (TPC, GVA, STRL) FY2024",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000077543&type=10-K"
        },
        {
          "tier": "A",
          "metric": "GC DSO (implied)",
          "value": "~47 to 83 days",
          "detail": "Granite ~47-77, Tutor Perini ~83, computed from FY2024 receivables. Retainage extends the cycle.",
          "source": "Computed from SEC 10-K filings FY2024",
          "url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000861459&type=10-K"
        },
        {
          "tier": "B",
          "metric": "Best-in-class contractor gross margin / net",
          "value": "21.8% GM / 11.9% net",
          "detail": "Top-quartile across CFMA respondents.",
          "source": "CFMA 2024 Construction Financial Benchmarker",
          "url": "https://cfma.org/benchmarker"
        },
        {
          "tier": "B",
          "metric": "US construction establishments",
          "value": "919,000+",
          "detail": "8.0M employees, ~$2.1T structures/yr across the sector.",
          "source": "AGC of America",
          "url": "https://www.agc.org/"
        }
      ],
      "key_stat": {
        "value": "4.1%",
        "label": "net income before tax, commercial/nonresidential GC segment (CFMA 2024, the thinnest of all segments)"
      },
      "hero_stats": [
        {
          "value": "4.1%",
          "caption": "Net margin (before tax)",
          "label": "commercial/nonresidential GC, CFMA; thinnest segment"
        },
        {
          "value": "4.6-20%",
          "caption": "Gross margin",
          "label": "public GCs, self-perform vs pure pass-through"
        },
        {
          "value": "~47-83 days",
          "caption": "DSO",
          "label": "GC, retainage extends the cycle"
        },
        {
          "value": "919,000+",
          "caption": "US establishments",
          "label": "construction (AGC), ~$2.1T/yr"
        }
      ],
      "segment_reads": {
        "title": "What the public general contractors actually earn",
        "note": "n/d = not disclosed at that cut. Granite and Sterling segment operating margins exclude unallocated corporate G&A, so they slightly overstate fully-loaded segment profitability.",
        "rows": [
          {
            "company": "Tutor Perini (TPC)",
            "scope": "Consolidated, FY2024",
            "gross": "4.6%",
            "operating": "-2.4%",
            "net": "-3.8%",
            "note": "Near-pure pass-through GC; posted a net LOSS in FY2024."
          },
          {
            "company": "Granite Construction (GVA)",
            "scope": "Construction segment, FY2024",
            "gross": "14.4%",
            "operating": "9.1%",
            "net": "n/d",
            "note": "The GC read, with meaningful self-perform."
          },
          {
            "company": "Granite Construction (GVA)",
            "scope": "Materials segment, FY2024",
            "gross": "9.7%",
            "operating": "6.4%",
            "net": "n/d",
            "note": "Aggregates/asphalt MANUFACTURING, drags the blend."
          },
          {
            "company": "Sterling Infrastructure (STRL)",
            "scope": "E-Infra vs Transportation op margin, FY2024",
            "gross": "n/d",
            "operating": "22.0% / 6.5%",
            "net": "n/d",
            "note": "Same company, a 15-point spread across segment mix."
          }
        ]
      },
      "true_margin_bridge": {
        "headline": "The job looked like a 12% gross margin. After overhead and the WIP financing cost, the real net is closer to 3%.",
        "method": "Reproduce it on your own book: start from the job's gross margin, subtract the general-conditions and home-office overhead that never gets fully allocated to the job, then the financing cost of carrying WIP and retainage across a 47-to-83-day collection cycle (DSO over 365, times the balance, times your cost of capital). For a pass-through GC the gross number is thin to begin with, so overhead discipline and cash velocity, not gross spread, decide whether the job actually made money. CFMA pegs commercial GC net before tax at just 4.1%.",
        "chart": {
          "title": "Where a commercial GC job's apparent margin goes",
          "unit": "%",
          "sample": "Level analysis; DSO/retainage drag anchored to public-GC filings + cost-of-capital",
          "points": [
            {
              "name": "Apparent gross margin",
              "value": 12
            },
            {
              "name": "Less unallocated overhead",
              "value": 7
            },
            {
              "name": "Less WIP / retainage financing",
              "value": 5
            },
            {
              "name": "True net after all-in cost",
              "value": 3
            }
          ]
        }
      },
      "findings": [
        {
          "headline": "A GC's gross margin swings from 5% to 20% depending on how much work is self-performed.",
          "insight": "Tutor Perini, a near-pure pass-through GC, ran 4.6% gross and posted a net loss in FY2024. Sterling, with a richer self-perform and specialty mix, ran 20%. A GC that mostly coordinates subs shows a thin gross margin by design, because cost passes straight through. Gross margin alone is a poor benchmark for a GC.",
          "source": "Tutor Perini, Granite, Sterling FY2024 10-Ks",
          "url": "https://www.sec.gov/Archives/edgar/data/861459/000086145925000007/gva-20241231.htm",
          "chart": {
            "title": "Public GC gross margin, FY2024",
            "unit": "%",
            "sample": "TPC, GVA, STRL FY2024 10-Ks",
            "points": [
              {
                "name": "Sterling (mix-elevated)",
                "value": 20.1
              },
              {
                "name": "Granite Construction",
                "value": 14.4
              },
              {
                "name": "Tutor Perini (pure pass-through)",
                "value": 4.6
              }
            ]
          }
        },
        {
          "headline": "The materials/manufacturing arm drags the blended margin; the construction arm is the real GC read.",
          "insight": "Granite reports both a Construction segment (14.4% gross) and a Materials segment (9.7% gross) that manufactures aggregates and asphalt. The Materials arm drags the blended company number, so the consolidated margin understates the actual contracting work. When you read a diversified GC's margin, separate the construction from the materials or you are comparing yourself to the wrong number.",
          "source": "Granite Construction FY2024 10-K",
          "url": "https://www.sec.gov/Archives/edgar/data/861459/000086145925000007/gva-20241231.htm",
          "chart": {
            "title": "Granite: Construction vs Materials segment gross margin, FY2024",
            "unit": "%",
            "sample": "Granite Construction FY2024 10-K segment gross margin",
            "points": [
              {
                "name": "Construction segment",
                "value": 14.4
              },
              {
                "name": "Materials segment (aggregates/asphalt)",
                "value": 9.7
              }
            ]
          }
        },
        {
          "headline": "Because gross is thin, a GC's real result lives in overhead control and cash velocity.",
          "insight": "Start from a job's gross margin, subtract the general-conditions and home-office overhead that rarely gets fully allocated, then the financing cost of carrying WIP and retainage across a 47-to-83-day collection cycle. For a pass-through GC the gross is thin to begin with, so overhead discipline and cash velocity, not gross spread, decide whether the job actually made money. CFMA pegs commercial GC net before tax at just 4.1%.",
          "source": "Level analysis; CFMA 2024 Construction Financial Benchmarker",
          "chart": {
            "title": "The GC true-net bridge (illustrative)",
            "unit": "%",
            "sample": "Level analysis; CFMA pegs commercial GC net before tax at 4.1%",
            "points": [
              {
                "name": "Job gross margin",
                "value": 12
              },
              {
                "name": "Less unallocated overhead",
                "value": 7
              },
              {
                "name": "Less WIP / retainage financing",
                "value": 5
              },
              {
                "name": "True net after all-in cost",
                "value": 3
              }
            ]
          }
        }
      ]
    }
  ]
}
