Skip to content
Get matched

Methodology ยท 2026 Q3

How the Roof Cost Index is built

Every number on this site traces to a row on this page. The Index is published by the Thomas Town Digital editorial team. We match homeowners with roofers; we do not roof, and no roofer pays to be in the data.

The formula

squares = footprint_sqft x pitch_factor x (1 + waste) / 100
total   = squares x (material + labor x local_index)
        + tear_off x layers x squares + decking + extras
local_index = area BLS mean hourly wage (Roofers, SOC 47-2181) / national mean ($27.95)

Low uses every low end, high every high end, typical the midpoint (or the source's stated typical where one exists). Only labor is scaled by location; material is priced nationally in this edition.

Index construction

For each area: cost_per_square = material + labor x labor_index, where labor_index = area BLS mean hourly wage for Roofers (SOC 47-2181, May 2025) / national mean hourly wage (27.95). material and labor are the national per-square material-only and labor-only ranges in cost-tables.json (HomeGuide splits); typical = midpoint of low and high. low uses the low ends, high the high ends. Headline material is architectural asphalt (material $100-$250, labor $300-$350 per square; national typical = 175 + 325 = $500). Ranks are by typical cost, 1 = most expensive. Nothing else is adjusted: no regional material pricing, no tear-off, permit or extras, no rounding beyond cents. Nonmetropolitan BLS areas are in the BLS file but not ranked here. Puerto Rico is excluded from both the state and metro rankings (its rows remain in bls-oes-47-2181.json).

Inputs: bls-oes-47-2181.json (May 2025 OES, SOC 47-2181, retrieved 2026-09-25); cost-tables.json (retrieved 2026-09-25). 51 states including DC and 263 metros are ranked. Nonmetropolitan BLS areas (92) are in the BLS file and used by the calculator only through the state figure.

Materials: per-square inputs and sources

MaterialInstalledMaterial onlyLabor onlySplit sourceSources
Architectural shingles$400-$600$100-$250$300-$350HomeGuide architectural-shingles pageHomeGuide, Angi, Fixr, HomeAdvisor
3-tab shingles$200-$500$80-$130$200-$300HomeGuide (material from the asphalt-shingle page table; labor from the tear-off page sentence)HomeGuide, HomeGuide, Fixr, HomeGuide
Standing seam metal$900-$1,600$400-$800$500-$800HomeGuide standing-seam page cost tableHomeGuide, HomeGuide, Fixr, HomeAdvisor
Metal panel$500-$1,200$100-$500$400-$800HomeGuide metal-roof page (corrugated material row; metal labor per square)HomeGuide, Fixr, HomeAdvisor
Tile$700-$2,500$200-$1,200$500-$1,700HomeGuide tile-roof page cost table (clay and concrete combined)HomeGuide, Fixr, HomeAdvisor
Slate$1,000-$3,000$600-$1,600$400-$1,400HomeGuide slate-roof pageHomeGuide, HomeAdvisor, HomeGuide
Flat membrane$350-$1,000$50-$250$200-$450HomeGuide flat-roof page (EPDM/TPO membrane material rows; flat-roof labor sentence)HomeGuide, Fixr, HomeAdvisor
USD per square (100 sq ft). Retrieved 2026-09-25. 1 square = 100 sq ft. All per-square figures are national, installed unless labelled material_only/labor_only. Where a source gives $/sq ft the per-square value is that figure x 100. Full quotes are on each material page and in the JSON download.

Extras: unit costs and sources

ItemRange usedUnitSources
Tear-off$100 to $300USD per square, per layer removedHomeGuide, HomeGuide, Fixr, HomeAdvisor, Forbes Home, RoofingCalculatorHQ (calculator methodology)
Decking$2 to $5 per sq ft; $64 to $160 per sheetUSD per sq ft installed (and per 4x8 sheet = 32 sq ft)HomeGuide, Fixr, Angi
Gutters$12 to $25USD per linear foot installedHomeGuide, HomeAdvisor, HomeGuide
Skylight replacement$800 to $2,400 (typical $1,500)USD eachHomeGuide, Angi
Chimney flashing$400 to $1,600 (typical $1,000)USD each (full replacement)Angi, HomeGuide, HomeGuide
Ridge vent$300 to $650 per projectUSD per linear foot installedHomeGuide, Angi, HomeAdvisor, Fixr
Permit$100 to $500USD per projectHomeGuide, Fixr, Angi, HomeAdvisor
Dumpster$280 to $700 (typical $450)USD per rental (week)HomeGuide, HomeGuide, HomeAdvisor

Tear-off: Primary sources price tear-off for the whole roof ($1-$5/sq ft) and say the figure depends on the number of layers; none of the four publishes a clean per-layer rate. The per-layer doubling comes from a calculator methodology page (roofingcalculatorhq), not a cost guide. Low/high here = HomeGuide shingles $1-$3/sq ft x 100 per layer; heavy tile/slate up to $5/sq ft.

Assumptions that are ours

  • Pitch buckets. 2/12 for flat (1.014), 4/12 for low (1.054), 6/12 for medium (1.118), 10/12 for steep (1.302). The representative pitch per bucket is our assignment, guided by Fixr's classes (flat/low-slope 1/12-2/12; standard 4/12-8/12; steep up to 18/12) and HomeGuide basing its averages on a 6:12 roof. Factors are the trigonometric values published by IKO (Table 1, 4-12 in 12) and SquareCount (0-18 in 12); IKO prints 7/12 = 1.157 and 11/12 = 1.356 (rounding). Formula: pitch_factor = sqrt((rise/12)^2 + 1); roof area = footprint area x pitch_factor.
  • Waste. 10% for a simple roof, 15% for a complex one; sources: IKO, "Estimating How Much Roofing Is Required", Owens Corning Roofing blog, IKO blog, "How Many Shingles in a Bundle", GAF blog, "How to Measure a Roofing Square", HomeGuide.
  • Gutter length. The calculator estimates eave length as the perimeter of a square with the same footprint (4 x sqrt(footprint)). Real houses are not square; enter your own length if you have it by adjusting the result.
  • Full decking. Priced on the roof area before waste (footprint x pitch factor). Partial decking is priced per 4x8 sheet the user enters.
  • Stories. If the user enters total floor area, the footprint is that area divided by stories.
  • Building footprints. Mecklenburg County NC footprints are computed from the polygon in EPSG:2264 (US survey feet) because the layer has no area field. They include attached garages and porches. The statewide NC fallback is the NC Emergency Management footprint layer, geocoded through the US Census geocoder.
  • Hail. NOAA NCEI Storm Events, county rows with EVENT_TYPE "Hail", last three years. A county event is not proof a specific roof was hit.

Wage data

May 2025 Occupational Employment and Wage Statistics, occupation 47-2181 Roofers. National mean hourly wage $27.95, median $26.65, 135,490 employed. Files: https://www.bls.gov/oes/special-requests/oesm25st.zip (state_M2025_dl.xlsx); https://www.bls.gov/oes/special-requests/oesm25ma.zip (MSA_M2025_dl.xlsx, BOS_M2025_dl.xlsx); https://api.bls.gov/publicAPI/v2/timeseries/data/ (national series OEUN000000000000047218101/03/04/08/13). Retrieved 2026-09-25. BLS blocks non-browser downloads (HTTP 403 for curl); the zips were fetched through a real browser session (dev-browser, Range requests) and parsed with openpyxl. National values come from the BLS Public Data API v2 (year 2025 = May 2025 release) because the national zip was not downloaded. AREA_TYPE 2 = state, 4 = MSA, 6 = nonmetropolitan area. Puerto Rico (PR) is dropped from states; it is in the source file (H_MEAN 12.55). No state or MSA roofer row had a suppressed H_MEAN in this release.

Known limits

  • Material prices vary by region and supplier; this edition prices them nationally.
  • The cost tables are secondary sources (consumer cost guides), quoted verbatim with retrieval dates, not a contractor survey. Every material has 3-4 fetched sources; every extra has 2+ except skylight (2). No row is missing.
  • Sources not used and why: Fixr slate figure ($7-$30/sq ft) appeared only in a search snippet, page not fetched; not cited. HomeAdvisor asphalt-shingles page prints "3-Tab: $1.50 per square foot" without saying material or installed; not cited. This Old House roof-replacement URL returned 404; Modernize /roof/cost redirected to an AC page; GAF roof-replacement-cost page 403 in all modes.
  • Labor share cross-check: the explicit splits above imply labor shares broadly consistent with the 40% to 70% range reported by Fixr, Forbes Home, Angi, HomeGuide and HomeAdvisor; one HomeAdvisor page printing 15% to 25% is recorded as an outlier and not used.

Refresh cadence and changelog

Quarterly. Each edition is a new index-<quarter>.json; past editions are kept so the changelog can be reproduced. Changelog: 2026-09-25: First edition. BLS OES May 2025; cost tables retrieved 2026-09-25.

Author: Thomas Town Digital editorial team. Contact: /contact/. Licence for the Index data: CC BY 4.0, attribution "Roof Cost Index (2026 Q3)" with a link.