How to Segment a Roofing Customer List by Roof Age (Field-Tested Workflow)
On this page
You already have the names. They are sitting in your CRM, in an old spreadsheet your last office manager kept, in the QuickBooks customer list, in a stack of declined estimates from three storms ago. Every one of those rows is an address with a roof on it, and every one of those roofs is a year older than the last time anyone looked at it. The problem is not that you lack a list. The problem is that the list has no roof age attached to it, so you treat a 4-year-old roof and a 21-year-old roof exactly the same way: you mail both, you call both, you ignore both. That is the most expensive mistake in residential roofing database marketing, and it is completely fixable.
Segmenting a customer list by roof age means attaching an estimated age — or, more honestly, an age range — to every address in your book, then sorting those addresses into bands that line up with when a homeowner actually starts thinking about a new roof. Do it well and a dead list of 6,000 old contacts turns into a ranked work order: 400 households worth a phone call this quarter, 1,200 worth a postcard this season, and 4,000 you can leave alone for two more years without losing a dime. Do it badly and you blast everyone, burn your mailing budget on roofs that were replaced last spring, and train your own past customers to ignore you.
What follows is the workflow a sharp database-marketing roofer runs, broken into the order you should actually do it: get the data honest, estimate age per address, build the bands, attach storm exposure, score the rows, then work them by motion. There are worked numbers, the edge cases that wreck a naive sort, and the specific things that separate a contractor who says they segment from one who actually closes jobs off the cold rows.
Why roof age is the single best sorting variable you have
A homeowner buys a new roof for a small number of reasons, and almost all of them correlate with age. An asphalt shingle roof does not fail on a schedule, but it fails inside a window. The asphalt loses volatiles and gets brittle, the granules shed and expose the mat to UV, the mat dries and curls, the sealant strips let go, and the field becomes vulnerable to the exact wind and hail it used to shrug off. A 6-year-old roof and a 19-year-old roof respond to the same hailstorm completely differently, and they respond to your postcard completely differently too.
This is why age beats almost every other variable you could sort on:
- Income/ZIP tells you who can pay, not who needs the work. A wealthy street of 8-year-old roofs is a waste of stamps.
- Home value is a proxy for the house, not the roof. A re-roof resets the clock and nothing in the public record reflects it.
- Storm date alone tells you a storm passed, not whether the roof under it was worn out enough to take real damage or young enough to survive.
- Roof age sits underneath all of these. It is the closest thing to "is this person in the market" that you can derive at scale.
The catch is that nobody hands you roof age. Year-built is not roof age — a 1968 house may be on its third roof. Permit records are incomplete and inconsistently digitized. Your own "install date" field is reliable only for the jobs you did. So the first real skill is estimating age honestly, and the second is being disciplined about the uncertainty.
Roof age is a range, not a birthday
Write this on the wall: you are estimating a range, not a date. Unless you personally installed the roof and have the invoice, "this roof is 17 years old" is false precision. What you actually know is something like "this roof is most likely 15 to 19 years old." That uncertainty is not a weakness in your process; it is the truth of the input data, and pretending otherwise is how contractors end up knocking a roof that was replaced two years ago and looking like they did zero homework. Every band you build, every score you assign, should treat age as a range with a confidence level attached.
Step 1: Get the list honest before you touch roof age
Segmenting a dirty list by roof age just produces a clean-looking sort of garbage. Before you estimate a single roof's age, spend a day on the data itself. This is the step everybody skips and everybody regrets.
Consolidate every source into one table
Pull every list you have into a single spreadsheet or CRM view:
- Past customers — anyone you've done any work for (roofs, repairs, gutters, anything). These are gold; you have install dates for the roof jobs.
- Declined/lost estimates — every quote that didn't close. The roof was old enough that someone (you) thought it might be due. Add the estimate date.
- Inbound that never booked — form fills, phone calls, "just checking prices" people.
- Purchased or list-broker data — any cold homeowner lists you've bought.
- Canvass logs — addresses your crew knocked, with any notes.
Give every row a source and a first_seen_date. You will use both later. A declined estimate from 2014 is a wildly different animal from a cold-purchased name, and the date you first touched the address is a quiet clue to roof age (more on that below).
Standardize the address — this is non-negotiable
Roof age is keyed to a physical structure, so the address has to be clean and unique or every downstream step breaks. Run the whole table through address standardization:
- Normalize to USPS format (the USPS ZIP Code lookup and CASS-certified validation are the reference standard).
- Split unit/apartment numbers into their own field. "123 Main St Apt 4" and "123 Main St #4" must collapse to one row.
- De-duplicate on the standardized address, not on name. The same roof shows up under "Bob Smith," "Robert Smith," and "R & J Smith" across your sources. One roof, one row.
- Drop or flag PO boxes and obviously non-residential rows if you're a residential shop.
When you de-dupe, keep the richest row — the one with the most known fields — and merge in any extra data (a phone number here, an install date there) from its duplicates. Losing a known install date because you kept the wrong duplicate is a self-inflicted wound.
Decide your confidence tiers up front
Before estimating anything, define how confident you are in each row's age, because you'll sort partly on confidence:
| Confidence tier | What it means | Typical source |
|---|---|---|
| A — Known | You installed it; you have the invoice/date | Your own completed jobs |
| B — Strong estimate | Age range from imagery + permit/sale corroboration | Aerial review + records |
| C — Soft estimate | One signal only (e.g., year-built with no re-roof evidence) | Public record alone |
| D — Unknown | No usable age signal | Bare purchased name |
This tiering keeps you honest. A Tier A roof you re-roofed 12 years ago belongs in a different outreach bucket than a Tier C roof you're guessing on, even if both "estimate" to the same age.
Step 2: Estimate roof age per address
Here is where the work is. You're trying to attach an age range to each row. No single method covers every address, so you layer them and let the strongest signal win.
Method 1: Your own job history (Tier A, trust it completely)
Start with the easiest wins. Any address where you installed the roof has a known install date. The math is trivial: roof age = today − install date. An asphalt roof you put on in 2009 is 15 years old in 2024. These rows are your single most valuable segment and almost nobody works them, because the assumption is "I already did their roof, why would they need me?" That assumption is exactly backwards — read the re-roof cycle math below.
Tag every Tier A row and pull the install date into a real roof_install_date field. If you installed a 3-tab 25-year shingle in 2002, that roof is now past its rated life and the homeowner is overdue. If you installed an architectural 30-year laminate in 2015, it's a 2030+ conversation. Material matters, which is why you log it.
Method 2: Public records (sale date, permits, year built)
For addresses you didn't roof, public records give partial signals:
- Building permits. A re-roof permit is the cleanest non-imagery signal there is. Many counties publish permit data; a "reroof," "tear-off," or "roof replacement" permit dated 2016 tells you the roof is ~8 years old. The problem: permit data is wildly inconsistent county to county, many re-roofs are done without permits, and old records often aren't digitized. Use it where you can get it; never assume its absence means an old roof.
- Last sale date. Roofs are frequently replaced around a sale — either the seller re-roofs to move the house or an inspection forces it. A home that sold in 2019 has a meaningful chance of a roof that's ≤5 years old. This is a soft signal, not proof.
- Year built. Useful only as a ceiling and only for newer construction. A house built in 2018 cannot have a roof older than 2018 — that's a real, hard constraint. But a house built in 1972 tells you almost nothing about the current roof, because it's been re-roofed one to four times. Year-built data is available through county assessors and aggregated by the Census Bureau's American Community Survey for area-level context, but at the address level it's a ceiling, not an age.
The trap with public records: people treat year-built as roof age. Zillow and Google show you the year the house was built; a re-roof is invisible to them. If your segmentation is just "sort by year built," you are sorting houses, not roofs, and you'll mail a freshly re-roofed 1965 bungalow while skipping a worn-out 2006 build.
Method 3: Aerial and street-level imagery review
The roof itself tells you a lot if you look at it. Current aerial imagery (and street-view where available) lets a trained eye bracket age into a range:
- Color and granule loss — a uniformly dark, evenly-colored field reads newer; blotchy, lightened, "bald" patches read older as granules shed and expose the mat.
- Surface texture — visible curling, cupping, or a wavy/uneven plane from the air suggests an aging or failing field.
- Streaking — heavy black algae streaking (Gloeocapsa magma) generally takes years to establish; it's a rough age tell, though it's regional and shaded slopes streak faster.
- Repairs and patches — mismatched shingle color or obvious patch jobs say the roof has been limped along, which is its own buying signal.
- Roof type — a 3-tab field vs. architectural laminate changes the expected service life you apply.
Imagery review won't give you a year. It gives you a band: "newer (likely 0–8)," "mid-life (likely 9–15)," "aging (likely 16–22)," "end-of-life (likely 23+)." That's exactly what you want. The honest limit: imagery is a visual estimate, weather and shade and install quality all shift the appearance, and a north-facing slope can look a decade older than the south-facing one on the same house. Bracket conservatively.
Method 4: Cross-reference signals and let the strongest win
Now combine. For each address you may have several signals that disagree. Resolve them with a simple precedence rule:
- Your install date (Tier A) overrides everything.
- A re-roof permit overrides sale date and imagery.
- Imagery overrides year-built and sale date when they conflict (a 1970 house whose roof looks 6 years old got re-roofed — believe the roof).
- Year-built is only ever a ceiling.
- Last-touch date logic: if you sent someone an estimate in 2014 and the roof was "due" then, that roof is now 10 years older and almost certainly replaced or screaming. Use your own history as a corroborating signal.
The output of Step 2 is, for every row: an age range (low–high years), a confidence tier (A–D), and the material/roof-type where known.
The fields your row actually needs
Before you move on, make sure each address carries the fields the rest of the workflow depends on. A row that's missing these will fall out of your sort or, worse, get scored on bad assumptions. Carry at minimum:
| Field | Why it exists | Example |
|---|---|---|
standardized_address |
The unique key everything joins on | 412 Oak St, Springfield, IL 62704 |
roof_install_date |
Exact age for Tier A rows; compute age live | 2005-04 |
roof_age_low / roof_age_high |
The estimated range for non-Tier-A rows | 15 / 19 |
confidence_tier |
Keeps you honest about how much to trust the age | A / B / C / D |
roof_material |
Sets the service life you apply when banding | 3-tab asphalt |
source |
Tells you the relationship and intent behind the row | declined_estimate |
phone |
Decides whether a row can be called or only mailed | (217) 555-0142 |
last_storm_severity |
The storm layer you'll attach in Step 4 | severe |
If you can't fill a field, leave it explicitly blank and let it cost the row points in scoring — never paper over a gap with a guess that looks like data. A blank roof_install_date with a Tier C range is honest; a fabricated install date is the kind of thing that has your rep knocking a two-year-old roof.
Step 3: Build roof-age bands that map to buying windows
Age alone is just a number. The point of segmentation is to map age onto behavior — when a homeowner of a roof that old actually starts buying. Build bands, not a continuous sort, because you'll run a different play per band.
Know the replacement cycle by material first
You cannot draw band boundaries without knowing how long the roof was supposed to last. Service life varies by material, climate, ventilation, and install quality, but the working ranges every estimator should carry:
| Roof material | Typical service-life range | Notes for banding |
|---|---|---|
| 3-tab asphalt shingle | ~15–20 years | The old standard; ages out fast, especially in heat/UV |
| Architectural (laminate) asphalt | ~20–30 years | Most common modern residential roof |
| Wood shake/shingle | ~20–30 years | Maintenance-dependent; fire-code issues in some regions |
| Metal (standing seam) | ~40–70 years | Rarely your re-roof target on age alone |
| Clay/concrete tile | ~50+ years (tile); underlayment ~20–30 | The underlayment fails long before the tile |
| Slate | ~75–100+ years | Niche; age-based targeting rarely applies |
For a typical residential asphalt market, your bands key off the 15–30 year reality of shingles. Climate shifts these: high-UV Sun Belt and hail-belt roofs age faster; mild coastal climates slower. Adjust the boundaries for your region — a 17-year-old roof in Phoenix is functionally older than a 17-year-old roof in Seattle.
Adjust the band boundaries for your market
Don't import someone else's band ages and assume they fit your territory. The same asphalt shingle ages at very different rates depending on conditions you can read off your own market:
- High UV / intense heat (Southwest, high-elevation): shingles lose volatiles and granules faster. Shift your bands earlier — a roof that's "hot" at 16 elsewhere may be hot at 13 here.
- Hail and high-wind exposure (the Plains, parts of the Southeast): repeated impact accelerates granule loss and seal failure even without a single catastrophic event. Earlier boundaries, and lean harder on the storm layer.
- Heavy freeze-thaw (Upper Midwest, Northeast): ice damming and thermal cycling stress the field and the edges. Mid-life problems show up sooner.
- Mild marine climate (Pacific Northwest, parts of the coast): slower aging, but algae streaking shows early on shaded slopes, which can make a roof look older than it is — don't over-age it from imagery alone.
- Ventilation and install quality: an under-ventilated attic cooks shingles from below and can knock years off service life. You can't always see it from above, but it's why two roofs of identical age and material can look a decade apart.
The practical move: pick the dominant material and climate for your service area, set your four boundaries once, and document them so your whole team bands consistently. Then revisit if you expand into a region that ages roofs differently.
The four working bands
Here's a practical banding for an asphalt-dominant residential book. Adjust ages for your climate and dominant material.
| Band | Estimated age | What's happening | Your default motion |
|---|---|---|---|
| Band 1 — Watch | 0–9 yrs | Sound roof; no normal-wear demand | Leave alone (storm exception below). Suppress from age-based mail. |
| Band 2 — Warm | 10–15 yrs | Mid-life; storm damage now plausible, homeowners start thinking about it | Light, low-cost touch: seasonal postcard, maintenance/inspection offer |
| Band 3 — Hot | 16–22 yrs | Real buying window; visible aging, failures starting | Primary target. Mail hard, call, prioritize canvass routes here |
| Band 4 — Overdue | 23+ yrs | Past rated life; actively failing or about to | Highest priority. Direct call where you have a number; these convert |
The money is in Bands 3 and 4. Band 2 is a nurture play — cheap touches so you're top-of-mind when they cross into Band 3. Band 1 you suppress entirely from age-driven outreach, which is the whole point: you stop paying to reach roofs that don't need you.
What each band is actually worth to you
Think in unit economics, not gut feel. Say a mailed postcard costs you about a dollar all-in, and a salesperson's hour costs you far more than that. The reason banding pays is that it lets you spend the cheap resource broadly and the expensive resource narrowly:
- Band 4 (overdue): Highest close rate on age alone — the homeowner can often see the failure themselves. These justify your most expensive motion (a live call, a booked inspection) because the conversion supports the cost.
- Band 3 (hot): The volume play. Big enough to fill a mail drop and a canvass route, old enough that response rates make the mail pay. This is where most of your booked re-roofs will come from over a year.
- Band 2 (warm): Too young to mail hard, too close to ignore. One or two low-cost touches a year keep you top-of-mind so that when they cross into Band 3 — and they will, automatically, if your age field increments itself — you're already the name they know.
- Band 1 (watch): Worth zero in age-driven spend. Every dollar you'd spend here is a dollar not spent on Band 3. Suppression is the highest-ROI decision in the whole exercise because it's pure savings.
A useful sanity check: if your Band 3 + Band 4 together are a small fraction of your list, you're sitting on a book that's mostly young roofs and your near-term revenue is thin — plan accordingly. If they're a large fraction, you've been under-working a list that's ripe, and the fix is capacity, not more names.
Why "I already roofed them" is the biggest blind spot
Run this math on your Tier A past customers. If you've been in business 15+ years and installed mostly 3-tab and entry-level architectural shingles, a meaningful share of the roofs you personally installed are now in Band 3 or 4. A 3-tab you installed in 2004 is 20 years old. The homeowner trusts you, you have their phone number, you know the exact roof, and you almost certainly aren't calling them. That is the single most under-worked segment in this whole exercise. Sort your past-customer list by install date, filter to anything 15+ years old, and you've built a call list of warm people whose roofs you can describe from memory.
Step 4: Layer storm exposure on top of age
Age tells you which roofs are worn out. It doesn't tell you which ones just got hit. A 12-year-old roof (Band 2) that took 1.75-inch hail last spring may be a better job today than a 17-year-old roof that's seen nothing but mild weather. Storm exposure is the second dimension, and stacking it on age is where segmentation gets genuinely powerful.
What storm data actually adds
What you want per address is not "a storm passed through the ZIP." You want, as close as you can get it, whether this roof saw conditions capable of damage — hail size and wind speed at that location — and how that interacts with the roof's age. Authoritative storm data exists: NOAA's Storm Prediction Center and the Storm Events Database log severe hail and wind reports, and the Insurance Institute for Business & Home Safety (IBHS) publishes the research on how hail and wind actually damage roofing assemblies. The honest limitation of public storm data is resolution: a hail report is a point or a swath, not a per-roof read, and "there was 1-inch hail reported in this county" is a long way from "this specific roof was impacted."
The age × storm matrix
Combine the two dimensions into a simple priority grid. The interaction is the insight: storms wear out old roofs far more than young ones, so the same hail event creates very different jobs depending on age.
| No notable storm | Moderate storm exposure | Severe storm exposure | |
|---|---|---|---|
| Band 1 (0–9) | Suppress | Low — likely survived | Medium — inspect-worthy, but young roofs often hold |
| Band 2 (10–15) | Low nurture | Medium | High — mid-life roof + real storm = strong job |
| Band 3 (16–22) | High | High | Top |
| Band 4 (23+) | High | Top | Top |
The cells that catch people off guard are the Band 2 / severe-storm corner (a roof you'd otherwise leave alone becomes a real prospect) and the Band 1 / severe corner (worth an inspection, but set expectations — young roofs frequently come through fine, and overselling damage on a sound young roof is how you end up with an angry homeowner and a denied claim).
Step 5: Score every row and rank the list
Bands are categorical; a score lets you rank within and across bands so your sales team works a single ordered list instead of four buckets. Build a simple, transparent score out of 100. Transparent matters — your salespeople should be able to see why a row scored what it did.
A worked scoring model
Here's a model you can implement in a spreadsheet today. Tune the weights to your market.
Age score (up to 50 pts) — the core driver:
- Band 1 (0–9 yrs): 5
- Band 2 (10–15 yrs): 20
- Band 3 (16–22 yrs): 40
- Band 4 (23+ yrs): 50
Storm exposure (up to 25 pts):
- None: 0
- Moderate (sub-severe hail/wind reported nearby): 12
- Severe (large hail and/or high wind at/near the address): 25
Contactability & relationship (up to 15 pts):
- Past customer with phone number: 15
- Have a phone number, not a past customer: 10
- Mailable address only: 5
- Declined estimate (already showed intent): +5 bonus (cap at 15)
Confidence (up to 10 pts):
- Tier A (known): 10
- Tier B (strong estimate): 7
- Tier C (soft estimate): 4
- Tier D (unknown): 0
Worked example: two rows
Row A — 412 Oak St. You installed a 3-tab roof here in 2005 (Tier A, known). It's 19 years old → Band 3 → 40 pts. A severe hailstorm crossed the area last year → 25 pts. Past customer with a phone number → 15 pts. Tier A confidence → 10 pts. Total: 90/100. This is a phone call today: "Hi, it's [you] — we put your roof on back in '05, it's coming up on 20 years and that hail last spring was rough. Want me to come take a look and document it?"
Row B — 88 Pine Ave. Cold-purchased name, no relationship. Imagery review brackets the roof at 11–14 years (Band 2, Tier C soft estimate). No notable storm. Mailable only.
- Age (Band 2): 20
- Storm (none): 0
- Contactability (mailable only): 5
- Confidence (Tier C): 4
- Total: 29/100.
Row A scores 90 and gets a call this week; Row B scores 29 and goes into the low-cost nurture mail rotation, no human time spent. That spread — same list, 61-point difference — is the entire value of segmenting. You just told your most expensive resource (a salesperson's hours) exactly where to go.
A third row, to show the storm interaction
Row C — 1450 Birch Ct. Not a past customer, but imagery brackets the roof at 12–14 years (Band 2, Tier C). Last spring a severe hailstorm crossed the address. You have a mailing address and a phone number you bought with the list.
- Age (Band 2): 20
- Storm (severe): 25
- Contactability (phone, not past customer): 10
- Confidence (Tier C): 4
- Total: 59/100.
Notice what the storm layer did. On age alone, Row C is a 12-year-old roof you'd leave in the cheap nurture rotation — barely above Row B. But a real hail event on a mid-life roof pushes it to 59, into your heavy-mail-plus-call tier. That's the age × storm matrix doing its job: it surfaced a job you'd otherwise have ignored, without you having to eyeball 6,000 rows looking for it. The honest caveat stays attached — Tier C means you're estimating the age, so when you knock you confirm it and document conditions truthfully rather than assuming damage.
Sort, then assign by motion
With a score on every row, sort descending and draw lines that match your capacity, not some abstract ideal:
- 80–100: Direct call / book an inspection. Sized to how many appointments your team can actually run.
- 55–79: Heavy mail + call attempt. The bulk of your active Band 3 work.
- 35–54: Standard mail rotation.
- Under 35: Suppress or cheapest-possible touch (one nurture card a year).
Draw the 80+ line where your sales capacity runs out, not at a fixed score. If 80+ is 600 rows and your team can work 200 a month, the score just built you a three-month priority queue.
Step 6: Where RoofPredict fits — the data you can't easily build yourself
Everything above you can do by hand, and on a few hundred addresses you should. The wall you hit is scale and the two hardest inputs: a credible roof-age range on addresses you didn't install, and storm exposure resolved closer to the individual roof than "a storm hit the county." Hand-reviewing imagery on 6,000 addresses is a month of someone's life, and public storm data stops at the swath.
That gap is what RoofPredict is built to fill. You hand it your customer list — your CRM export, your old estimates, your purchased names — and it enriches each address with a roof-age range estimated from aerial imagery and storm exposure modeled per roof rather than a ZIP-level hail map. The honest framing matters and we hold to it: roof age comes back as a range with a confidence level, never a fake exact date, and storm modeling gives you odds that a roof was worn out or hit, not proof of damage. It's the engine behind Step 2 and Step 4 run across your whole book in a pass instead of by hand.
What it does not do, and won't pretend to: it doesn't measure the roof (that's an EagleView/HOVER job — a different category), it doesn't identify the exact shingle product, and it doesn't sell you leads. It enriches the list you already own so your own segmentation and scoring run on real signals instead of guesses. You still pick the bands, set the weights, and decide who to call. If you'd rather see it on your own data before believing any of it, that's the right instinct — hand over a stretch of addresses where you already know the roofs and check whether the age ranges land.
Step 7: Keep the segmentation alive
Segmentation is not a one-time project. A roof you banded as "14 years, leave alone" is a Band 3 prospect three years later, and the homeowner who declined you in 2022 because their roof had "a few years left" is back in the window now. A static segment decays the day you build it.
Make age a moving field
The simplest discipline: store roof_install_date or roof_age_low/roof_age_high as dates/ranges, and compute current age live every time you pull the list. Never store "19 years" as a static number — store the install year (or estimated band start) and let age increment itself. A list built this way re-bands itself automatically as time passes; addresses graduate from Band 2 into Band 3 on their own.
Set re-touch and graduation rules
- Band-graduation trigger: when a row crosses from Band 2 into Band 3, it should automatically surface for outreach. That's a homeowner entering their buying window — the best possible time to be the name they already know.
- Post-storm re-scan: after a significant hail or wind event, re-run the storm layer against your whole list and re-score. Rows jump priority overnight.
- Suppression with an expiry: when you mark a row "recently re-roofed — suppress," set a date. A roof you suppress in 2024 is a fresh Band 1 you'll want back in rotation around 2040, but more usefully, a "suppress, I think they used someone else" flag should expire in a year so you re-verify rather than ignore forever.
- Feedback loop: every time a salesperson confirms an actual roof age in the field ("that one was replaced in 2019"), write it back to the record and bump it to Tier A. Your estimates get better the more you work the list.
Don't let the list rot in a spreadsheet
If your segmentation lives in a one-off Excel file, it's dead within a quarter — nobody updates it, the field team can't see it, and new customers don't flow in. Push the age range, band, score, and storm flags back into your CRM as real fields so the segmentation is part of daily workflow, not a side project. The whole point is that the list works for you continuously.
The compliance line: stay on the documentation side of storm work
The second you layer storm data onto age, you're in territory where roofers get themselves in legal trouble, so be precise about what you can and can't say. Segmenting by storm exposure to find roofs worth inspecting and documenting is completely legitimate. Crossing into the homeowner's insurance claim is not your lane unless you're a licensed public adjuster, and in most states a roofer acting as one is a violation. State departments of insurance — for example the Texas Department of Insurance — and the National Association of Insurance Commissioners publish the rules; know your own state's.
What you can do, all day long: inspect the roof, thoroughly document conditions with photos, and prepare an accurate, Xactimate-aligned estimate to repair your own scope of work. You hand that documentation to the homeowner. The homeowner files. The insurer decides coverage. That's the clean, legal workflow.
The do-not-say list — teach this to every rep before they knock a storm-segmented list:
- Don't offer to negotiate, adjust, or "handle" the homeowner's claim for them.
- Don't interpret their policy or tell them what is or isn't covered.
- Don't promise a payout, an approval, or that the claim will go through.
- Don't say the deductible is waived, absorbed, eaten, or "taken care of" — promising to erase a deductible is illegal in many states and a red flag everywhere.
- Don't advertise a "free roof."
- Don't represent the homeowner against their insurer — that's unlicensed public adjusting.
Stay on the document/estimate/inspection side and your storm segmentation is a sales advantage, not a liability. Your value to the homeowner is thorough documentation and an accurate estimate of your work — full stop.
What pros get wrong (the edge cases that wreck a naive sort)
The difference between a contractor who segments on paper and one who books jobs off the cold rows is almost entirely in handling these:
- Treating year-built as roof age. Already said it, worth repeating because it's the #1 error. Year-built is a ceiling, never an age. A pure year-built sort mails freshly re-roofed old houses and skips worn-out newer ones.
- Ignoring re-roofs. A re-roof resets the clock and is invisible to most public data. The 1968 house with a 4-year-old roof must drop to Band 1. If your imagery review or permit check catches the re-roof and you still mail it, you look like you did no homework — to a homeowner who knows exactly how new their roof is.
- Forgetting material. A 22-year-old standing-seam metal roof is not a Band 4 prospect; it's mid-life. Banding asphalt rules onto every roof type produces nonsense. Log the material and apply the right service life.
- Under-working their own past customers. Covered above — the highest-trust, highest-confidence segment, routinely ignored on the false logic of "I already did their roof."
- Storming the young roofs. A severe-hail flag on a 4-year-old roof is worth an inspection, but young roofs frequently survive. Pushing damage on a sound young roof gets claims denied, gets you a bad reputation, and flirts with the compliance line above. Inspect, document honestly, let the facts stand.
- Mailing Band 1. Every postcard to a 5-year-old roof is money lit on fire and a small dent in your sender reputation. Suppression is a feature, not laziness.
- False precision. Telling a homeowner "your roof is exactly 17 years old" when you estimated a range invites the correction "no, we replaced it in 2016." Speak in ranges: "it looks like it's in the 15-to-20-year zone — does that sound right?" It's both more honest and more credible.
- Letting the segment go stale. A list built once and never updated is worthless in a year. Age must increment itself and rows must graduate between bands automatically.
A 7-day implementation checklist
If you want to actually do this instead of just nod at it, here's a week:
- Day 1 — Consolidate. Pull every list (past customers, declined estimates, inbound, purchased, canvass logs) into one table. Tag
sourceandfirst_seen_date. - Day 2 — Clean. Standardize addresses to USPS format, split units, de-dupe on standardized address keeping the richest row. Define your A–D confidence tiers.
- Day 3 — Tier A first. Pull install dates for every roof you personally installed. Compute current age. Filter to 15+ years — that's a call list before you've estimated anything else.
- Day 4 — Estimate the rest. Layer public records (permits, sale date, year-built ceiling) and imagery review (or enrichment) to attach an age range and confidence to the non-Tier-A rows.
- Day 5 — Band and storm. Assign Bands 1–4 by material-adjusted age. Layer storm exposure. Apply the age × storm matrix.
- Day 6 — Score and sort. Run the 100-point model. Sort descending. Draw motion lines at your real capacity.
- Day 7 — Operationalize. Push age range, band, score, and storm flags into your CRM as live fields. Set graduation and re-touch rules so it updates itself. Brief your reps on the compliance do-not-say list.
Do that and the pile of names becomes a ranked work order. The 19-year-old roof you installed in '05 that just took hail is at the top with a phone number attached. The 5-year-old roof down the street is suppressed and costs you nothing. That's the whole game: stop treating every roof the same, sort by the one variable that predicts buying, and point your most expensive resource — your team's time — at the roofs that are actually due.
FAQ
Isn't year built the same as roof age?
No, and treating them as the same is the most common and most expensive mistake in roofing database marketing. Year built is the year the house was constructed; the roof has likely been replaced one or more times since. A 1968 home may be on its third roof. Use year built only as a ceiling — a 2018 house can't have a roof older than 2018 — but never as the roof's actual age. Estimate the roof itself from imagery, permits, or your own install records.
How accurate can a roof age estimate really be without permit records?
Accurate enough to band, not accurate enough to quote a birthday. Aerial imagery review, sale dates, and your own history let you bracket most roofs into a range like 15–19 years with a confidence level. That range is exactly what segmentation needs. The mistake is claiming false precision: say a roof is in the 15-to-20-year zone, not that it's exactly 17. Where you have your own install date, the age is known and exact.
What roof age band actually buys?
For asphalt-shingle markets, the real buying window is roughly 16–22 years (visible aging, failures starting) and 23+ years (past rated life, actively failing). Mid-life roofs at 10–15 years buy mainly after a storm or as a maintenance touch, and 0–9 year roofs rarely buy on age alone. Adjust the boundaries for your climate and dominant material — high-UV and hail-belt regions age roofs faster.
Should I bother calling past customers whose roofs I already replaced?
Yes — they're usually your most under-worked, highest-value segment. If you installed entry-level shingles 15-plus years ago, many of those roofs are now in the buying window. You know the exact roof, you have the phone number, and the homeowner already trusts you. Sort your past-customer list by install date, filter to 15-plus years, and you've built a warm call list before doing any other estimation.
How do I combine roof age and storm data without overselling damage?
Use age to find worn-out roofs and storm exposure to find recently hit ones, then prioritize where they overlap. The interaction is the insight: storms wear out old roofs far more than young ones. But a severe-hail flag on a young roof only justifies an inspection, not a damage claim — young roofs often survive. Inspect, document honestly with photos, and let the facts stand. Pushing damage on a sound roof gets claims denied and your reputation hurt.
What's the difference between RoofPredict and a measurement tool like EagleView?
Different category. EagleView and HOVER measure the roof — dimensions, pitch, squares — once you already know which house to work. RoofPredict tells you which house: it enriches your customer list with a roof-age range and per-roof storm exposure so you can rank and target. One measures the roof; the other helps you decide which roof is worth your time. They solve different problems and many roofers use both.
Is it legal to target homeowners by storm exposure?
Targeting roofs worth inspecting and documenting after a storm is completely legitimate. The legal line is the insurance claim itself. You can inspect, document with photos, and prepare an accurate estimate to repair your own scope, then hand it to the homeowner — they file and the insurer decides. You may not negotiate or handle their claim, interpret their policy, promise a payout or approval, erase or absorb the deductible, advertise a free roof, or represent them against their insurer. That's unlicensed public adjusting in most states.
How often should I re-segment my list?
Continuously, not as a one-time project. Store roof age as an install date or year-based range and compute current age live so the list re-bands itself as time passes. Beyond that, re-run the storm layer and re-score after any significant hail or wind event, and trigger outreach automatically when a row graduates from the mid-life band into the buying window. A static segment built once is worthless within a year.
Where should the segmentation actually live?
In your CRM as real, live fields — age range, band, score, and storm flags written back to each record — not in a one-off spreadsheet. A standalone Excel file goes stale within a quarter because nobody updates it, the field team can't see it, and new customers don't flow in. When the data lives in the CRM, the segmentation is part of daily workflow and updates itself as roofs age and storms hit.
I only have a few hundred contacts. Do I really need software for this?
No. On a few hundred addresses you can and should do this by hand: standardize the list, pull your own install dates, review imagery, band, and score in a spreadsheet. The wall is scale and the two hardest inputs — credible age ranges on roofs you didn't install, and storm exposure resolved closer to the individual roof. Those are where enrichment earns its keep once you're past a few thousand rows or want to re-score after every storm.
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) — ibhs.org
- NOAA Storm Prediction Center — spc.noaa.gov
- NOAA Storm Events Database — ncdc.noaa.gov
- National Weather Service — weather.gov
- U.S. Census Bureau American Community Survey — census.gov
- USPS ZIP Code Lookup — usps.com
- International Code Council (IRC/ICC) — iccsafe.org
- OSHA Roofing and Fall Protection — osha.gov
- Texas Department of Insurance — tdi.texas.gov
- National Association of Insurance Commissioners (NAIC) — naic.org
- Federal Trade Commission — Business Guidance — ftc.gov
- Xactware (Xactimate) — xactware.com
- RoofPredict — roofpredict.com
Related Articles
How to Target Apartment Complexes for Roof Replacement (Without Wasting a Season Chasing the Wrong Properties)
Multifamily roofs are bigger jobs with fewer competitors than residential, but the buyer, the timeline, and the sales motion are completely different. Here is how to find the apartment complexes whose roofs are actually due and get in front of the person who signs.
Which Old Roofing Leads Are Worth Re-Contacting (And Which to Let Die)
Most contractors sit on hundreds of old estimates and lost bids. Here is how to score that list, rank it, and call back only the doors actually worth a second knock.
How to Find HOA Roofing Contracts (and Win Them by Roof Age)
Where HOA roofing work actually comes from, how to find the communities whose roofs are aging out, and how to walk into a board meeting already knowing the answer.