How to Estimate Roof Replacement Demand in a Market
On this page
Most roofers size a market the lazy way: they ask another roofer how busy he is, glance at how many trucks the competition runs, and call it a day. That tells you almost nothing about how many roofs are actually going to come off in the next twelve months. Demand is a number. It can be built from the ground up, address by address, and the contractors who build it win the bidding for crews, the negotiation for territory, and the decision about whether a storm two states over is worth chasing.
This is a working method for estimating roof replacement demand in any market, written for the owner or sales manager who has to put real money behind the answer. It covers the data you can pull for free, the math that turns housing stock into a defensible replacement number, how to layer storm activity on top of the baseline, the per-roof signals that separate a guess from a route, and the mistakes that wreck every back-of-napkin estimate. Expect numbers, worked examples, and checklists you can run on a Tuesday.
By the end you will have a model that produces three things: total addressable replacements per year (the ceiling), a realistic serviceable slice you can actually win, and a ranked picture of where the demand sits inside the market so your trucks are not driving past it.
What "demand" actually means for a roofing business
The word gets thrown around loosely. Pin it down before you build anything, because the definition changes the math.
There are three layers, and they are not the same number:
- Total replacements that will happen in the market this year, regardless of who does them. This is the market ceiling. Every roofer, every insurance job, every DIY-adjacent handyman, every national outfit is competing for slices of it.
- Replacements you could realistically reach given your crews, your service radius, your product mix (residential asphalt vs. metal vs. commercial TPO), and your sales capacity. This is your serviceable market.
- Replacements you will actually book, which depends on your close rate, your marketing spend, your reputation, and how many competitors are fighting for the same doors.
Classic market-sizing language calls these TAM, SAM, and SOM (total, serviceable, and obtainable addressable market). The labels matter less than the discipline of separating them. A market with 8,000 annual replacements is meaningless to you if 6,000 of them are commercial flat roofs and you only do residential steep-slope. Your real number might be 2,000, and your obtainable slice of that might be 120.
A second distinction that trips people up: baseline demand vs. event demand.
- Baseline (or organic) demand is the steady drip of roofs that age out and get replaced because they are simply worn out. It is predictable, smooth, and roughly the same year over year, drifting with the age profile of the housing stock.
- Event demand is the spike that follows a hail or wind event. It is lumpy, geographically concentrated, time-compressed, and largely driven by insurance claims rather than wallet-out replacement. A single supercell can put more roofs into play in one afternoon than baseline demand produces in a year across the same footprint.
If you mix these two into a single average, you will mis-staff in both directions: too few crews when a storm hits, too many on the payroll during a quiet stretch. Model them separately and add them at the end.
The supply-side mistake almost every roofer makes
Before the method, the trap. The most common way roofers estimate demand is to look at supply: how many competitors operate in the area, how many permits got pulled last year, how busy the supply yard is. Those are lagging indicators of demand that already converted. They tell you what got built, not what is sitting out there waiting.
Permit data is the worst offender because it feels authoritative. Pulled permits undercount badly in storm markets (a lot of insurance reroofs go un-permitted or under-permitted depending on jurisdiction), they lag the actual decision by weeks or months, and they are biased toward the contractors already winning. If you size a market on permit counts, you are sizing the share that already went to someone else and assuming it is the whole pie.
Use permits as a sanity check at the end, never as the foundation. The foundation is the housing stock and how it ages.
Step 1: Define the market boundary precisely
Vague boundaries produce vague numbers. "The Dallas market" is not a boundary; it is a feeling. Pick one of these and write it down:
- A list of ZIP codes. The most practical unit for roofing because data is available at the ZIP level and ZIPs map loosely to drive time. A typical residential metro territory is 8 to 25 ZIPs.
- A county or set of counties. Useful because storm data, building permits, and Census housing data all roll up cleanly to county. Coarser than ZIP but easier to source.
- A drive-time isochrone. The most honest version of "serviceable" because it reflects what a crew can actually reach. A 45-minute drive ring from your yard is a real constraint; a county line is not.
A practical approach: define the outer boundary as a drive-time ring (say 45 minutes for production crews, 60 to 75 for storm chasing), then express it as the set of ZIPs whose centroids fall inside that ring. Now you have a unit you can attach data to and a boundary that respects physics.
Write down the ZIP list. Everything downstream attaches to it.
A note on overlapping and adjusted boundaries
Two edge cases break naive boundaries. First, ZIP codes are postal routes, not polygons, so a handful are PO-box-only or cover odd shapes; use ZIP-code tabulation areas (ZCTAs) from the Census when you need clean geography, because those are actual areas. Second, your sales boundary and your production boundary are rarely identical. You might sell anywhere a storm lands within 75 minutes but only run efficient production within 35. Hold two boundaries if that is true for you: a wider one for storm-event demand and a tighter one for baseline demand. The baseline work has to be profitable on its own diesel, while a storm job can absorb a longer drive because the ticket and the density justify it.
Third, watch for boundaries that cut a metro in half down a freeway or a river. Demand does not respect the line you drew; competitors on the other side will still pull from your edge ZIPs, and you will pull from theirs. Mark edge ZIPs as contested and discount your expected share there rather than pretending the boundary is a wall.
Step 2: Count the roofs (housing stock)
You cannot estimate roof replacements without knowing how many roofs exist. The free, authoritative source is the U.S. Census Bureau, specifically the American Community Survey (ACS) and the decennial housing counts.
What to pull, per ZIP (ACS 5-year estimates give you ZIP-code-tabulation-area data):
- Total housing units. Your raw roof count, roughly. One single-family detached home equals one roof.
- Units in structure. Critical for separating single-family detached (one roof, one decision-maker, your bread and butter) from multi-unit buildings (one roof, many units, a property-manager sale). A 200-unit apartment complex is one roof, not 200.
- Year structure built. The single most valuable field you will pull, because it lets you compute roof age. ACS buckets it (built 2020 or later, 2010–2019, 2000–2009, 1990–1999, etc.), which is coarse but workable.
- Owner-occupied vs. renter-occupied. Owner-occupied single-family is your cleanest residential demand. Renter-occupied skews toward landlord and property-manager decisions, a different sales motion.
Worked example. Suppose your 12-ZIP territory has these counts from ACS:
| Housing type | Units |
|---|---|
| Single-family detached, owner-occupied | 48,200 |
| Single-family detached, renter-occupied | 9,100 |
| Single-family attached (townhomes) | 6,400 |
| 2–4 unit buildings | 3,300 (≈ 1,100 roofs) |
| 5+ unit buildings | 210 roofs |
| Mobile homes | 1,800 |
For a residential steep-slope contractor, your core roof count is roughly the single-family detached plus attached: about 63,700 roofs (48,200 + 9,100 + 6,400). You might count townhomes at a fraction because many share roofs under an HOA. You set mobile homes and large multifamily aside or into a separate commercial/property-manager bucket. The point is you now have a concrete denominator instead of a metro feeling.
Note the gap between "housing units" (the headline Census number) and "roofs you can sell." In dense urban ZIPs the two diverge hard. A downtown ZIP might show 30,000 housing units and contain 600 sellable steep-slope roofs. Always convert units to roofs.
Pulling the Census data without losing a week
You do not need to be a data analyst to get these numbers. Three paths, from easiest to most powerful:
- Census QuickFacts and the data.census.gov table viewer. Search a county or place, open the housing tables (the relevant ones are the B25034 "year structure built," B25024 "units in structure," and B25003 "tenure" tables in ACS). Export to CSV. This is fine for a county-level pass.
- The Census API. If you are sizing many markets repeatedly, hit the ACS API directly by ZCTA and pull the three tables in one script. You get a clean table of every ZIP with units, structure type, year-built buckets, and tenure that you can refresh whenever new ACS estimates drop.
- A GIS overlay. If you already run mapping software, join the ACS tables to ZCTA shapes and you get a colored map of stock age and density that makes the demand pockets jump out visually before you do any math.
Whatever path you take, lock the vintage. ACS 5-year estimates are released annually but each release is a rolling five-year average, so a "2023" release reflects 2019 through 2023. That smoothing is fine for stock that changes slowly, but it means brand-new subdivisions show up late. In a fast-growing exurb, supplement the Census with recent new-construction permit data so you are not blind to two years of fresh roofs that will not need replacement for two decades.
Handling new construction and teardowns
New construction matters twice. In the near term it inflates your roof count with roofs that will not generate replacement demand for 18-plus years; do not let a booming exurb fool you into a high demand estimate when most of its roofs are five years old. In the long term it tells you where the replacement wave will land two decades out, which matters if you are deciding where to plant a branch for the next generation of the business. Teardown-and-rebuild activity, common in older close-in neighborhoods, quietly removes aging roofs from your pool before they ever reach replacement, so a 1955 ZIP undergoing heavy teardown will under-deliver on what its raw age profile predicts.
Step 3: Build the age curve and the baseline replacement rate
This is the heart of baseline demand. A roof gets replaced because the covering reached the end of its service life, and service life is a function of material, climate, and original install quality. Asphalt shingles, which dominate U.S. residential, run a wide range. Manufacturer warranties say 25 to 30 years, but real-world service life in a hot, sunny, or hail-prone climate is often shorter, and three-tab shingles age faster than architectural laminates.
The core idea: if the average asphalt roof lasts N years, then in steady state roughly 1/N of all roofs need replacement each year. That is the natural replacement rate. The catch is that housing stock is not evenly aged, so the steady-state assumption only holds if your building was spread out over time. It usually was not. Subdivisions get built in waves, which means roof replacements come in waves too, lagging construction by one service life.
Let me make this concrete with a cohort method, which is more accurate than a flat rate.
The cohort survival method
Instead of applying one replacement rate to all roofs, you track each construction cohort and ask: what fraction of roofs from this cohort are hitting end-of-life this year? Original roofs from a 1998 subdivision are reaching first replacement now; roofs already replaced once in 2015 are not back in the market yet.
A simplified survival approach:
- Pull the housing-by-year-built buckets per ZIP.
- Assign each bucket a current roof age (use the bucket midpoint; e.g., "built 2000–2009" → midpoint 2005 → 20 years old in 2025).
- Pick a service-life distribution. Rather than a hard cutoff at, say, 22 years, use a curve: a small share fails early (storm damage, defects), the bulk fails in a window around the expected life, and a tail lasts much longer. A reasonable residential-asphalt assumption is a peak replacement window of roughly 18 to 28 years with the mode around 22 to 24, but you should tune this to your climate. Sun Belt roofs cook and fail earlier; northern roofs in mild climates can run longer.
- For each cohort, estimate the percentage hitting replacement this year based on where it sits on the curve.
Worked example for one ZIP with 5,000 owner-occupied single-family detached roofs:
| Year built | Roofs | Current age | Est. annual replacement share | Roofs replaced this year |
|---|---|---|---|---|
| 2020 or later | 300 | <5 | 0.3% | 1 |
| 2010–2019 | 700 | ~10 | 1.0% | 7 |
| 2000–2009 | 1,100 | ~20 | 4.5% | 50 |
| 1990–1999 | 1,300 | ~30 | 6.0% (many on 2nd roof) | 78 |
| 1980–1989 | 900 | ~40 | 5.0% | 45 |
| 1970–1979 | 500 | ~50 | 4.0% | 20 |
| Before 1970 | 200 | 55+ | 3.5% | 7 |
| Total | 5,000 | ≈ 208 |
That ZIP throws off roughly 208 baseline replacements a year, or about 4.2% of its roofs annually. Across a 63,700-roof territory at a similar blended rate, baseline demand is on the order of 2,600 to 2,900 residential replacements per year before any storm.
The replacement-share column is where your judgment lives. The older cohorts have already been reroofed at least once, so their share reflects second- and third-generation replacement, not original roof end-of-life. That is why the 1990s cohort can show a higher share than the 1970s cohort: a 1995 house is hitting its first or second reroof right in the fat part of the curve, while a 1975 house's timing is more spread out across multiple past replacements.
Sanity-check the blended rate
A fully built-out, stable residential market tends to land somewhere around 3% to 5% of roofs replaced per year from baseline aging alone, depending on climate and stock age. If your cohort model spits out 9%, you have over-aggressive service-life assumptions or you are accidentally including storm demand. If it spits out 1.5%, your stock is young (new exurban growth) or your curve is too forgiving. Use that 3-to-5 band as a gut check, not a rule.
Tuning service life to your climate and material mix
The single biggest lever in the cohort model is the service-life assumption, and a national number will lie to you. Calibrate it locally:
- Sun and heat. Thermal cycling and UV are the main agers of asphalt. High-altitude, high-sun, and hot-climate roofs lose granules and embrittle faster, pulling the replacement window earlier. A roof that lasts 28 years in a mild coastal climate may be done at 18 in a high-desert subdivision.
- Material mix. Three-tab shingles age faster than architectural laminates; older stock skews three-tab, newer stock skews laminate and increasingly impact-rated. If your 1980s and 1990s cohorts were predominantly three-tab, shift their replacement window earlier than the manufacturer's modern numbers suggest.
- Ventilation and install quality. Poorly ventilated attics cook shingles from below and shorten life; a tract built by one volume builder often shares the same ventilation shortcut across thousands of homes, which is part of why those tracts fail in cohorts.
- Steep-slope vs. low-slope. If your mix includes low-slope residential sections (porches, additions, flat-roof mid-century homes), those membranes age on a different clock than the steep-slope shingle and should be modeled separately if they are a meaningful share.
A practical calibration trick: take a few subdivisions where you know the build year and you have personally reroofed a lot of homes, and back out the actual average age at replacement from your own job records. That observed number, not a warranty figure, is the mode you should center the curve on. Your own reroof history is the best climate-and-material model you will ever get, and it costs nothing to mine.
Turning roof counts into dollars
A replacement count is the operational number; a dollar figure is the one that wins the conversation with a lender, a partner, or yourself when deciding whether a market is worth entering. Convert carefully.
Multiply expected annual replacements by an average job ticket for your product mix and region. The ticket varies widely by roof size, pitch, material, tear-off layers, and labor market, so use a blended average from your own closed jobs rather than a national figure. If your serviceable market is 2,450 residential replacements a year and your blended residential ticket is a known average from your books, the serviceable market in revenue terms is that average times 2,450. Your obtainable revenue is the same math on the obtainable count.
Two cautions. First, do not publish or rely on a specific dollar-per-roof figure you cannot stand behind; pull it from your own ledger, not a guess. Second, remember that storm-year revenue and baseline-year revenue differ in mix as well as volume: storm work tends to cluster, compress timelines, and lean on insurance-paid jobs, which changes cash-flow timing even at the same job count. Size the dollars in two scenarios, quiet and storm, the same way you sized the counts.
Step 4: Layer storm and hail demand on top
Baseline is the floor. In hail and high-wind regions, event demand can dwarf it in a single season, and it behaves completely differently: concentrated, insurance-driven, and time-limited.
The physics that matters for roofing:
- Hail. Damage to asphalt shingles starts becoming likely around 1 inch diameter and gets serious past 1.25 to 1.5 inches, though it depends on shingle age, type, and impact angle. Granule loss, mat fracture, and bruising are the failure modes adjusters look for. A hail swath can total a roof that had 10 years of life left, which is why hail markets see replacement rates spike far above the aging baseline.
- Wind. Straight-line wind and tornadic wind lift and tear shingles; the threshold for meaningful shingle damage varies with shingle age and nailing, but gusts in the 60+ mph range start producing claimable damage, and older or poorly fastened roofs fail lower.
Where to get storm history (all free and authoritative):
- NOAA Storm Prediction Center (SPC) publishes daily storm reports including hail size and location, and maintains archives you can pull by date and area.
- NOAA Storm Events Database is the searchable historical record of hail, wind, and tornado events by county with magnitudes.
- NWS local offices issue storm surveys after significant events.
How to turn storm history into a demand number for your territory:
- Pull 10 to 15 years of hail and wind events for your counties from the Storm Events Database. Record date, hail size (or wind speed), and the affected area.
- Estimate the swath footprint for each significant event. A hail core large enough to damage roofs might cover a few square miles to tens of square miles. Overlay that footprint on your ZIP map to see which roofs were under it.
- Apply a damage-and-claim conversion. Not every roof under a 1-inch hail core gets replaced. A rough field heuristic: in a solid 1.5-inch-plus hail swath over asphalt-shingle neighborhoods, a large share of roofs become claim-eligible, but the share that actually files, gets approved, and reroofs within the year is lower (homeowner inertia, partial-damage denials, deductible friction). Building your own conversion from past local events beats any national rule of thumb.
- Compute an annualized storm uplift. Average the storm-driven replacements across your 10-to-15-year window to get an expected-annual figure, then keep the year-by-year variance in front of you. "Expected 1,200 storm replacements a year, but ranging from 100 in a quiet year to 5,000 after a direct metro hit" is a far more useful statement than a single average.
Worked example. Your county history shows 9 significant hail days (1.25-inch+) over 12 years. Three of them put a serious core over populated ZIPs in your territory. Those three events, by your reconstruction, made roughly 4,000, 1,800, and 6,500 roofs claim-eligible respectively, and your local experience says about 55% convert to a replacement within ~18 months. That is roughly 2,200 + 990 + 3,575 ≈ 6,765 storm replacements across 12 years from major events, plus a long tail of smaller events. Annualized, the major-event storm uplift is on the order of 560 replacements per year on average, but it arrives in chunks, not evenly.
Notice how this reframes the whole market. Baseline said ~2,700/year. Storm adds an average ~560/year that actually shows up as zero most years and 3,500 in a hit year. Your staffing and marketing posture has to flex around that lumpiness, not the average.
Forecasting storm odds, honestly
You can model the probability that a given area takes a damaging storm in a season from climatology (some regions sit in well-known hail alleys with high annual hail-day counts; others almost never see damaging hail). What you cannot do is predict that a specific roof will be hit on a specific day, and you should never sell or position as if you can. Storm modeling gives you odds and expected values for planning, not proof of damage on any particular house. Treat it as a way to weight where demand is likely to concentrate, then verify on the ground after an event.
The insurance and economic factors that gate storm conversion
A roof being claim-eligible and a roof actually getting replaced are separated by a chain of human and financial decisions, and ignoring that chain inflates every storm estimate. The gates that matter:
- Deductible structure. Many storm-region policies carry percentage-of-value wind/hail deductibles rather than flat dollar amounts, which can be large enough that marginal-damage roofs never get filed. The higher the prevailing deductible in a market, the lower your storm conversion on lighter swaths.
- Carrier posture. Insurer willingness to approve full replacement versus repair shifts over time and by region, and it directly moves your conversion rate. After a region takes heavy losses, carriers tighten, deductibles rise, and conversion on subsequent moderate events drops.
- Homeowner inertia and tenure. Owners who plan to sell soon, owners who are elderly, and absentee landlords convert at different rates than owner-occupants planning to stay. Renter-heavy ZIPs convert through property managers on a slower, more deliberate cycle.
- Material cost and labor availability. When shingle prices and labor spike after a regional mega-event, jobs get delayed and some marginal claims never proceed, stretching conversion across more months and reducing the within-year figure.
The honest move is to build your conversion percentage from your own post-storm history in the specific market, because these gates are local and they drift. A swath that converted at 60% five years ago may convert at 40% today in the same neighborhood because deductibles climbed. Keep your conversion assumption dated and revisit it after each event.
None of this involves you handling or approving claims. The homeowner owns the claim, the insurer decides coverage, and your role is to inspect, document conditions, and provide an estimate. The conversion gates simply explain why storm demand is softer than a raw swath count implies, which keeps your market estimate honest.
Seasonality and timing of demand
Demand does not arrive evenly across the calendar, and an annual number hides timing you need for staffing and cash flow. Baseline replacement skews toward the warmer and drier months in most climates because tear-offs need dry weather and homeowners act when leaks show up after wet seasons. Storm demand is concentrated in the local severe-weather season (spring and early summer hail in much of the central U.S., for example), with a tail of work stretching months past the event as claims process and crews catch up.
For planning, break your annual estimate into a rough monthly or quarterly shape using your own historical booking pattern. A market that produces 180 obtainable jobs a year does not produce 15 a month; it might produce a trickle in winter, a baseline ramp in spring, and a possible storm surge layered on top. The seasonal shape determines when you hire seasonal labor, when you push marketing spend, and how much cash buffer you need to carry crews through the slow stretch.
Step 5: From market totals to the roofs you can actually win
Now narrow the ceiling into something you can act on. Three filters:
Product/segment filter. Strip out roofs you do not serve. If you are residential asphalt only, remove commercial flat roofs, large multifamily, metal-only jobs, and anything outside your product mix. This is where a big TAM often shrinks by half.
Reachability filter. Apply your true drive-time boundary and crew capacity. A territory might contain 4,000 annual replacements you serve, but if your crews can produce 600 roofs a year at full tilt, your obtainable number is capped by production, not demand. Demand abundance is a real and common situation: the constraint is your labor, not the market.
Competitive-share filter. Estimate your realistic share. In a fragmented residential market with dozens of contractors, a strong local player might hold low-single-digit to low-double-digit percent share. Be honest. If 60 contractors chase 4,000 jobs, the average is 67 jobs each; a top-quartile operator does multiples of that, but not 40% of the market.
Estimating competitive density without guessing
You can put a real number on competition instead of eyeballing trucks. Pull the count of roofing contractors operating in your counties from licensing boards (where roofing is licensed), state contractor registries, and business-listing data, and cross-reference with how many actually advertise or pull permits in your ZIPs. Distinguish three tiers: established local production companies (your real competition for baseline work), storm-chaser outfits that appear after events and leave (your competition for event work only), and handyman-tier operators (a different price segment). Your effective share is contested mainly by the first two tiers in their respective demand types.
A useful framing: baseline demand is fought over by the stable local players year-round, so your baseline share is relatively steady and earned through reputation and marketing. Event demand draws in out-of-market chasers who flood a hit neighborhood for a season, so your event share is more volatile and won by speed and presence on the ground in the first weeks after a storm. Size the two shares separately, because they are won differently.
Worked funnel for the example territory:
| Layer | Annual roofs | Note |
|---|---|---|
| Total replacements (baseline + avg storm) | ~3,260 | Market ceiling, all contractors |
| Serviceable (residential asphalt, in radius) | ~2,450 | After product + reach filters |
| Obtainable at current capacity & share | ~180 | Capped by crews + ~7% effective share |
| Stretch (add a crew + storm year) | ~320 | What a big storm + capacity makes possible |
That funnel is the deliverable. "There are 3,260 roofs a year out there, I can serve 2,450, I'll book around 180 this year and 320 if I add a crew and a storm lands" is a sentence you can build a hiring plan, a marketing budget, and a territory decision on.
Step 6: Locate the demand inside the market (so trucks find it)
A market total is a planning number. To actually capture demand, you need to know which neighborhoods, which streets, which roofs carry it, because driving and door-knocking are expensive and most of the territory is dead weight on any given day.
This is where address-level signals beat ZIP averages. A ZIP can show a 4% replacement rate on average while one 1996 subdivision inside it is at 9% (a wall of original roofs hitting end-of-life together) and the 2018 subdivision next door is at near-zero. Canvassing the ZIP evenly wastes most of your effort. Canvassing the 1996 subdivision is a concentrated, age-driven opportunity.
The signals that rank a neighborhood or address:
- Roof age, estimated as a range from aerial and satellite imagery (granule loss, streaking, patching, and visible wear progress with age) combined with the year-built record. Age is a range, never a precise date, but a roof read as "likely 19 to 26 years" is a far better target than an unknown one.
- Storm exposure, modeled per roof from the storm swaths over that exact location, so you separate the block that took the 1.75-inch core from the block three streets over that the hail missed.
- Stock homogeneity. Tract-built subdivisions reroof in cohorts; when one neighbor replaces, the social proof and shared age push the block. A homogeneous 1990s tract is a richer vein than a mixed-age custom-home street.
Where RoofPredict fits
Doing the address-level layer by hand is brutal. Reading roof age off imagery one house at a time, reconstructing which streets sat under which hail swath, and ranking 60,000 addresses by likelihood-of-being-due is weeks of work that is stale by the time you finish.
This is the specific problem RoofPredict is built for. It estimates a roof-age range per address from aerial imagery and models storm physics per roof for the events that actually crossed that location, then ranks the doors and routes so crews knock the roofs the storm wore out and the roofs aging out, instead of canvassing evenly. In the language of this method, it operationalizes Step 6: it turns your ZIP-level demand totals into a ranked, house-by-house picture of where that demand physically sits, so the same crew hours land on roofs that are due rather than roofs that were reroofed three years ago.
Be clear about what it is and is not. It is a targeting and prioritization layer, not a lead-buying service and not a claims service. Roof age comes back as a range, not a guaranteed date, and storm modeling gives odds and exposure, not proof that a particular roof is damaged. The contractor still inspects, documents conditions and estimates, and the homeowner owns any insurance claim with the insurer deciding coverage. Used honestly, it compresses the Step-6 work from weeks of manual imagery reading into a route you can run tomorrow, and it keeps your demand estimate connected to real addresses instead of staying an abstract metro number.
The broader point stands with or without any tool: a demand estimate that lives only at the ZIP level is a planning artifact. A demand estimate resolved to addresses is a sales operation.
Step 7: Validate against reality
A model you never check drifts. Three cheap validations:
- Permit reconciliation. Pull reroof permits for a past year in a jurisdiction that permits them reliably. Your baseline model should be in the same ballpark as permits plus an allowance for un-permitted work. If your model says 2,700 and permits say 900 with a known 50% un-permit rate, you are roughly aligned (1,800 implied, model a touch high). If you are off by 5x, find the error.
- Supply-yard cross-check. Distribution reps know bundle volume moving into a market. It is directional, but a rep saying "this market eats X squares a month" can confirm whether your order of magnitude is sane.
- Your own historicals. If you have operated in the market, your past close counts at a known share imply a total. If you booked 150 jobs at a believed 6% share, that implies a ~2,500-job serviceable market, which you can compare to your bottom-up build.
When these disagree, the usual culprits are: confusing housing units with roofs, over-aggressive service-life assumptions, double-counting storm demand inside the baseline, or treating a metro number as if it were your reachable territory.
Common mistakes that wreck the estimate
- Sizing on competitors and permits instead of stock. Lagging indicators of converted demand, not the pool of demand. Foundation is housing stock and age.
- Counting housing units as roofs. Multifamily and dense urban ZIPs break this badly. Always convert to sellable roofs.
- One flat replacement rate for all roofs. Cohort waves are real; a flat rate hides the subdivision that is about to pop and the new build that is dead.
- Folding storm demand into the baseline average. You will mis-staff in both directions. Model baseline and event demand separately, then add.
- Treating storm odds as storm proof. Climatology tells you where damage is likely to concentrate; only inspection tells you a specific roof is damaged. Never position the forecast as evidence of damage.
- Ignoring capacity. A huge TAM is irrelevant if your crews cap out at 600 roofs. Obtainable demand is often labor-limited, not market-limited.
- Static estimate. Stock ages, storms hit, competitors enter and exit. Re-run the model at least seasonally, and immediately after any significant storm in the footprint.
- Skipping the segment filter. A residential contractor sizing a market that is 40% commercial flat roof will overstate the opportunity by a mile.
A full worked estimate, start to finish
Put it together for a single hypothetical market so the workflow is concrete.
Market: 12 ZIPs inside a 45-minute drive ring from the yard. Residential asphalt steep-slope contractor.
Step 1 — Boundary: 12 ZIPs listed.
Step 2 — Roofs: ACS gives ~63,700 sellable single-family detached + attached roofs after stripping multifamily and mobile homes.
Step 3 — Baseline: Cohort model across year-built buckets yields a blended ~4.3% annual replacement rate → about 2,740 baseline replacements/year. Sanity check: 4.3% sits in the 3–5% band, stock is mature, passes.
Step 4 — Storm: 12 years of Storm Events data show 3 major hail hits and several minor ones; annualized storm uplift averages ~560 replacements/year, but distributed as zero in most years and several thousand in a direct-hit year. Total expected market: ~3,300 replacements/year on average.
Step 5 — Narrowing: Product + reach filter → ~2,450 serviceable. Capacity (two crews, ~600 roofs/year) and a believed ~7% effective share cap the obtainable number around 170–180 this year, ~320 with an added crew in a storm year.
Step 6 — Location: Rank the 12 ZIPs by age-due density and storm exposure. Three 1990s tract ZIPs carry the bulk of baseline demand; the two ZIPs under the last hail core carry the event demand. Resolve to address-level routes (manually, or with per-address age-range + per-roof storm modeling) so canvassing concentrates on streets that are actually due rather than spreading evenly.
Step 7 — Validate: Reroof permits for last year imply ~1,900 after un-permit adjustment; supply rep confirms order of magnitude; prior-year close count at believed share implies ~2,500 serviceable. All within tolerance. Model accepted.
The decision it drives: baseline alone justifies the current two crews and a steady marketing spend aimed at the three aging tracts. The storm variance justifies keeping a flex-crew relationship and a rapid-response canvassing plan ready, funded only when an event lands, rather than carrying that cost year-round.
Building the model so it lives in your business
A demand estimate that sits in a one-off spreadsheet dies the day you close the tab. Structure it so it stays useful.
Make it a layered spreadsheet, not a single number. One tab per layer: a stock tab (ZIP, sellable roofs, year-built buckets, tenure), a baseline tab (the cohort table and per-cohort shares), a storm tab (event history, swaths, conversion, annualized uplift), and a funnel tab (filters down to obtainable). Each tab feeds the next. When you want to test a more aggressive service life or a different share, you change one input and watch the whole funnel move, which is the entire point of building a model instead of writing down a guess.
Keep assumptions in labeled cells, never buried in formulas. Service-life mode, storm conversion percentage, crew capacity, and effective share are the four numbers most likely to be wrong and most likely to need revisiting. Put them at the top, named, so a future you (or a sales manager) can see exactly what the estimate rests on and stress-test it.
Run scenarios, not point estimates. At minimum hold a conservative, expected, and aggressive version of the obtainable number, driven by the assumption cells. "180 expected, 120 conservative, 320 aggressive-with-storm" is a planning range. A single 180 invites false confidence and gets quoted as if it were measured.
Tie it to a decision. Every market estimate should answer a specific question: hire a crew or not, open a branch or not, chase this storm or not, raise marketing spend in these three ZIPs or not. If the model is not pointed at a decision, you will not maintain it. Write the question at the top of the funnel tab.
What changes when you operate at address resolution
Everything above produces market and ZIP totals, which run the business at the planning level. The operational leap happens when the same demand is resolved to addresses, because that is the unit a crew actually works. At ZIP level you decide how many crews and where to spend marketing dollars. At address level you decide which streets to canvass Tuesday morning and which doors to skip because they were reroofed three years ago.
The two resolutions feed each other. The ZIP totals tell you the address-level work is worth doing in the first place (do not build a 60,000-address route for a market that only throws off 180 jobs you can win; concentrate it on the three ZIPs carrying most of the age-due and storm-exposed demand). The address detail tells you whether the ZIP totals are landing where you think (if the "hot" ZIP turns out to be mostly recently reroofed homes when you read the imagery, your cohort assumption for that ZIP was wrong). Treat the planning model and the address layer as one loop, each correcting the other, and your estimate stops being a static document and becomes the way you decide where the trucks go.
Checklist: run this on your market
- Write the ZIP list inside a real drive-time boundary.
- Pull ACS housing units, units-in-structure, year-built, and tenure per ZIP.
- Convert housing units to sellable roofs for your product mix.
- Build the year-built cohort table and assign per-cohort annual replacement shares.
- Sum to baseline replacements/year; sanity-check against the 3–5% band.
- Pull 10–15 years of hail/wind events from the Storm Events Database for your counties.
- Overlay swaths, apply your own local damage-to-replacement conversion, annualize, and keep the variance visible.
- Add baseline + average storm = market ceiling; note the storm range separately.
- Apply product, reachability, capacity, and share filters → serviceable and obtainable numbers.
- Rank ZIPs (then addresses) by age-due density and storm exposure.
- Validate against permits, supply volume, and your own historicals.
- Re-run seasonally and after every significant storm.
Demand is not a vibe and it is not what the supply yard is busy with this week. It is a number you can build from the housing stock up, bound at the top by aging math, spiked by storm physics, narrowed by your own capacity, and resolved down to the streets your trucks should be on. Build it once properly and you stop guessing about hiring, stop chasing storms that were never worth the diesel, and stop knocking the roof that got replaced in 2021 while the one next door that is 24 years old never hears from you.
FAQ
What annual replacement rate should I assume for a stable residential market?
A fully built-out residential market with mature stock typically replaces roughly 3% to 5% of its roofs per year from aging alone, before any storm activity. Younger stock (new exurban growth) runs lower; hot, sunny, or hail-prone climates push the high end because asphalt shingles fail sooner there. Use that band as a sanity check on your cohort model rather than as a fixed input. If your bottom-up math lands far outside 3-5%, you likely have a service-life or double-counting error.
Where do I get free, authoritative data to size a roofing market?
Housing stock and year-built come from the U.S. Census Bureau's American Community Survey (ACS), available down to ZIP-code-tabulation-area level. Storm history comes from NOAA's Storm Events Database and the Storm Prediction Center, both searchable by county and date with hail size and wind magnitude. Building permits come from local jurisdiction permit portals or the Census Building Permits Survey. All are free. Use Census for the baseline and NOAA for the storm overlay.
Why shouldn't I just use building permit counts to estimate demand?
Permits are a lagging indicator of demand that already converted to a job, not a measure of the demand pool sitting out there. They undercount badly in storm markets where many insurance reroofs go un-permitted, they lag the homeowner's decision by weeks or months, and they are biased toward contractors already winning work. Use permits only as an end-stage sanity check against a model built from housing stock and roof age.
How is roof age estimated from aerial imagery, and how accurate is it?
Visible wear progresses with age: granule loss, surface streaking, color fade, patching, and texture changes show up in high-resolution aerial and satellite imagery. Combined with the year-built record, those signals support an age estimate. Crucially, the output is a range (for example, likely 19 to 26 years), not a precise install date. It is accurate enough to rank which roofs are probably due versus probably fine, which is what targeting needs, but it never replaces a physical inspection to confirm condition.
How do I separate baseline demand from storm demand?
Model them as two independent numbers and add them at the end. Baseline is the steady drip of roofs aging out, computed from housing stock and age cohorts; it is smooth and roughly constant year over year. Storm demand is the lumpy, insurance-driven spike after a hail or wind event, computed from storm history overlaid on your territory. If you blend them into one average you will over-staff in quiet years and under-staff after a hit, so keep the storm variance visible alongside the average.
What hail size actually damages asphalt shingle roofs?
Damage to asphalt shingles starts becoming likely around 1 inch in diameter and gets serious past roughly 1.25 to 1.5 inches, though it depends heavily on shingle age, type, and impact angle. Adjusters look for granule loss, mat fracture, and bruising. Older and three-tab roofs fail at lower thresholds than newer architectural laminates. Pull the recorded hail size from NOAA's Storm Events Database and weight your damage conversion accordingly when overlaying swaths on your territory.
Can storm modeling tell me which specific roofs were damaged?
No, and you should never position it that way. Storm and hail modeling gives you odds and exposure: it tells you which areas were under a damaging swath and where replacement demand is likely to concentrate. It cannot prove a particular roof is damaged. Only a physical inspection establishes actual damage. Use the modeling to weight and rank where to inspect first, then document real conditions on site. The homeowner owns any resulting insurance claim and the insurer decides coverage.
Why does my TAM shrink so much when I get to obtainable demand?
Three filters cut it down. The product filter removes roofs you don't serve (commercial flat, large multifamily, metal-only). The reachability filter applies your real drive-time boundary and crew capacity, which often caps you well below market demand. The share filter applies an honest competitive percentage. A 3,300-roof market can easily narrow to a 2,450 serviceable slice and a 180-roof obtainable number once capacity and share are applied. The gap between TAM and obtainable is normal and important to size.
How often should I re-run a market demand estimate?
Re-run the baseline at least seasonally, because housing stock ages continuously and cohorts cross into their replacement window over time. Re-run the storm layer immediately after any significant hail or wind event in your footprint, since a single event can add more demand in an afternoon than baseline produces in a year across the same area. Treat the estimate as a living model, not a one-time spreadsheet, and version it so you can see how the market moves.
How do I find which neighborhoods inside a market carry the most demand?
ZIP averages hide the variation that matters. Rank neighborhoods by age-due density (homogeneous tract subdivisions reroof in cohorts, so a 1990s tract can run double the ZIP-average replacement rate) and by storm exposure (the exact blocks that sat under a damaging hail core). Resolving demand down to streets and addresses, whether manually from imagery and storm swaths or with per-address age-range and per-roof storm modeling, is what turns a market total into a canvassing route your crews can actually run.
The Roofline by RoofPredict
Stay Ahead of Roofing Market Changes
Join The Roofline by RoofPredict for weekly roofing intelligence: material price signals, storm demand, insurance and regulatory updates, sales tactics, and local contractor opportunities.
Sources
- American Community Survey (ACS) — census.gov
- Census Building Permits Survey — census.gov
- NOAA Storm Events Database — ncdc.noaa.gov
- NOAA Storm Prediction Center — spc.noaa.gov
- National Weather Service — weather.gov
- Insurance Institute for Business & Home Safety (IBHS) — ibhs.org
- National Roofing Contractors Association (NRCA) — nrca.net
- International Residential Code (ICC) — iccsafe.org
- OSHA Fall Protection in Construction — osha.gov
- Bureau of Labor Statistics: Roofers — bls.gov
- FTC Guidance for Businesses on Advertising — ftc.gov
- Texas Department of Insurance: Hail and Roof Claims — tdi.texas.gov
- NOAA National Centers for Environmental Information — ncei.noaa.gov
- RoofPredict — roofpredict.com
Related Articles
How to Grow a Roofing Business Without Depending on Lead Vendors
Shared leads burn margin and put you in a price war. Here is the operator's plan to build a roofing pipeline you actually own, door by door.
How to Score Roofing CRM Leads by Likelihood the Roof Is Due
A field-tested framework for ranking your CRM by the odds each roof actually needs replacing soon, so your crew and your mail hit the right doors first.
Which Old Roofing Estimates to Follow Up On First
Your estimate pipeline is a buried gold mine, but not every old bid is worth a phone call. Here is how to rank stale estimates so you work the ones most likely to close this week.