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
| Material | Installed | Material only | Labor only | Split source | Sources |
|---|---|---|---|---|---|
| Architectural shingles | $400-$600 | $100-$250 | $300-$350 | HomeGuide architectural-shingles page | HomeGuide, Angi, Fixr, HomeAdvisor |
| 3-tab shingles | $200-$500 | $80-$130 | $200-$300 | HomeGuide (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-$800 | HomeGuide standing-seam page cost table | HomeGuide, HomeGuide, Fixr, HomeAdvisor |
| Metal panel | $500-$1,200 | $100-$500 | $400-$800 | HomeGuide metal-roof page (corrugated material row; metal labor per square) | HomeGuide, Fixr, HomeAdvisor |
| Tile | $700-$2,500 | $200-$1,200 | $500-$1,700 | HomeGuide tile-roof page cost table (clay and concrete combined) | HomeGuide, Fixr, HomeAdvisor |
| Slate | $1,000-$3,000 | $600-$1,600 | $400-$1,400 | HomeGuide slate-roof page | HomeGuide, HomeAdvisor, HomeGuide |
| Flat membrane | $350-$1,000 | $50-$250 | $200-$450 | HomeGuide flat-roof page (EPDM/TPO membrane material rows; flat-roof labor sentence) | HomeGuide, Fixr, HomeAdvisor |
Extras: unit costs and sources
| Item | Range used | Unit | Sources |
|---|---|---|---|
| Tear-off | $100 to $300 | USD per square, per layer removed | HomeGuide, HomeGuide, Fixr, HomeAdvisor, Forbes Home, RoofingCalculatorHQ (calculator methodology) |
| Decking | $2 to $5 per sq ft; $64 to $160 per sheet | USD per sq ft installed (and per 4x8 sheet = 32 sq ft) | HomeGuide, Fixr, Angi |
| Gutters | $12 to $25 | USD per linear foot installed | HomeGuide, HomeAdvisor, HomeGuide |
| Skylight replacement | $800 to $2,400 (typical $1,500) | USD each | HomeGuide, Angi |
| Chimney flashing | $400 to $1,600 (typical $1,000) | USD each (full replacement) | Angi, HomeGuide, HomeGuide |
| Ridge vent | $300 to $650 per project | USD per linear foot installed | HomeGuide, Angi, HomeAdvisor, Fixr |
| Permit | $100 to $500 | USD per project | HomeGuide, 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.