How to Size Roofing TAM in a Service Area (Without Guessing)
On this page
Most roofers I talk to can quote their close rate to the decimal but have no idea how big their market actually is. They know last month's revenue. They do not know how many roofs sit inside a 30-minute drive of the shop, how many of those are old enough to be in the buying window this year, or how many got beaten up by the last hailstorm and never got looked at. That gap is expensive. It shows up as overbuilt crews chasing a market that was already saturated, or an underbuilt operation leaving a county wide open for the franchise that moved in two towns over.
Sizing your roofing TAM by area fixes that. TAM stands for total addressable market: the full dollar value of roofing work available to you inside the geography you can realistically serve. Done right, it is not a vanity number on a slide. It tells you how many doors to knock, how many trucks to staff, which ZIP codes deserve a mailer, and whether the growth target your partner set over beers is grounded in reality or fantasy.
What follows is the method I wish someone had handed me years ago: a bottom-up, rooftop-by-rooftop way to build the number from real inputs you can verify, plus the workflow to turn it into routes your crews can run on Monday. No fabricated industry multipliers, no "the roofing market is worth X billion" headlines that mean nothing for your county. We will count actual roofs, age them, weather them, price them, and discount them down to what you can win.
What TAM, SAM, and SOM actually mean for a roofer
The three-letter acronyms get thrown around loosely, so let me anchor them in roofing terms before we count anything.
TAM (Total Addressable Market). Every roof inside your service geography that could need work, valued in dollars of annual demand. If every aging and storm-worn roof in your territory got replaced or repaired this year, TAM is the total invoice. It is the ceiling. Nobody captures all of it.
SAM (Serviceable Addressable Market). The slice of TAM you can actually serve given what you do. If you only do steep-slope asphalt residential, every flat commercial roof, every standing-seam metal job, and every property outside your licensed states drops out. SAM is TAM minus the work you do not or cannot perform.
SOM (Serviceable Obtainable Market). The realistic share of SAM you can win in a defined period given your crews, marketing, reputation, and competition. This is the number that should drive your hiring and ad budget. It is usually a single-digit-to-low-double-digit percentage of SAM in a competitive metro.
Here is the relationship in one line: TAM is the county, SAM is your lane in the county, SOM is the slice of your lane you can grab this year. Most planning mistakes come from treating one of these as another. A roofer who hears "there's $400 million of roofing in this metro" and staffs against it is sizing to TAM when they should be sizing to SOM. A roofer who only counts last year's actual jobs is sizing below SOM and will get out-hustled.
We build TAM first because everything else is a discount applied to it. If the foundation number is guessed, every downstream decision inherits the error.
A note on how precise this needs to be
New estimators freeze here, worried they cannot get the inputs exact. You do not need exact. You need defensible and you need ranges. The difference between a TAM of $31 million and $35 million does not change a single staffing decision; the difference between $31 million and $300 million does. The goal is to land in the right order of magnitude with an honest band around it, then tighten the inputs that actually move the answer. In practice two inputs dominate the result: the annual age-out share and the average job value. Everything else, get it roughly right and move on. Spend your refinement time on the two that swing the number, and carry the rest as reasonable estimates with a note that says so.
Why the top-down number on the internet is useless to you
Search "roofing market size" and you will get a national figure in the tens of billions and a tidy growth percentage. That number is built for investors and analysts. It is worthless for deciding whether to put a second crew in the eastern half of your county.
National figures fail you for three reasons:
- Geography. Roof demand is wildly local. A coastal county that takes a hurricane every few years has a completely different replacement cadence than an inland metro that mostly ages out roofs on a 20-to-30-year clock. Averaging them tells you nothing about either.
- Roof mix. National numbers blend commercial TPO reroofs, residential asphalt tear-offs, metal, tile, and repairs into one pile. Your business does maybe two of those. The blended average prices and volumes do not map to your invoice.
- Demand timing. The thing that matters operationally is not the total stock of roofs, it is how many enter the buying window in a given year. That depends on the age distribution of roofs in your specific ZIP codes and on what the weather did to them. National averages erase exactly the variation you need.
The fix is to build bottom-up: start from individual rooftops in your geography, attach age and storm exposure to each, estimate which ones are due, price them, and sum. It is more work. It is also the only number that survives contact with a route sheet.
The bottom-up model in one picture
Before the step-by-step, here is the whole model so you can see where each input lands.
Annual roofing TAM ($) = (Rooftops in area) × (Share that are your roof type) × (Annual share entering the buying window) × (Average job value)
Then layer storm-driven demand on top for any year a qualifying hail or wind event hit the area, because storms pull future demand forward and add repairs that age alone would not have triggered.
Every term on the right is something you can estimate from public data, aerial imagery, or your own job history. The rest of the piece is how to get each one honestly, plus how to avoid the double-counting and wishful rounding that wreck these models.
Step 1: Draw the service area as a polygon, not a radius
The first mistake is defining the market as "a 25-mile radius from the shop." Circles ignore drive time, water, mountains, competitor strongholds, and the fact that half that circle might be national forest or a lake. Drive time and real road networks matter more than crow-flies distance.
Do this instead:
- Define by drive-time isochrones, not radius. A 30-minute and a 45-minute drive-time boundary around each yard or crew staging point. A free mapping tool or your CRM's territory feature can draw these. The 30-minute boundary is your core; 30-to-45 is your stretch zone with thinner margins because of windshield time.
- Snap to ZIP codes or census block groups that fall mostly inside the boundary. You want a unit you can pull data for. ZIP codes are convenient because mailing, imagery, and your own job records all key off them. Census block groups are tighter and better if you want demographic overlays, but they are more work.
- Exclude the dead zones. Open water, protected land, heavy industrial parks with no residential, and any area a competitor so thoroughly owns that your SOM there rounds to zero. Be honest. Including a town where the incumbent has run for 30 years inflates TAM with market you will never touch.
- Split residential from commercial polygons if you do both, because the counting methods differ and you do not want to blend them.
Write down the list of ZIP codes or block groups that make the cut. That list is the spine of every number that follows. A typical suburban roofer ends up with somewhere between 8 and 25 ZIP codes in the core plus stretch zones.
Why drive time beats radius, concretely
Picture two roofs the same crow-flies distance from your yard. One sits across a river with a single bridge crossing; the other is a straight shot down an arterial. The river roof might be 35 minutes of drive time; the arterial roof, 12. On a radius map they look identical. On a drive-time map they belong in different tiers. Crews bill installed roofs, not windshield hours, so every extra minute of drive eats margin twice: once in the truck on the way out and once on the way back, every day the crew works that job. A roof an extra 25 minutes out costs the crew the better part of an hour a day in lost productive time across a multi-day install. That is real money, and radius math hides all of it. This is also why two roofers in the same metro can have very different real service areas despite identical headquarters: one has a yard near a highway interchange and the other is buried in a neighborhood with no fast road out.
Handling overlapping yards and multiple crews
If you run more than one yard or stage crews from different points, draw an isochrone from each and union them. Do not double-count the overlap. The roofs that fall inside two boundaries belong to whichever staging point is closer; assign them once. The union of your isochrones is your true polygon, and the overlap zones are where you have the most scheduling flexibility because either crew can reach them.
Worked example: defining the area
Say your shop sits in a mid-size metro. The 30-minute isochrone captures 11 ZIP codes; the 30-to-45 stretch adds 6 more. Two of the 17 are mostly a regional park and an airport, so you drop them. You are left with 15 ZIP codes: 11 core, 4 stretch. Every count below gets done per ZIP and summed, so you can later see which ZIPs carry the market.
Step 2: Count the rooftops
Now count the actual roofs in those ZIP codes. You have three ways to do this, from roughest to sharpest.
Method A: Housing-unit count (fast, public, rough). The U.S. Census Bureau publishes housing-unit counts by ZIP and block group through the American Community Survey and the decennial census. Pull total housing units for each ZIP in your list. This counts dwelling units, not roofs, so apartments and condos inflate it relative to standalone roofs you can sell. Filter to single-family detached and small multifamily if residential reroofs are your bread and butter. This gets you within a reasonable band in an afternoon and costs nothing.
Method B: Parcel data (sharper, sometimes free). County assessor and GIS departments publish parcel data with structure type, year built, square footage, and often roof footprint. Many counties offer it as a free download or map service; some sell bulk extracts cheaply. Parcel data is the single best public source because year built lets you age roofs directly (more on that in Step 4). Pull parcels with a residential structure, filter out vacant land, and you have a real building count plus the data to age it.
Method C: Aerial-imagery rooftop detection (sharpest). Aerial and satellite imagery analyzed for roof outlines gives you an actual count of physical roofs, their footprint area, and often roof complexity and material. This is what high-end territory tools and some specialized data providers do. It is the most accurate because it counts the thing you actually sell: roofs you can see from the sky. It also catches structures the parcel record missed (detached garages, additions, outbuildings) and corrects for parcels with multiple buildings.
For a first pass, Method A or B is plenty. The point is a defensible building count per ZIP, not perfection.
Translating units to sellable roofs
Not every housing unit is a roof you can sell. Apply a quick filter:
| Property type | Counts toward residential reroof TAM? | Note |
|---|---|---|
| Single-family detached | Yes, 1 roof each | Core of most residential TAM |
| Townhome / rowhome | Often shared roof; count by building, not unit | Ask who controls the roof decision (HOA vs owner) |
| Small multifamily (2-4 units) | Yes, 1 roof per building | Owner usually decides |
| Large apartment / condo | Usually no for retail residential | Decision is property management; different sale |
| Mobile / manufactured | Depends on your services | Many roofers skip |
If you do commercial, count commercial structures separately from parcel or imagery data and price them on their own track, because a 40,000-square-foot TPO reroof and a 28-square asphalt tear-off do not belong in the same average.
Watch the failure modes in the count itself
Three counting errors recur, and each one quietly skews the final dollar figure:
- ZIP-to-boundary mismatch. ZIP codes are postal routes, not clean polygons; some sprawl across a county line and stick out of your isochrone. When a ZIP is only half inside your drive-time boundary, do not credit yourself the whole ZIP's roofs. Estimate the inside share, or step down to block groups for that ZIP.
- Multi-structure parcels. One parcel can hold a house, a detached garage, and a barn. If you sell all three roof types, count structures, not parcels. If you only sell the main residence, count one. Imagery-based counts handle this automatically; parcel counts need a structure-count field or you will undercount accessory roofs and overcount in dense lots.
- New construction noise. A subdivision that broke ground last year shows up in the count but has no demand for two decades. Leave it in the rooftop count for completeness but make sure it lands in the 0-to-10-year age bucket so it contributes nothing to this year's age-out flow.
None of these is fatal, but left unchecked they stack in the same direction and inflate the count by 10 to 20 percent, which then inflates every dollar downstream.
Worked example: the rooftop count
Across your 15 ZIP codes, the Census says 96,000 total housing units. Parcel data shows 61,000 of those are single-family detached and another 4,000 are 2-to-4-unit buildings. You skip large multifamily for now. Your residential rooftop count is roughly 65,000 sellable roofs. Hold that number.
Step 3: Filter to your roof type and segment (TAM to SAM)
TAM is every roof. SAM is the roofs you actually do. Apply the filters that match your business:
- Material. If you are an asphalt-shingle steep-slope shop, the metal, tile, slate, and flat membrane roofs come out. In most inland residential markets, asphalt shingle dominates the housing stock, so this filter is mild for residential roofers and severe for, say, a metal-only specialist.
- Slope and access. Roofs your crews are not set up for (extreme pitch, four stories, no equipment access) drop out.
- Segment. Retail residential, insurance/storm restoration, builder/new-construction, property management, commercial. You probably win one or two of these well. Size each separately because the average job value and close rate differ a lot.
If 88 percent of your 65,000 roofs are asphalt shingle and within your wheelhouse, your residential SAM rooftop count is about 57,000 roofs. That is the pool from which annual demand comes.
Step 4: Estimate how many roofs are due this year
This is the step that separates a real TAM from a number on a napkin. A roof you can see is not a roof that needs work. What you want is the annual flow of roofs entering the buying window, not the standing stock.
The age-out math
Asphalt shingle roofs in most climates reach the end of serviceable life somewhere in a range, not on a fixed date. Architectural shingles installed well can last into the mid-20s to early 30s of years; three-tab and poorly ventilated roofs check out sooner. Heat, sun exposure, ventilation, and install quality move the number. The honest way to model this is as a replacement window, a range of years during which a roof becomes a live prospect, not a single deterministic age.
A simple, defensible model: assume roofs in your dominant material enter a replacement window over a span of years, and that in any given year a fraction of the standing stock crosses into "due." If the typical serviceable life lands in a 20-to-30-year band, then in steady state roughly one over the average life of the stock replaces per year from aging alone, plus or minus, before you account for storms. Concretely, a stock with an average serviceable life near 25 years sheds on the order of 4 percent of roofs into the buying window annually from age, if the housing stock were evenly distributed across ages.
But housing stock is not evenly distributed. This is the key refinement most roofers miss.
Use the age distribution, not the average
Neighborhoods get built in waves. A subdivision platted in a single building boom has thousands of roofs that all age out within a few years of each other. That creates a demand wave you can see coming if you look at year-built data.
Parcel data gives you year built per structure. Bucket your roofs by decade built, then estimate which buckets are entering the window now:
| Decade structure built | Rough roof age in 2026 | Buying-window status |
|---|---|---|
| Before 1980 | 45+ years (likely on 2nd-3rd roof) | Reroof cadence; some due now |
| 1980-1989 | ~37-46 years | Likely on 2nd roof; many due |
| 1990-1999 | ~27-36 years | Original roof often past window; high due rate |
| 2000-2009 | ~17-26 years | Entering or in the window now |
| 2010-2015 | ~11-16 years | Approaching; storm-driven only for now |
| 2016-2026 | 0-10 years | Out of window barring storm/defect |
The catch: a roof's age is not the same as the building's age. A 1995 house may have a 2014 roof. Building year built is a starting estimate, not the install date. The first roof ages out, gets replaced, and the clock resets. This is exactly why a roof-age range derived from imagery or inspection beats a year-built field: the building was built once, but the roof has been replaced one or more times since.
The practical move: use year built to find neighborhoods likely to be in the window, then refine with roof-condition signals (imagery, granule loss, prior-permit data) to estimate how many of those roofs are actually original and aging out versus already replaced.
Correcting for roofs already replaced
The single biggest distortion in any age-based model is the roof that already got replaced and reset its clock. A 1992 neighborhood looks fully ripe on a year-built histogram, but if a hailstorm rolled through in 2015 and replaced 60 percent of those roofs, most of that neighborhood is now 11 years old, not 34. Pitch a TAM built on year-built alone there and you will badly overcount.
Three ways to correct, from easiest to best:
- Permit pull. Most jurisdictions require a permit for a reroof. County and municipal permit records, often searchable online, list reroof permits by address and date. Pull reroof permits for your target neighborhoods over the last 10 to 15 years and net them out of the age-out pool. Permit data is imperfect, plenty of reroofs skip the permit, but it is directional and free.
- Your own job history. You already replaced some of these roofs. Subtract addresses you have invoiced in the relevant window. Obvious, frequently forgotten.
- Roof-condition signal from imagery. A roof's actual age range read from current aerial imagery, granule loss, color, and surface texture, sidesteps the year-built problem entirely. It looks at the roof, not the building record. This is the most reliable correction because it measures the thing you care about.
Whatever method you use, write down a replacement-rate assumption per neighborhood and keep it visible. "This 1996 subdivision is roughly 40 percent already-replaced after the 2015 and 2019 storms" is a far more useful planning note than a raw year-built count, and it stops you from farming a neighborhood that is mostly young roofs wearing an old build date.
A defensible annual-due estimate
Put a range on it. For a residential SAM of 57,000 roofs with an age distribution weighted toward 1990-2010 construction (a common suburban profile), an annual age-out share in the range of 3 to 5 percent is reasonable before storms. That is:
- Low: 57,000 × 3% = 1,710 roofs/year
- High: 57,000 × 5% = 2,850 roofs/year
Use the range, not a single number. If you must pick one for planning, use the midpoint and note the band. Roughly 2,000 to 2,900 roofs per year from aging alone is your base residential demand. Resist the urge to round up.
Step 5: Layer storm-driven demand on top
Age is the steady drip. Storms are the flood. A single qualifying hail or wind event can pull years of future replacement demand into a few months and add repairs to roofs that had a decade of life left.
Storm demand behaves differently from age demand in ways that matter for sizing:
- It is concentrated. A hail core might hit a corridor of ZIP codes hard and miss the ones next door. Your storm TAM is not spread evenly across the polygon; it follows the swath.
- It is time-boxed. The window to capture storm work is short. Homeowners who are going to act mostly act within the first several months. Your SOM of storm demand depends heavily on being on the ground fast.
- It is severity-graded. Pea-size hail does cosmetic granule loss; large hail and high winds cause functional damage that drives replacements. The size of the hail and the wind speed determine how much of the swath becomes real demand versus a wash.
Sourcing storm history honestly
For the storms that have already hit your area, public records exist:
- NOAA's Storm Prediction Center and Storm Events Database log hail and wind reports with dates, locations, and magnitudes.
- The National Weather Service issues and archives severe storm and warning data by area.
- The Insurance Institute for Business & Home Safety (IBHS) publishes research on hail and wind damage to roofing assemblies that helps you judge which events actually damage roofs.
Pull the qualifying events (functional-damage hail sizes, damaging wind) for your ZIP codes over the past several years. For each, estimate the share of roofs in the affected swath that take functional damage. That share, times the roofs in the swath, times average job value, is the storm-year demand bump on top of your age baseline.
A note on what storms are and are not
A storm is odds, not proof. Modeling that a hailstorm probably damaged a corridor of roofs tells you where to inspect, not that any specific roof is damaged or that any specific claim will be paid. The roof either has functional damage or it does not, and that is determined on the roof, by inspection. Treat storm modeling as a targeting layer that tells your crews which doors to knock first, never as a guarantee about an individual property.
Worked example: a storm year
In a year with a large-hail event through 5 of your 15 ZIP codes, those ZIPs hold 22,000 of your SAM roofs. Say a third fall inside the damaging-hail swath: about 7,300 roofs. If functional-damage rates in a swath like that run, conservatively, 20 to 40 percent of exposed roofs, that is 1,500 to 2,900 storm-driven prospects stacked on top of your ~2,400 age baseline. A real storm year can nearly double your addressable demand for that year, then borrow from the next few years because those roofs got replaced early. Model the borrow-forward, or you will overstaff the year after a big storm.
Step 6: Attach dollars (the actual TAM number)
Now price it. Use your own average job values by segment, not a national average, because your pricing, roof sizes, and steepness mix are local.
Pull from your job history:
- Average residential reroof invoice (retail)
- Average residential reroof invoice (storm/insurance jobs, often larger due to full replacements)
- Average repair ticket
- Average commercial reroof, if applicable, per segment
Then multiply demand by value:
| Demand stream | Roofs/yr (midpoint) | Avg job value | Annual TAM $ |
|---|---|---|---|
| Age-out residential reroof | 2,400 | $14,000 | $33.6M |
| Storm-year residential (storm years only) | 2,200 | $16,500 | $36.3M |
| Repairs | (count separately) | $1,200 | varies |
| Commercial (if you do it) | (count separately) | $—— | varies |
In a non-storm year, this example territory carries roughly $33 to $34 million of age-driven residential reroof TAM. In a meaningful storm year, total addressable demand for that year roughly doubles. That is your TAM. It is the ceiling, and it moves with the weather.
Do not forget repairs and the long tail
The reroof number is the headline, but repairs are a real revenue stream and a lead source for tomorrow's replacements. A homeowner who calls for a $1,200 repair on a 19-year-old roof is a reroof prospect inside of two or three years. Size repairs separately, even loosely: a fraction of your serviceable stock generates a repair call each year (wind-lifted shingles, flashing failures, pipe boots), and at a few hundred to a couple thousand dollars per ticket it adds up across tens of thousands of roofs. More importantly, repairs put you on roofs before the storm-chasers and before the roof is openly shopped. Track repair demand as its own line so you can staff a service tech or two against it and harvest the reroofs it feeds.
Note what we did not do: we did not take a national per-capita roofing-spend figure and multiply by population. That top-down shortcut produces a number with no operational meaning. We built from rooftops up, so every dollar traces back to a countable roof.
Step 7: Discount TAM to SAM to SOM
TAM is the ceiling. You will not capture it. Apply two honest discounts.
TAM to SAM you mostly did already in Steps 3 (roof type) and the segment split. What may remain: geographic dead zones inside your polygon, jobs below your minimum, and work you subcontract out rather than self-perform.
SAM to SOM is the hard, honest part. Your obtainable share depends on:
- Competitive density. How many capable roofers fight for the same doors. A metro with dozens of established shops and national storm-chasers caps your share lower than a rural area you mostly own.
- Your capacity. Crews times working days times average job duration sets a hard ceiling on roofs you can install. If you can physically install 350 roofs a year, your SOM cannot exceed 350 no matter how big TAM is.
- Marketing reach and reputation. Your share of voice in the market and your review profile.
A useful sanity check runs both directions:
- Top-down SOM: SAM demand × realistic market share. In a competitive metro, an established independent might hold low-to-mid single-digit percent of annual demand; a dominant local brand might hold more. Say 5 percent of 2,400 age-out roofs = 120 roofs, plus storm-year upside.
- Bottom-up capacity: crews × installs per crew per year. Three crews × 110 roofs = 330 roofs of installed capacity.
When the two disagree, you have learned something. If demand-share SOM (120) is well below capacity (330), you have idle crews and a marketing/sales problem, not a market problem. If demand-share SOM exceeds capacity, the market can absorb more crews than you run. The gap between these two numbers is your single most useful planning output.
Step 8: Turn the number into routes
A TAM number that sits in a spreadsheet changes nothing. The payoff is converting it into where crews and canvassers go this week. Rank your ZIP codes (or block groups) by a simple density score:
Opportunity score per ZIP = (roofs in buying window) × (avg job value) ÷ (drive time from yard)
Then tier them:
- Tier 1 (work first): high due-roof density, recent qualifying storm, short drive time. These get door-knocking, targeted mail, and your best closers.
- Tier 2: good age-out density, no recent storm, reasonable drive. Steady retail farming.
- Tier 3: thin density or long drive. Opportunistic only, or drop from the plan.
This is where the abstract TAM becomes a route sheet. The ZIP that looked average on a map might carry a 1996-built subdivision of 1,400 roofs all crossing into the window this year. That is a Tier 1 farm even with no storm. The age distribution told you; the average never would have.
The full worked example, end to end
Let me run the whole model on the example territory so you can see every number connect.
- Polygon. 30-minute isochrone plus a 30-to-45 stretch zone around the yard. Seventeen ZIP codes, drop two that are mostly park and airport, keep 15 (11 core, 4 stretch).
- Rooftop count. Census shows 96,000 housing units across the 15 ZIPs. Parcel data narrows to 61,000 single-family detached plus 4,000 small multifamily buildings. Sellable residential rooftops: about 65,000.
- Roof type and segment (SAM). 88 percent are asphalt-shingle steep-slope within your wheelhouse. Residential SAM: about 57,000 roofs.
- Age-out flow. The stock skews 1990-2009. Apply a 3-to-5 percent annual age-out range, then correct down for the roughly 40 percent of the 1996 and 1999 subdivisions already replaced in prior storms. Net base demand lands around 2,000 to 2,900 roofs per year; midpoint about 2,400.
- Storm layer (storm years only). A large-hail year through 5 ZIPs exposes 22,000 SAM roofs; about 7,300 fall in the damaging swath; at 20-to-40 percent functional-damage rates that is 1,500 to 2,900 storm prospects stacked on the baseline, minus borrow-forward from the next two to three years.
- Dollars (TAM). 2,400 age-out roofs at a $14,000 average retail reroof equals about $33.6 million of base residential TAM per year. A storm year adds roughly $36 million more for that year, then the out-years dip because demand got pulled forward.
- SAM to SOM. Demand-share check: 5 percent of 2,400 is 120 roofs. Capacity check: three crews at 110 installs each is 330. The gap (120 won versus 330 buildable) says the constraint is sales and marketing reach, not market size. There is room to win more without adding a crew.
- Routes. Rank the 15 ZIPs by opportunity score. The 1996 subdivision ZIP, with 1,400 roofs crossing the window this year and a 12-minute drive, scores Tier 1 even with no storm. The two stretch-zone ZIPs at 40-plus minutes with thin age-out density score Tier 3.
That is a complete, defensible roofing TAM by area: about $33 million of annual base demand, doubling in storm years, with a clear read that the business is sales-constrained rather than market-constrained, and a ranked route plan that points crews at the 1996 subdivision first. Every figure traces to a countable roof and a stated assumption.
Estimating your obtainable share without fooling yourself
The SAM-to-SOM discount is where optimism does the most damage, so it deserves its own discipline. Share is not a number you wish; it is a number you triangulate.
Count the capable competitors. In your Tier 1 ZIPs, how many roofers can actually deliver a quality reroof on a reasonable timeline? Not the total number of business licenses, the number that show up in homeowners' consideration sets. In a mature metro that might be a dozen serious independents plus national storm-restoration brands that flood in after events. The more capable competitors, the lower your steady-state share.
Anchor share to your share of voice. Your obtainable share tracks roughly with how visible you are: review volume and rating, brand recognition, referral density, and marketing spend relative to competitors. A roofer with 600 strong reviews and a referral engine holds a higher share than a newer shop with 40 reviews, even at equal crew capacity. Be honest about where you sit.
Let capacity cap it. Whatever share you estimate, your physical install capacity is a hard ceiling. Crews times working days times average install duration is the most roofs you can put on this year. If your demand-share estimate exceeds capacity, you are capacity-constrained and the growth lever is crews. If it falls below capacity, you are demand-constrained and the lever is marketing and sales. Knowing which one you are is worth more than the TAM figure itself, because it tells you where the next dollar of investment should go.
Sanity-check against your own trailing year. You closed some number of roofs last year. Your SOM estimate should be in shouting distance of that, adjusted for what you are changing. If your model says you can win 400 roofs and you have never cracked 150, either the model is rosy or you have found genuine untapped demand; figure out which before you staff to 400.
Where roof-age and storm data per address comes in
Everything above is doable by hand with public data, and you should understand the math whether or not you ever buy a tool. The constraint is time and resolution. Aging 57,000 roofs from year-built, correcting for roofs already replaced, and overlaying storm swaths address-by-address is a lot of manual GIS work, and the year-built field is a weak proxy for actual roof age.
This is the gap RoofPredict is built to close. It scores roofs house-by-house: a roof-age range per address derived from aerial imagery (a range, because nobody can read an exact install date off a photo), plus storm physics modeled per roof so you can see which addresses sit in damaging-hail and high-wind swaths. Instead of estimating that "3 to 5 percent of a ZIP is due," you get the specific roofs that are likely aging out and the specific roofs a storm probably wore down, ranked, so canvassing and mail target the doors most likely to convert. It also enriches your own CRM or mailing list with those roof-age and storm signals, so the contacts you already paid for get prioritized instead of worked at random.
The honest limits, because they matter: the roof age is a range, not a date, and you confirm it on the roof. The storm model is odds, not proof; it tells you where to inspect, not that any given roof is damaged or that any claim will be paid. And no data tool removes the need to actually knock the door and earn the job. What it does is turn the bottom-up TAM math above into an address-level work list without weeks of manual GIS, and keep your SOM math honest by showing which roofs are genuinely in the window versus already replaced.
Use it or build the model by hand, but build the model either way. The contractors who win territory are the ones who know, before they staff up, exactly how many roofs are due and where they sit.
Staying compliant when storm and insurance enter the picture
The moment storm demand enters your sizing, sales conversations start touching insurance. Sizing the market is fine; how you talk to the homeowner is where roofers get into trouble. Know the line, and train your crews to it.
What a roofer may do: inspect a roof, document damage thoroughly with photos, and prepare an accurate repair estimate (Xactimate-aligned is the norm) for their own scope of work. You can state facts about what you found and what it costs to repair it. You hand that documentation to the homeowner.
What a roofer may not do, and should never advertise:
- Negotiate, adjust, or "handle" the insurance claim for the homeowner for a fee. That is public adjusting and requires a license in most states.
- Interpret the homeowner's policy or coverage. You are not their adjuster or agent.
- Promise a specific payout, approval, or that the claim "will go through." You cannot know that.
- Promise the deductible is waived, absorbed, eaten, or gone. In many states that is illegal, and it is a fast way to lose your license and invite fraud charges.
- Advertise a "free roof" or that insurance will cover everything.
- Represent the homeowner against the insurer.
The safe frame is clean: you document, you write an accurate estimate, you give it to the homeowner. The homeowner files the claim. The insurer decides coverage. Your job is the roof and the paperwork that describes it honestly. Market sizing and targeting tell you which roofs likely qualify on age and storm exposure and where to knock; they never tell you a claim will be paid, and your sales scripts should reflect that. Put this do-not-say list in your onboarding so a new canvasser does not freelance a promise that costs you the company.
What pros get wrong when sizing roofing TAM
After watching a lot of these models get built, the same mistakes recur. Avoid them.
Counting standing stock instead of annual flow. "There are 57,000 roofs in my market" is not your TAM. Your annual TAM is the roofs that enter the buying window per year. The stock matters for the long run; the flow pays this year's bills.
Trusting year-built as roof age. The building was built once; the roof has been replaced since. Without a correction for already-replaced roofs, you will badly overcount the old neighborhoods and chase roofs that are 8 years old.
Ignoring the age distribution. Using a single average roof life across the whole market hides the building-boom waves that create your best farms. The subdivision that all goes at once is invisible in an average and obvious in a year-built histogram.
Sizing to TAM instead of SOM. Staffing against the ceiling. Crews installed against TAM sit idle; the budget set against TAM bleeds. Plan to SOM, with the capacity-versus-share gap as your guide.
Treating storm odds as proof. Modeling that a corridor probably got hit is a targeting tool. Writing it into a sales pitch as "your roof is damaged, insurance will cover it" is both wrong and a compliance landmine. Inspect, then claim what you find.
Double-counting storm and age demand. A roof that storm-replaced this year is not also age-replacing in three years. When you layer storm demand on top of age demand, subtract the borrow-forward, or the out-years are inflated.
Forgetting drive time. A roof 50 minutes away at retail margin is worth less to you than one 10 minutes away, even at the same job value. Bake windshield time into the opportunity score or your crews will burn the margin on the highway.
Never updating the model. Roofs age, neighborhoods get built, storms hit. A TAM model is a living estimate. Re-run it at least annually, and immediately after any qualifying storm, so your route plan reflects the demand that actually exists.
A repeatable annual workflow
Put the whole thing on a cadence so it does not rot in a drawer.
- Q4 each year: redraw drive-time polygons if you opened or closed a yard or added crews. Refresh the ZIP/block-group list.
- Pull fresh counts: update rooftop counts from parcel or imagery data. Re-bucket by year built.
- Re-age the stock: correct year-built for known replacements (permits, prior jobs, imagery). Recompute the annual age-out flow as a range.
- Refresh storm history: pull the past year's qualifying hail and wind events from NOAA/NWS. Map swaths to ZIP codes. Subtract borrow-forward from future-year age demand where storms pulled it ahead.
- Reprice: update average job values per segment from the trailing 12 months of your own invoices.
- Recompute TAM/SAM/SOM: run both the demand-share and capacity SOM checks. Note the gap.
- Re-rank ZIPs: recompute opportunity scores, re-tier, hand Tier 1 to the canvassing and mail plan.
- After any major storm, mid-year: rerun steps 4 through 7 for the affected ZIPs within days, not months. Storm SOM rewards speed.
A quick-start checklist
If you want to build a first version this week, here is the minimum:
- Draw a 30-minute drive-time boundary around each yard; list the ZIP codes inside.
- Pull single-family housing-unit or parcel counts per ZIP (Census or county GIS).
- Filter to your roof type and segment to get SAM rooftops.
- Bucket roofs by decade built; flag the 1990-2009 buckets as your near-term window.
- Apply a 3-to-5 percent annual age-out range to get base demand roofs/year.
- Pull the last 3 years of qualifying hail/wind from NOAA for those ZIPs; flag storm-affected ones.
- Multiply demand by your own average job value to get TAM dollars.
- Run the capacity check: crews × installs per crew per year.
- Rank ZIPs by opportunity score; pick your Tier 1 farms.
- Schedule a re-run for next quarter and after any storm.
That is a defensible, bottom-up roofing TAM by area built from countable roofs, honest about its ranges, and pointed straight at a route sheet. Build it once and the number stops being a guess and starts being a plan.
The one-sentence version
Count the roofs you can serve, figure out how many cross into the buying window each year from age and from storms, price them with your own numbers, discount honestly to what your crews can win, and rank the ZIP codes so the work goes where the due roofs actually are.
FAQ
What is roofing TAM and why size it by area?
TAM (total addressable market) is the full annual dollar value of roofing work available inside a geography you can serve. Sizing it by area, ZIP code or county rather than nationally matters because roof demand is intensely local: it depends on the age distribution of roofs in your specific neighborhoods and on what storms have hit them. A national figure cannot tell you whether to staff a second crew in the eastern half of your county; a bottom-up local TAM can.
How do I count the roofs in my service area?
Three ways, roughest to sharpest. Pull single-family housing-unit counts by ZIP from the U.S. Census for a fast public estimate. Download parcel data from your county assessor or GIS for structure type and year built. Or use aerial-imagery rooftop detection, which counts physical roofs directly and catches structures parcel records miss. For a first pass, Census or parcel data is plenty; the goal is a defensible per-ZIP building count, not perfection.
How many roofs in my area actually need replacement each year?
What matters is the annual flow of roofs entering the buying window, not the standing stock. For a typical suburban asphalt-shingle market, an age-out range of roughly 3 to 5 percent of serviceable roofs per year is defensible before storms. Refine it using year-built data to find building-boom waves, and correct for roofs already replaced, since a building's age is not the same as its roof's age. Always carry the estimate as a range, not a single number.
Why is the national roofing market size figure not enough?
National figures blend coastal and inland demand, commercial and residential, and every roof material into one average, erasing exactly the local variation you need. They describe stock, not the annual demand flow that pays this year's bills. Building bottom-up from rooftops in your own ZIP codes produces a number that traces back to countable roofs and survives contact with a route sheet, which a top-down national multiplier never does.
How do I factor storms into my market size?
Pull qualifying hail and wind events for your ZIP codes from NOAA's Storm Prediction Center, the Storm Events Database, and the National Weather Service, and use IBHS research to judge which event severities actually damage roofs. Map the damaging swaths, estimate the share of exposed roofs that take functional damage, and stack that on your age baseline for storm years. Subtract the borrow-forward from future years, because storm-replaced roofs will not also age-replace later.
What is the difference between TAM, SAM, and SOM for a roofer?
TAM is every roof in your geography valued in dollars, the ceiling. SAM is the slice you can actually serve given your roof types and segments. SOM is the realistic share of SAM you can win this year given crews, marketing, reputation, and competition. Plan and staff against SOM, not TAM. The gap between your demand-share SOM and your physical install capacity is the most useful planning number the model produces.
Can a roofer use storm data to tell homeowners their claim will be approved?
No. Storm modeling is odds, not proof. It tells you which roofs likely sit in a damaging swath so you know where to inspect first; it never confirms a specific roof is damaged or that a claim will be paid. You may inspect, document damage, and prepare an accurate repair estimate for your own scope and hand it to the homeowner. You may not promise a payout or approval. The homeowner files the claim and the insurer decides coverage.
What insurance-related things can a roofer not say or advertise?
Do not negotiate, adjust, or handle a homeowner's claim for a fee, interpret their policy or coverage, promise a specific payout or approval, promise the deductible is waived, absorbed, or gone, advertise a free roof, or represent the homeowner against their insurer. Several of those are illegal in many states and amount to unlicensed public adjusting or insurance fraud. The safe frame: document, estimate your own scope accurately, and let the homeowner file and the insurer decide.
How do I turn a TAM number into something my crews can act on?
Rank your ZIP codes or block groups by an opportunity score: roofs in the buying window times average job value, divided by drive time from the yard. Tier them. Tier 1 is high due-roof density with a recent qualifying storm and short drive, and gets your door-knocking, targeted mail, and best closers. Tier 2 is steady retail farming, Tier 3 is opportunistic or dropped. That converts the abstract dollar figure into a weekly route sheet.
Where does RoofPredict fit into sizing roofing TAM?
You can build the whole model by hand from public data, and you should understand the math regardless. RoofPredict closes the time-and-resolution gap by scoring roofs house-by-house: a roof-age range per address from aerial imagery plus storm physics modeled per roof, so you get the specific addresses likely aging out or storm-worn instead of a per-ZIP percentage, and it enriches your own CRM and mailing list with those signals. The roof age is a range you confirm on the roof, and the storm model is odds, not proof.
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
- National Roofing Contractors Association (NRCA) — nrca.net
- Insurance Institute for Business & Home Safety (IBHS) — Hail — ibhs.org
- NOAA Storm Prediction Center — spc.noaa.gov
- NOAA NCEI Storm Events Database — ncdc.noaa.gov
- National Weather Service — weather.gov
- U.S. Census Bureau — American Community Survey — census.gov
- U.S. Census Bureau — QuickFacts — census.gov
- OSHA — Fall Protection in Roofing — osha.gov
- International Code Council — International Residential Code (IRC) — iccsafe.org
- U.S. Bureau of Labor Statistics — Roofers — bls.gov
- Federal Trade Commission — Advertising and Marketing Basics — ftc.gov
- Texas Department of Insurance — Public Insurance Adjusters — tdi.texas.gov
- National Association of Insurance Commissioners (NAIC) — naic.org
- RoofPredict — roofpredict.com
Related Articles
How to Present a Roof Inspection Report That Closes the Job
The inspection didn't lose the job. The presentation did. Here's how top roofers turn a roof report into a signed contract at the kitchen table.
How to Build Homeowner Trust Fast on a Roofing Sales Call
Trust is the whole sale. Here is how top roofing reps earn it in the first five minutes at the door and carry it through the close.
How to Prequalify a Roof Before Driving Out: A Field-Tested System for Roofing Crews
Every truck roll you make on a roof that wasn't ready is margin you set on fire. Here's the desk work that tells you which addresses to drive to and which to skip.