Best ZIP Codes for Roofing Leads: How to Find and Rank Them
On this page
Every roofing company I have ever worked with eventually asks the same question, usually after a slow month: where should we actually be working? Somebody pulls up a map, drops a finger on a neighborhood that "felt good last spring," and the crews roll out. Six weeks later the canvassing report comes back and half the doors were rentals, a third of the roofs were two years old, and the one subdivision that printed money got skipped because nobody remembered it existed.
Picking the right ZIP codes is not a vibe. It is a scoring problem. The contractors who consistently beat their cost-per-acquisition are not luckier or harder working than you are. They have a repeatable way of ranking territory before a single door gets knocked, and they revisit that ranking every storm season instead of relying on muscle memory. Below is the exact method I use when a roofing company hands me a metro area and says "tell us where to go." It works for retail re-roofs, it works for storm restoration, and it works whether you canvass on foot, mail, or run paid ads geo-fenced to a polygon.
Nothing here requires a data science team. You need a spreadsheet, a few public data sources, your own past job history, and the discipline to score honestly instead of falling in love with a hunch.
Why "best ZIP code" is the wrong question until you define "best"
The phrase "best ZIP codes for roofing leads" hides an assumption that wrecks a lot of territory plans: that there is one universal answer. There is not. The best ZIP code for a $14,000 architectural-shingle retail company is a different place than the best ZIP code for a storm-chasing crew that lives on insurance work, which is different again from a commercial flat-roof outfit.
So before you score anything, write down what a good lead means for your business in one sentence. Here are three honest examples from real companies:
- Retail re-roof company: "A homeowner who owns a single-family house 18+ years old, has the income to pay or finance $12k-$25k, and is not currently in a claims process."
- Storm-restoration crew: "A homeowner whose roof took a hail or wind event in the last 6-12 months, whose roof is old enough that damage is plausible and documentable, who can be inspected before the carrier deadline passes."
- Premium standing-seam metal installer: "A homeowner in a $600k+ home doing a planned upgrade, not a distress purchase, who will wait 8 weeks for material."
Those three definitions point at completely different maps. The retail company wants aging housing stock and disposable income. The storm crew wants a recent, verifiable weather event over older roofs. The metal installer wants high home values and almost ignores roof age. If you skip this step, you will average all three into a mushy score that is right for nobody.
Write your definition down. Everything that follows is just a way of measuring how closely each ZIP matches it.
The five signals that actually predict roofing demand
After you have a definition, you score ZIPs on a small number of signals. I have tested a lot of variables over the years, and most of them are noise. These five carry almost all the predictive weight:
- Roof age / housing stock age — how old are the roofs, in aggregate
- Storm exposure — what hail and wind the area has actually taken
- Home value and owner-occupancy — can they pay, and do they own the decision
- Density and roof type — how many qualifying roofs per square mile, and are they roofs you install
- Competition and saturation — how many other crews are already eating there
Notice that "population" is not on the list and "income" is folded into home value. A ZIP can be packed with people and still be terrible territory if it is all apartments and new construction. Let's take each signal and turn it into something you can actually pull and score.
Signal 1: Roof age and housing stock
Roof age is the single most useful number in roofing territory planning, and it is the one most companies guess at. The logic is simple. Asphalt shingle roofs in the U.S. are typically replaced somewhere in the 15-to-25-year window depending on shingle grade, ventilation, and climate. A neighborhood built in 2003 is rolling into prime replacement age right now. A neighborhood built in 2019 is not, no matter how nice the houses look.
The cheap, public proxy for roof age is median year structure built, which the U.S. Census Bureau publishes in the American Community Survey (table B25035) down to small geographies. It is free and it is a fine first cut. If a ZIP's housing stock has a median build year of 2001, you know a large share of those original roofs are now in or near replacement age, especially if nobody re-roofed after the original install.
But median build year has two real limitations you must respect:
- It tells you when the house was built, not when the roof was last replaced. A 1995 house with a 2018 re-roof is a dead door for the next decade. The Census number can't see that re-roof.
- It is a median for the whole ZIP. ZIPs are big and lumpy. One ZIP can contain a 1985 subdivision, a 2015 subdivision, and a stretch of new townhomes. The median washes that out.
For a first-pass score, median build year is good enough to rank ZIPs against each other. To go from a ZIP score to a route you can actually canvass, you need roof-level age, not ZIP-level age. This is exactly where aerial-imagery roof-age estimation earns its keep, and I'll come back to it in the data section. For now, score the signal like this:
| Median year structure built | Roof-age score (retail) |
|---|---|
| 1970-1990 | 5 (oldest stock, but watch for prior re-roofs) |
| 1991-2005 | 5 (prime replacement window now) |
| 2006-2012 | 3 (approaching, watch closely) |
| 2013-present | 1 (too new for retail) |
Note the nuance: very old stock (pre-1990) scores high but carries a hidden risk that many of those roofs were already replaced once, so the original age is misleading. Mid-build (1991-2005) is often the cleanest target because a meaningful share are still on their first or second roof and rolling into age now.
Signal 2: Storm exposure
If any part of your business is storm restoration, storm exposure can outrank roof age entirely. A six-month-old roof does not get replaced through a claim. A 16-year-old roof that took golf-ball hail last month is the most valuable door in the metro, because the damage is plausible, documentable, and time-sensitive.
The public data for storm exposure is genuinely good and genuinely free. Two sources do most of the work:
- NOAA / NWS Storm Prediction Center storm reports and the Storm Events Database. These log hail reports (with estimated stone size) and wind events by date and location. You can pull historical hail swaths and see which areas have a real track record of large hail versus which just get pea-sized nuisance hail.
- Local NWS office event summaries, which often include damage surveys after significant wind events.
The mistake here is treating all hail as equal. A 0.75-inch hail report and a 2-inch hail report are different planets. Quarter-size (1 inch) is roughly the threshold where asphalt shingle bruising becomes common and documentable; below that you are mostly looking at cosmetic granule loss that carriers and homeowners will fight you on. Score the largest credible stone size and the recency:
| Storm exposure (last 18 months) | Score (storm crew) |
|---|---|
| Hail 1.75"+ OR surveyed wind 70+ mph | 5 |
| Hail 1.0"-1.75" | 4 |
| Hail 0.75"-1.0" | 2 |
| No qualifying event | 0-1 |
There are two honest caveats about storm data that separate pros from amateurs. First, point hail reports are sparse and biased toward where people were standing to report them; a swath can clip a neighborhood that never generated a single report. Second, ground-truth matters more than the map. A storm report tells you a stone fell somewhere near here, not that any specific roof is damaged. You confirm that on the roof, with photographs, not from a spreadsheet. Use storm data to prioritize where to inspect, never to promise anyone a result.
That distinction is more than good practice, it is the legal line. As a roofing contractor you can inspect a roof, document what you find, and prepare an accurate estimate to repair the work you would do. You cannot tell a homeowner their claim will be approved, that their deductible disappears, or that the roof is "free." The homeowner files the claim and the insurer decides coverage. Storm data helps you find the roofs worth looking at; the roof and the camera tell the truth.
Signal 3: Home value and owner-occupancy
A qualifying roof on a house nobody can afford to fix is not a lead. Two numbers handle this: median home value and owner-occupancy rate, both in the same Census ACS tables you already pulled (B25077 for value, B25003 for owner vs renter).
Owner-occupancy is the underrated one. Renters do not buy roofs. A ZIP that is 65% renter-occupied has, in effect, a third fewer doors than its house count suggests, and the owner doors are landlords who are slow and price-sensitive. For most residential roofing, you want owner-occupancy above roughly 70%.
Home value tells you affordability and which product fits. For retail, you want a sweet spot, not the maximum. Very low-value areas struggle to finance a re-roof; very high-value areas often have property managers, HOAs, and longer sales cycles. The retail sweet spot in most metros is the broad middle of owner-occupied single-family housing.
| Owner-occupancy | Score |
|---|---|
| 75%+ | 5 |
| 65-75% | 3 |
| 50-65% | 2 |
| Under 50% | 1 |
For the premium metal installer from earlier, this signal flips: they weight home value heavily and barely care about roof age, because their buyer is doing a planned upgrade, not a repair.
Signal 4: Density and roof type
Canvassing economics are driven by qualifying roofs per square mile. A ZIP with great scores but five houses per acre of new townhomes is a slog; your reps burn the day walking. A dense, mature single-family subdivision lets a rep hit 80-120 doors in a productive afternoon.
Roof type matters more than people admit. If you only install asphalt shingle, a ZIP full of tile or low-slope flat roofs is not your territory even if every other number is perfect. You can eyeball roof type from aerial imagery quickly, or infer it from regional construction norms (clay tile in parts of the Southwest, etc.).
This is also where you screen out HOAs with mandatory roofing covenants and master-planned communities that route everything through a preferred vendor. Those look great on paper and convert terribly cold.
Signal 5: Competition and saturation
The best-scoring ZIP in the metro is often the worst place to start, because every other roofer already figured that out. After a notable storm, a high-damage ZIP can have a dozen crews and three national chains canvassing the same streets within 72 hours. Your contact rate craters and your close rate follows.
Saturation is hard to measure precisely, but you can proxy it:
- Yard sign density — drive the area, count competitor yard signs and dumpsters. It is crude and it is shockingly accurate.
- Permit pulls — many jurisdictions publish roofing permits. A spike in roofing permits in a ZIP tells you crews are already working it hard.
- Search and ad competition — if paid clicks for "roof replacement [city]" are brutally expensive, the market is hot and crowded.
The move is not to avoid hot ZIPs entirely; it is to find the adjacent under-worked ZIPs. A storm swath usually clips several ZIPs, and the famous one gets swarmed while the one next door, with similar damage and half the competition, gets ignored. Those neighbors are frequently your best return on effort.
Building the score: a worked example
Let's turn this into an actual number. I use a weighted 1-5 score per signal, with weights set by the business definition you wrote earlier. Here is how a retail re-roof company and a storm crew would weight the same five signals differently:
| Signal | Retail weight | Storm weight |
|---|---|---|
| Roof age / housing stock | 35% | 20% |
| Storm exposure | 5% | 40% |
| Home value + owner-occ | 30% | 15% |
| Density + roof type | 20% | 15% |
| Competition (inverse) | 10% | 10% |
Now score three hypothetical ZIPs for a retail company. Each signal is rated 1-5, then multiplied by its weight.
ZIP A — mature suburb, median build 1998, $385k homes, 82% owner-occ, dense single-family, light competition:
- Roof age 5 × 0.35 = 1.75
- Storm 2 × 0.05 = 0.10
- Value/owner 5 × 0.30 = 1.50
- Density/type 5 × 0.20 = 1.00
- Competition 4 × 0.10 = 0.40
- Total = 4.75
ZIP B — new master-planned, median build 2016, $520k homes, 88% owner-occ, dense but covenant-controlled roofing:
- Roof age 1 × 0.35 = 0.35
- Storm 2 × 0.05 = 0.10
- Value/owner 5 × 0.30 = 1.50
- Density/type 2 × 0.20 = 0.40 (HOA roofing restrictions)
- Competition 3 × 0.10 = 0.30
- Total = 2.65
ZIP C — older urban fringe, median build 1979, $190k homes, 58% owner-occ, mixed density, moderate competition:
- Roof age 4 × 0.35 = 1.40 (old, but many already re-roofed)
- Storm 2 × 0.05 = 0.10
- Value/owner 2 × 0.30 = 0.60
- Density/type 3 × 0.20 = 0.60
- Competition 3 × 0.10 = 0.30
- Total = 3.00
For this retail company, ZIP A is the clear winner, ZIP C is a maybe, and ZIP B looks attractive (high value, new, affluent) but scores poorly because the roofs are too young and locked behind covenants. That last point is the whole reason to score instead of guess: ZIP B is exactly the kind of shiny territory a rep talks the owner into, and it would bleed money.
Run this for every ZIP in your metro and you get a ranked list. Now the planning question changes from "where does it feel good" to "work down the ranked list, accounting for competition."
Handling ties and the "good on paper" trap
When two ZIPs score within a few tenths of each other, the tiebreaker is almost always density and competition, not the headline signals. Between two ZIPs that both score 4.4, take the denser one with fewer competitor yard signs every time, because the canvassing economics will be better even though the spreadsheet calls them equal. Tenths of a point are inside the noise of your inputs; physical efficiency on the ground is not.
The other thing the worked example exposes is the "good on paper" trap. ZIP B scored well on three of five signals and a rep could build a persuasive case for it: affluent, growing, low cancellation risk. The score saved you from that pitch because it forced the roof-age and density signals into the math at their real weight. Whenever someone wants to override the ranking with a story, make them change a weight or a score, in writing, and explain why. That one rule kills most bad territory decisions before they cost you a season.
Calibrating your weights with a back-test
The weights I gave are starting points, not gospel. The honest way to set them is to back-test against your own results. Take last year's closed jobs, bucket them by the ZIP they came from, and check which signal best separates your high-performing ZIPs from your duds. If owner-occupancy turns out to predict your close rate better than home value, push weight toward owner-occupancy. If you are a pure storm shop, you will likely find storm exposure swamps everything else and you can collapse value and density into a single "can they pay and is it dense enough" gate.
Do not over-fit. You have a few hundred jobs, not a few million, so keep the model coarse: five signals, round weights, 1-5 scores. A model you can explain to your sales manager on a whiteboard is worth more than a precise one nobody trusts. The goal is a ranking that is directionally right and repeatable, not a regression that impresses a statistician.
From ZIP score to canvassing route: closing the resolution gap
Here is the limitation nobody tells you about ZIP-level scoring: a ZIP is far too coarse to canvass off of. The average residential ZIP covers several square miles and contains multiple neighborhoods built decades apart. Your beautiful 4.75 ZIP score is a blend of a perfect 1996 subdivision and a useless 2017 one. Send a rep in cold and they will spend half the day on the wrong streets.
So the ZIP score is a filter to pick where to dig, and then you need roof-level resolution to build the actual route. There are three ways to get from ZIP to route:
- Drive and eyeball. A sales manager drives the ZIP, identifies the subdivisions that look right (consistent build era, curling or stained shingles, no recent re-roofs), and hand-draws the route. Accurate, but slow and it does not scale past one or two markets.
- Parcel + build-year data per address. County assessor records often carry a year-built per parcel. Better than ZIP medians, but build year still is not roof age, and assembling it is tedious.
- Roof-age estimation from aerial imagery, per roof. This is the resolution you actually want: an estimate of how old each individual roof is, scored house by house, so the route is built from the doors most likely to be due.
That third option is where a tool like RoofPredict fits the workflow, and it is worth being precise about what it does and does not do.
Where RoofPredict fits (and where it doesn't)
RoofPredict is built to answer the question that ZIP scoring leaves open: within a good area, which specific roofs are actually due? It estimates a roof-age range for individual addresses from aerial imagery, and layers storm physics modeled per roof — modeling the hail and wind a specific roof has been exposed to — so you can rank doors and routes instead of whole ZIPs. It also enriches a contractor's own CRM or mailing list with those roof-age and storm signals, so the list you already own gets sharper.
The honest framing matters here, because over-promising on this kind of data is how companies waste money:
- Roof age is a range, not a date. Aerial imagery can tell you a roof reads as roughly 15-20 years old based on its appearance and history; it cannot read a permit and tell you it was installed on a Tuesday in 2009. You use the range to prioritize, then confirm on the roof.
- Storm modeling gives odds, not proof. Modeling that a roof was likely exposed to 1.5-inch hail is a reason to inspect it first, not evidence that it is damaged or that any claim will pay. The inspection and the photos establish damage. The homeowner files; the insurer decides.
- It ranks effort; it does not replace selling. The data points your reps at the right doors. Closing the door is still the rep's job.
Where it changes the math is canvassing efficiency. If a cold ZIP is 25% qualifying roofs, your reps knock four doors to find one prospect. If roof-age and storm signals let you build a route that is 60-70% qualifying roofs, the same crew finds far more prospects in the same hours, and your cost per inspection drops without hiring anyone. That is the entire economic argument: not more leads from thin air, but the same labor pointed at the roofs that are actually due, in the ZIPs your scoring already flagged.
It is also the tool I would reach for to do storm-restoration targeting responsibly. You find roofs that are both old enough for damage to be plausible and were modeled to take a real event, you prioritize those inspections before carrier deadlines, and you document thoroughly on the roof. You are not interpreting anyone's policy or promising a payout. You are deciding which roofs to climb first.
Matching the channel to the ZIP
A ranked ZIP list is only half the plan. The other half is deciding how you reach each tier, because the right channel changes with the score. Treating every ZIP with the same tactic wastes money on both ends.
Top-tier ZIPs (high roof age, high owner-occ, manageable competition): these earn your most expensive, highest-conversion effort — door-to-door canvassing and direct mail tied to roof-level routes. The cost per touch is high, so you only spend it where the qualifying-roof density justifies it. A canvasser on a route that is 60% due roofs pays for themselves; the same canvasser on a 20% route does not.
Mid-tier ZIPs (decent but mixed): these suit cheaper, wider nets — Every Door Direct Mail by carrier route, where you can drop a whole route without buying a list, and geo-fenced digital ads that only show inside the polygon. You are not paying a human to walk doors here; you are fishing for the self-identifying prospect.
Storm-event ZIPs (fresh qualifying weather over older roofs): speed beats everything. The first credible roofer on the door after a real event has a structural advantage, so these get immediate canvassing and rapid inspection scheduling, prioritized by roof age inside the swath. The window is short and the competition arrives fast.
Direct mail deserves one specific note: the USPS EDDM program lets you target by carrier route, which is finer than a ZIP and maps reasonably well onto neighborhoods. If your ZIP score flagged an area but you know only part of it is the right vintage, EDDM carrier routes let you mail the good half and skip the new-construction half, which roughly halves your cost per qualified impression. Pair that with roof-age data and you can mail the carrier routes with the oldest housing stock first.
The principle underneath all of this: spend your most expensive channel only where density and qualification are highest, and use cheap wide-net channels to keep mid-tier ZIPs warm without burning labor. A common mistake is canvassing a mid-tier ZIP on foot because it is close to the office. Proximity is not a targeting signal. Let the score and the channel-fit decide.
Reading a storm swath without overpaying for the obvious
Storm work has its own targeting logic that sits on top of the base ZIP score, and it is worth a closer look because it is where the most money is made and lost.
When a significant hail or wind event moves through, it does not respect ZIP boundaries. It carves a swath, often a few miles wide and many miles long, that clips the edges of some ZIPs and the cores of others. The reflexive move is to canvass the ZIP that took the worst, most-reported damage. Everyone does this, which is exactly why you should be careful. Within 72 hours that core ZIP has national chains, local crews, and out-of-state storm-chasers all working the same streets. Your knock is the fifth that homeowner has heard, your contact rate collapses, and the inspections you do get are competitive bids instead of fresh opportunities.
The disciplined approach is to map the full swath against your roof-age data and look at the whole impact zone, then rank inside it by two things competitors ignore: roof age and saturation. A roof has to be old enough for hail or wind damage to be plausible and documentable; a brand-new roof in the dead center of the swath is a poor target because even real impact marks on a two-year-old roof rarely produce a credible replacement scope. So you want the overlap of modeled impact and older roofs, and within that overlap you want the ZIPs and carrier routes that the swarm has not reached yet — usually the edges of the swath and the quieter ZIP next door.
A concrete sequence for the first week after a real event:
- Day 0-1: Pull the storm reports and overlay the swath on your roof-age map. Identify the older-roof neighborhoods inside the impact zone.
- Day 1-3: Send crews to the highest roof-age, lowest-saturation pockets first — typically not the headline ZIP. Schedule inspections fast; the early credible inspector wins.
- Day 3-10: As the obvious ZIP gets saturated, expand into the adjacent under-reported ZIPs in the same swath. These often have comparable exposure and a fraction of the competition.
- Throughout: On every roof, document thoroughly with dated photographs and measurements, and prepare an accurate estimate of the repair. Hand it to the homeowner. They decide whether to file; the carrier decides coverage. Your job is the inspection, the documentation, and the honest scope — not the claim.
That last point is not a disclaimer bolted on for legal cover; it is how you build a storm business that survives more than one season. Crews that win the door by promising approvals and free roofs generate complaints, chargebacks, and regulatory attention. Crews that win the door by being the most thorough, most professional inspector on the street build a referral base that outlasts the storm. The data gets you to the right roofs first. Your conduct on those roofs decides whether the business compounds or implodes.
Pulling the data yourself: a step-by-step
If you want to build the ZIP scoring sheet by hand before layering on any roof-level tool, here is the concrete workflow. Budget a focused afternoon for one metro.
Step 1 — List your ZIPs. Get every ZIP code (technically ZCTA, the Census version of a ZIP) in your service radius. The Census Bureau publishes ZCTA boundaries and you can grab the list from your metro's county pages.
Step 2 — Pull housing stock age. From the Census ACS, table B25035 (median year structure built) for each ZCTA. Free via the Census data portal. This feeds Signal 1.
Step 3 — Pull value and occupancy. From ACS table B25077 (median home value) and B25003 (owner vs renter occupied). This feeds Signal 3.
Step 4 — Pull storm history. From the NOAA Storm Events Database and SPC storm reports, log hail (with max stone size) and significant wind events touching each ZIP over your relevant window — 12-18 months for active storm work, longer for a historical pattern. This feeds Signal 2.
Step 5 — Assess density and roof type. Use aerial imagery (or even a free mapping app) to eyeball each candidate ZIP's dominant housing density and roof material. Flag HOA-controlled and master-planned areas. This feeds Signal 4.
Step 6 — Estimate competition. Pull roofing permit counts if your jurisdiction publishes them, note paid-search competitiveness, and do windshield drives of your top candidates counting yard signs and dumpsters. This feeds Signal 5.
Step 7 — Score and weight. Drop it all into a sheet, score each signal 1-5, apply your business-specific weights, and sort. You now have a ranked territory list with the math written down so the next argument about "where to go" is settled by the sheet, not the loudest voice in the room.
Step 8 — Resolve to routes. Take your top ZIPs and go to roof-level: drive them, pull parcel year-built, or use roof-age and storm data to build routes weighted toward roofs that are actually due. This is where ZIP scoring becomes a day's worth of doors.
Your own job history is the best data you are ignoring
Everything above is external data. The most predictive data set you own is your closed-job history, and almost nobody mines it.
Go back through your last 200-500 sold jobs and geocode them to ZIP and, ideally, to subdivision. Then calculate, per ZIP:
- Close rate (sold jobs ÷ inspections)
- Average ticket (revenue per job)
- Cost per acquisition if you can attribute marketing spend
- Cancellation / chargeback rate (some areas sell well and unravel)
What you almost always find is that 20-30% of your ZIPs produced the majority of your profitable work, and a few "busy" ZIPs produced a lot of jobs that were low-ticket, slow-pay, or canceled. That is gold. Your own history already ran the experiment; you just never read the results.
Layer this on top of the external score as a reality-check multiplier. A ZIP that scores 4.5 on external signals but historically closes at half your average rate has something wrong with it that the public data missed — maybe a dominant competitor, maybe a price-sensitive demographic, maybe an HOA you forgot. Trust the history. Conversely, a ZIP where you have always done well, even if the external score is only middling, deserves to stay on the list. The model is a starting point; your P&L is the judge.
A practical way to combine them: rank ZIPs by external score, then adjust each up or down one tier based on your historical performance there. ZIPs with no history stay at their external rank and get treated as experiments with small, measured spend.
Three numbers to watch per ZIP over time
Once you are tracking job history by ZIP, three trends tell you almost everything about whether a territory is improving or decaying:
- Close rate trend. A falling close rate in a ZIP you used to win is usually the first sign of competitive saturation. The roofs are still there; more crews are fighting over them. Catch this early and you can shift effort before your cost per acquisition blows up.
- Average ticket trend. A drifting-down ticket can mean you are getting deeper into a lower-value pocket of the ZIP, or that you are competing on price. Either way it is a flag to look at which streets the recent jobs came from.
- Cancellation and chargeback rate. Some ZIPs sell beautifully and then unravel — financing falls through, buyer's remorse, slow pay. A ZIP with a great close rate and a terrible cancellation rate is a trap that a raw lead count hides completely.
None of these show up in external data. They are the dividend you earn for tracking your own results, and they are exactly the signals that let you out-maneuver competitors who only look at where the storm hit.
Special-case markets that break the standard model
The five-signal model fits most metros, but a few market types behave differently enough that you should adjust before you deploy.
Low-hail, retail-only metros. In parts of the country that rarely see qualifying hail, storm exposure drops out almost entirely and roof age plus owner-occupancy carry the whole score. Here the discipline is patience: demand is steadier and slower, there is no storm surge to ride, and your edge comes from being early to the neighborhoods rolling into replacement age. Roof-age data matters more in these markets, not less, because you cannot lean on a weather event to flush out demand.
Coastal and high-wind markets. Wind exposure and building-code-driven replacement cycles change the math. Some coastal jurisdictions have stricter roofing codes and insurance requirements that shorten effective roof life and create steady re-roof demand independent of storms. Owner-occupancy can also be lower in vacation-heavy coastal ZIPs, which depresses your effective door count even where home values are high.
Tile and specialty-roof regions. In metros where clay or concrete tile dominates, roof type becomes a hard gate rather than a scored signal. If you only do asphalt, a beautifully aged, affluent, owner-occupied ZIP full of tile roofs is simply not your market, and the standard score will mislead you unless you screen roof type first. The fix is to apply roof type as a yes/no filter before scoring, not as one weighted input among five.
Dense urban cores. Older urban ZIPs often have the oldest roofs in the metro and the worst canvassing economics: low owner-occupancy, multi-family buildings, on-street parking, and access problems. The roofs are due, but the doors are landlords and tenants, and the buildings may not be the residential single-family work you want. Score density and roof type honestly here and most urban cores fall out of a residential retail plan despite their age.
Rural and exurban fringe. The opposite problem: roofs may be old and owner-occupied, but they are spread out. A canvasser who can hit 100 doors an afternoon in a suburb might hit 25 on a rural route, which destroys the per-door economics even if every roof qualifies. For these areas, mail and geo-targeted ads usually beat foot canvassing, and roof-age data helps you mail only the genuinely old roofs instead of blanketing miles of mixed housing.
The meta-lesson is that the model is a frame, not a formula. Keep the five signals, but adjust which ones are gates versus weighted inputs based on what your market actually is. A storm-heavy plains metro, a no-hail retail metro, and a coastal tile metro should not run the same weights, and pretending they can is how a plan that worked in one city flops when you expand to the next.
What pros get wrong about ZIP targeting
A decade of watching roofing companies pick territory, here are the mistakes that show up over and over.
Chasing the storm everyone else is chasing. The ZIP on the news after a hailstorm is the most-canvassed real estate in the metro within three days. Your contact rate there is wrecked by saturation. The adjacent, under-reported ZIPs in the same swath are where the return lives.
Confusing house age with roof age. This is the big one. Median build year is a proxy, and in older, churned-over neighborhoods it is a bad proxy because so many roofs were already replaced. You cannot canvass profitably off build year alone in mature areas; you need roof-level signal to avoid wasting the day on 5-year-old roofs.
Ignoring owner-occupancy. Reps love a dense, busy ZIP and do not notice it is 60% rentals until they have knocked 200 landlord-and-tenant doors. Screen for owner-occupancy before you deploy.
Treating all hail the same. Pea-sized hail generates calls and almost no documentable damage. Without a stone-size threshold, you send crews to inspect roofs that will not produce a credible scope, and you burn goodwill.
Falling for the shiny affluent subdivision. New master-planned communities photograph beautifully and score terribly for retail roofing because the roofs are too young and often covenant-locked. High home value does not override a 2018 build date.
Never re-scoring. Territory is not static. Housing stock ages a year every year, storms reshuffle the map, and competitors move in. Re-run the score every storm season at minimum. The ZIP that was perfect three years ago may be picked clean now.
Promising claim outcomes to win the door. In storm work, the temptation is to tell a homeowner the roof is "free" or the claim is a lock to get the inspection. That crosses the line into adjusting and it is a license-required activity you do not hold. Win the inspection on documentation and professionalism. Document what you find, write an accurate estimate, hand it to the homeowner, and let them file. The data tells you which roofs to look at; it does not let you promise what the carrier will do.
A simple operating cadence
Put the whole thing on a calendar so it actually happens.
Quarterly: Re-pull storm data and re-rank your storm-targeted ZIPs. Storms make this list go stale fast. Refresh roof-level routes in your active areas.
Twice a year (spring and fall): Re-run the full external ZIP score for your metro. Housing stock has aged; competition has shifted. Update weights if your product mix changed.
Monthly: Pull your own closed-job report by ZIP. Watch close rate, ticket, and cancellation trends. Promote ZIPs that are over-performing, quietly pull spend from ZIPs that look good externally but bleed in practice.
Per storm event: When a real hail or wind event hits, map the swath against your roof-age data, prioritize the older roofs inside the impact zone, and check the adjacent under-worked ZIPs before piling into the famous one.
The companies that do this consistently are not chasing leads. They have a ranked map, a route built from roofs that are actually due, and a feedback loop from their own results. That is the entire difference between "where does it feel good" and a territory plan that compounds.
A quick checklist to start this week
- Write your one-sentence definition of a good lead
- List every ZIP in your service radius
- Pull Census B25035 (build year), B25077 (value), B25003 (owner-occ)
- Pull NOAA storm history with max hail stone size for each ZIP
- Eyeball density, roof type, and HOA status from aerial imagery
- Estimate competition via permits, ad costs, and a windshield drive
- Score each signal 1-5, apply your weights, and rank
- Pull your last 300 closed jobs by ZIP and compute close rate and ticket
- Adjust the external ranking by your own historical performance
- Resolve your top ZIPs to roof-level routes weighted toward roofs that are due
- Put the re-scoring cadence on the calendar
The ZIP score tells you which sandbox to play in. Roof-level age and storm signals tell you which doors in that sandbox are worth your reps' hours. Your own job history tells you whether the whole theory is holding up against reality. Run all three and "best ZIP codes for roofing leads" stops being a question you argue about and becomes a sorted list you work down.
FAQ
What is the single best data point for finding good roofing ZIP codes?
Roof age, or its closest public proxy, median year structure built (Census table B25035). Roofs replace in a fairly predictable 15-25 year window, so housing-stock age is the strongest single predictor of retail re-roof demand. The catch is that build year is not roof age in older neighborhoods where many roofs were already replaced, which is why pros resolve down to roof-level age before building canvassing routes.
How do I find ZIP codes with recent storm damage?
Use the NOAA Storm Events Database and the NWS Storm Prediction Center storm reports, which log hail (with estimated stone size) and wind events by date and location for free. Filter for credible large hail, roughly 1 inch and up, since smaller hail rarely produces documentable shingle damage. Treat the data as a guide for where to inspect first, not proof that any specific roof is damaged or that a claim will pay.
Is median home value or roof age more important for picking territory?
It depends on your business. For retail re-roofs, roof age carries more weight because you need roofs that are actually due. For premium upgrade work like standing-seam metal, home value matters more because the buyer is doing a planned upgrade rather than a repair. Write down your definition of a good lead first, then weight the signals to match it instead of using one universal ranking.
Why are my high-value, new-construction ZIP codes converting so poorly?
Because the roofs are too young to be due and many new master-planned communities have HOA roofing covenants or preferred-vendor programs that route the work away from cold canvassing. High home value does not override a recent build date for retail roofing. Score roof age and HOA status separately so an attractive but young subdivision does not get over-prioritized.
How granular should roofing territory targeting be: ZIP, neighborhood, or address?
Use ZIP-level scoring to decide which areas to dig into, then resolve down to neighborhood and address level to build actual canvassing routes. A single ZIP often blends subdivisions built decades apart, so a strong ZIP score can hide a mix of due and not-due roofs. Roof-level age and storm signals let you build a route weighted toward the specific doors most likely to need work.
How does roof-age data from aerial imagery help with canvassing?
It estimates an age range for each individual roof from imagery, so you can build routes made up mostly of roofs that are actually in replacement age rather than knocking every door in a mixed neighborhood. That raises the share of qualifying doors per route and lowers your cost per inspection without adding reps. It is an estimate expressed as a range, so you confirm condition on the roof, not from the data alone.
Should I avoid ZIP codes where lots of competitors are already working?
Not entirely, but recognize that the most-canvassed ZIP after a publicized storm has a wrecked contact rate from saturation. A smarter move is to work the adjacent under-reported ZIPs in the same storm swath, which often have similar damage and a fraction of the competition. Proxy saturation with permit counts, paid-search costs, and a windshield drive counting yard signs and dumpsters.
Can I tell a homeowner their insurance will cover the roof to get the inspection?
No. As a roofing contractor you can inspect, document damage, and prepare an accurate estimate of the repair, then hand it to the homeowner, but you cannot promise a claim approval or payout, say the deductible disappears, or advertise a free roof. Those are claim-handling activities that require a license you do not hold. The homeowner files the claim and the insurer decides coverage; your job is thorough documentation and an accurate scope.
How often should I re-score my roofing territories?
Re-pull storm data and re-rank storm-targeted ZIPs quarterly, since storms make that list stale fast, and re-run the full external score twice a year because housing stock ages and competitors move in. Pull your own closed-job performance by ZIP monthly to catch areas that score well externally but underperform in practice. Territory is not static, and last year's perfect ZIP may be picked clean now.
What is the most common mistake roofers make when picking ZIP codes?
Confusing house age with roof age. Median build year is a proxy that breaks down in older, churned-over neighborhoods where many roofs were already replaced, so canvassing off build year alone wastes a day on roofs that are not due. The second most common mistake is piling into the one storm ZIP everyone saw on the news instead of working the under-saturated neighbors in the same swath.
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, Table B25035: Median Year Structure Built — data.census.gov
- American Community Survey, Table B25077: Median Home Value — data.census.gov
- American Community Survey, Table B25003: Tenure (Owner vs Renter Occupied) — data.census.gov
- NOAA Storm Events Database — ncdc.noaa.gov
- NWS Storm Prediction Center Storm Reports — spc.noaa.gov
- National Weather Service Hail Information — weather.gov
- Insurance Institute for Business & Home Safety: Hail and Roofing Research — ibhs.org
- National Roofing Contractors Association (NRCA) — nrca.net
- U.S. Census Bureau ZIP Code Tabulation Areas (ZCTAs) — census.gov
- Federal Trade Commission: Truth in Advertising Guidance — ftc.gov
- Texas Department of Insurance: Public Adjusters and Roofers — tdi.texas.gov
- National Association of Insurance Commissioners (NAIC): Catastrophe Resources — naic.org
- USPS Every Door Direct Mail (EDDM) by Carrier Route — usps.com
- RoofPredict — roofpredict.com
Related Articles
How to Qualify Roofing Leads Before Scheduling an Inspection
Most wasted inspections come from leads that were never going to buy. Here is the qualification workflow that lets you book only the doors worth a truck roll.
Is Direct Mail Worth It for Roofing Companies? An Honest Numbers Breakdown
Direct mail still works for roofers who target the right roofs and track the right numbers. Here is the full cost-per-job math, the response benchmarks, and where most mail money gets wasted.
How to Lower Cost Per Lead From Roofing Direct Mail
Cost per lead from direct mail is decided mostly before you print — by who's on the list. Here's the real CPL math, the targeting that cuts it, and the tracking that proves it.