Skip to main content

How to Update Old Roofing Leads With Current Roof Condition Data

Michael Torres, Storm Damage Specialist··31 min readRoofing Sales & Growth
On this page

Every roofing company is sitting on a list it stopped working. A CRM full of three-year-old "not right now" estimates. A box of door-hanger callbacks that never got a second touch. Two thousand rows of a list you bought in 2022, half of it already re-roofed by a competitor, the other half finally old enough to need you. That list is not dead. It is stale. And stale is fixable.

The reason most of those contacts went cold has nothing to do with the homeowner's intent and everything to do with timing. A roof that was 14 years old when you bid it in 2022 is pushing 17 now. The asphalt three-tab you couldn't sell against in a soft year just ate two more hail seasons. The "call me in a couple years" homeowner meant it literally, and you forgot to. The data you had on those records was true the day you collected it and wrong ever since. Roofs age. Storms hit. Houses sell. Your list does not update itself.

What follows is the operational playbook for fixing that: how to pull your old leads back out, attach current roof condition data to each address, score what is actually due, scrub the records that are now worthless, and put a sales motion around the survivors so the work pays for itself. It is written for the owner or sales manager who has a backlog and a couple of reps and no patience for theory. Concrete numbers, real workflows, the mistakes that quietly waste a quarter, and the edge cases nobody warns you about.

Why old roofing leads decay (and why that is good news)

A lead is a snapshot of a moment. The moment passes. Understanding how a roofing lead decays tells you exactly which lever to pull to revive it.

The four things that change after you file a lead away

Roof age moves in one direction. This is the obvious one and the most valuable. Asphalt shingle roofs in most of the country have a usable service life roughly in the 15-to-25-year band depending on product, slope, ventilation, and climate. A record you marked "too new" at 9 years is now 12 or 13. A record you marked "borderline" at 16 is now solidly in the replacement conversation. Time is doing your qualifying for you, for free, on every row in the file. The only problem is your CRM still shows the age you wrote down years ago.

Storms accumulate. Hail and high wind do not reset the clock; they shorten it. A roof that has taken two damaging hail events since you last touched the record is materially closer to failure than the calendar alone suggests, and it may now carry visible, documentable damage that did not exist when you bid it. The homeowner who said no in a calm year answers the phone differently after a spring of bruised gutters and missing shingles down the block.

Ownership turns over. Roughly one in twelve to one in fifteen U.S. homes changes hands in a given year, and that rate swings with the market. Over a three-year-old list, a meaningful slice of your "homeowners" have moved. The new owner has no memory of your estimate, a fresh mortgage, and often an inspection report that flagged the roof. That is not a lost lead. It is a different, sometimes hotter, lead at the same address.

Contact information rots. Phone numbers get reassigned. Email providers churn. The mobile number you captured in 2021 may now ring a stranger. List-hygiene research across industries consistently puts contact-data decay in the rough neighborhood of 20-to-30 percent per year for B2C records. You do not need the exact figure; you need to assume that a third of your phone numbers are wrong before you start dialing, and budget your effort accordingly.

The good news hiding in all four: every one of these changes is knowable from the address. You do not have to re-canvass the neighborhood to learn that a roof aged three years. The address is the key, and the address has not moved.

What "current roof condition data" actually means

Let's be precise, because the phrase gets thrown around loosely and it leads contractors to buy the wrong thing.

There is no public database that tells you the exact install date of a residential roof. Permits are spotty, often missing for re-roofs done without one, and not centralized. Anyone who promises you an exact roof age by address is selling you a number with false precision. What you can responsibly assemble per address is:

  • A roof age range estimated from aerial and satellite imagery over time plus property characteristics — for example, "likely 18 to 22 years" rather than "installed March 2004." A range you can trust beats a date you can't.
  • A storm exposure history — the hail and damaging-wind events that have passed over that specific parcel, with dates and rough intensity, drawn from weather data.
  • Property facts that bound the problem — year the structure was built, square footage, roof footprint, sometimes roof pitch and material family from imagery.
  • Ownership / occupancy signals — last sale date, owner-occupied vs. tenant, which you can get from property records.

Notice what is not on that list: an exact install date, an exact material spec, a guaranteed damage assessment, or anything that substitutes for a human on a ladder. Current roof condition data narrows the field and tells you which doors are worth a truck roll. It does not replace the inspection. Treat any vendor claim that it does as a yellow flag.

Before you touch a vendor: get your own list into shape

The single biggest mistake contractors make is paying to enrich a list that is full of garbage. Enrichment priced per record means every dead row you feed in costs you money and returns nothing. Clean first, enrich second. This is unglamorous and it is where the margin lives.

Step 1 — Pull everything into one place

Go find every list you have. Not the one. All of them.

  • The CRM export (every contact, every stage, including "lost" and "unqualified").
  • The old estimate backlog — quotes you wrote that never closed.
  • Past customers from 8-plus years ago whose roofs are now aging into a second replacement or whose neighbors are.
  • Purchased lists, canvass app exports, door-hanger callback logs, trade-show scans, the spreadsheet a former salesperson kept on their own laptop.

Dump them all into a single staging sheet or table. You are looking for one row per physical address with whatever contact and history you have. Do not clean yet. Just consolidate.

Step 2 — Standardize the address, because the address is your key

Everything downstream joins on the address. If your addresses are inconsistent, every later step breaks. "123 N Main St Apt 2", "123 North Main Street #2", and "123 main" are the same parcel to a human and three different keys to a computer.

Standardize to a single format. The cheapest reliable way is to run the address column through the USPS-standardized format — many CRMs and spreadsheet add-ins do this, and the USPS publishes the addressing standard (Publication 28). Aim for: standardized street, unit, city, state, ZIP+4 where available. While you are at it, split the address into components (street, city, state, ZIP) in separate columns so you can join and filter cleanly.

If you can geocode each address to a latitude/longitude at this stage, do it. Storm data is fundamentally geographic — it lands on coordinates, not on text strings — so a lat/long per row makes every later weather join far more accurate.

Step 3 — Deduplicate ruthlessly

After standardizing, dedupe on the address key. You will be surprised how many rows collapse: the same house entered by two reps, the customer who is also on a purchased list, the estimate and the door-hanger callback that are the same roof.

When two records merge, keep the richest history. Roll up: most recent contact date, every phone/email you have for the household, the original estimate value, and a note of where each source came from. You want the merged record to carry forward everything useful and present one clean face downstream.

Step 4 — Triage by intent before you spend a dime on data

Not every old record deserves enrichment. Sort the consolidated, deduped list into three buckets:

Bucket What it is Enrich?
A — Warm history Past estimates, past customers, anyone who once said "call me later" Yes, first. Highest hit rate; they already know you.
B — Cold but real Purchased lists, canvass exports, addresses with no relationship Enrich, but score hard and work only the top slice.
C — Junk No usable address, commercial/multifamily you don't service, out-of-area, do-not-contact Do not enrich. Suppress or delete.

Bucket C is the one people skip, and it is pure savings. If 18 percent of a 5,000-row list has no valid address or is outside your service area, that is 900 rows you are not paying to enrich and not paying a rep to chase. Pull them out now.

Before any phone outreach, you are responsible for compliance. This is not optional and the penalties are real.

  • Scrub your call list against the National Do Not Call Registry. The FTC runs it; you register as a seller/telemarketer and can access the data to scrub. Calling a registered number without an established business relationship or written consent exposes you to per-violation penalties.
  • Honor your own internal do-not-contact list — anyone who told you to stop.
  • Be aware of state-level rules, which are sometimes stricter than federal, and of the TCPA restrictions on automated dialing and texting. If you are using an autodialer or sending SMS, get clear on consent first.
  • An established business relationship (a past customer or someone who inquired) gives you a window to contact even some listed numbers, but the window is time-limited and you should document the basis.

Do this before enrichment too — no reason to pay to enrich a record you are legally not allowed to call.

After these five steps, a typical messy 5,000-row pile becomes something like 3,200 clean, deduped, standardized, legally-callable addresses sorted by intent. Now data is worth buying, because every dollar lands on a row that can actually become a job.

Attaching current roof condition data, address by address

With a clean list, you attach the three layers of current data: roof age range, storm history, and ownership/property facts. Here is how each one works and what it is and is not good for.

Layer 1 — Roof age range from imagery

The most useful single field you can add is a current, defensible roof age range per address. The method that actually scales is imagery over time: aerial and satellite passes of the same roof across years let a model estimate how long the current roof surface has been in place, expressed as a range.

Why a range and not a date? Because the honest signal is bounded. Imagery can tell you a roof's surface has been consistent and weathered across many years (old) versus recently changed (new), and it can place that in a band. It cannot read a permit. A field that says "likely 19 to 23 years" is something you can build a sales decision on. A field that says "installed 7/14/2003" from imagery alone is fiction, and treating it as fact will burn you when you knock and the homeowner says they re-roofed last fall.

What the age range lets you do immediately:

  • Re-sort your whole list by years-to-failure. A roof in a 20-to-24-year band on a 25-year product is a call-this-week record. A roof in a 6-to-9-year band is a suppress-for-now record. You just turned an undated list into a priority queue.
  • Catch the silent agers. The records you marked "too new" years ago that have crossed into the buying band. These are the quiet wins — homeowners with zero memory of telling you no, whose roof is now genuinely due.
  • Skip the re-roofed. On an old purchased list, a real fraction of addresses have already been re-roofed by someone else. Imagery catches the ones that now show a fresh surface, and you stop wasting outreach on a house that is satisfied for 20 years.

Layer 2 — Storm exposure history per parcel

The second layer is the weather each specific roof has actually taken. And here is where precision matters more than contractors realize.

A hail map is not the same as per-roof exposure. A county-level "hail happened here" overlay tells you a storm passed through the area. It does not tell you whether this roof, on this street, at this elevation and orientation, was in the damaging core or the harmless fringe. Hail swaths are narrow and ragged; one street gets pummeled and the next one over is fine. The useful version models the event down to the parcel — which roofs were actually under the worst of it — rather than painting a whole ZIP code the same color.

The public backbone for this is real and free: NOAA's Storm Prediction Center and the National Weather Service publish storm reports, and the Storm Events Database is a queryable record of hail and wind events with dates and locations. The Insurance Institute for Business & Home Safety (IBHS) publishes solid research on hail and wind damage to roofing assemblies if you want to understand what a given event actually does to shingles. You can assemble a coarse storm history yourself from these. The work — and where per-parcel modeling earns its keep — is going from "a 1.5-inch hail report was logged near this town on this date" to "this individual roof was in the impact zone of these three events."

What the storm layer adds to a record:

  • A reason to call now, not someday. "Your roof is old" is a slow message. "Your roof is old and it took two hail events in the last 18 months" is a this-spring message.
  • A documentation starting point. Dated, located storm events give you and the homeowner a factual basis for why an inspection is worth doing. (More on the right way to handle the claims side below — there is a line you must not cross.)
  • A second sort key. Among equally-aged roofs, the storm-exposed ones rank higher. Age tells you which roofs are wearing out; storm tells you which ones got pushed over the edge faster.

Layer 3 — Ownership and property facts

The third layer comes from property records and imagery-derived facts:

  • Last sale date / ownership change. A roof that sold since your last contact is a fresh lead at an old address. New owner, new mortgage, often a home-inspection report that called out the roof. Re-target these as net-new.
  • Year built. A sanity check on the age range and a fallback when imagery history is thin. A 1998 house that has never shown a re-roof in imagery is almost certainly on an aging original-or-second roof.
  • Roof footprint and pitch from imagery, useful for rough pre-qualifying and for the rep's first conversation, though never a substitute for a measured estimate (that is what your EagleView/measurement step is for, downstream).
  • Owner-occupied vs. tenant. Filters out rentals you may not want to chase the same way.

Edge cases that quietly break enrichment

The layers above sound clean on paper. In a real list they hit snags, and knowing them ahead of time keeps you from acting on bad data.

  • Tree canopy and shadow. Heavy tree cover over a roof degrades imagery-based age estimates — the model can only see part of the surface. Treat heavily-shaded roofs as lower-confidence and lean harder on year-built and ownership signals for those rows. Flag them rather than trusting a tight range.
  • Recent re-roofs with no permit. A roof replaced last year without a pulled permit won't show up in permit data, but imagery over time will usually catch the surface change. This is exactly why imagery beats permits for currency — but it also means a re-roof done between the last imagery pass and today can slip through. Always let the rep confirm at the door.
  • Tear-off vs. overlay. A second layer of shingles installed over the old one (an overlay) can look like a fresh roof in imagery while behaving like an old one structurally. Imagery gives you surface age, not how many layers are under it. The inspection sorts this out.
  • Metal, tile, and flat roofs. The 15-to-25-year asphalt service life does not apply. A standing-seam metal or tile roof can run 40-plus years; a low-slope membrane has its own clock. If your list spans roof types, score age against the right service life or you'll chase roofs that have decades left.
  • Mismatched parcels. A geocode that lands on the wrong parcel — common with rural addresses, new subdivisions, and corner lots — attaches the neighbor's roof data to your record. Spot-check a sample of geocoded points against the actual rooftops before you trust the join at scale.
  • Multi-structure parcels. A property with a house, a detached garage, and a barn has three roofs of different ages. Decide which structure you're scoring (usually the primary dwelling by footprint) so you're not ranking on the barn.

None of these are reasons to skip enrichment. They are reasons to carry a confidence flag on every enriched field and to let the human at the door make the final call. Data narrows the field; it does not close the sale.

Where RoofPredict fits in this step

If assembling those three layers yourself sounds like a part-time job, that is because it is. Standardizing addresses, pulling imagery across years, modeling storm events down to the parcel, and joining property records is exactly the kind of work that is cheap to describe and expensive to do by hand.

This is the specific gap RoofPredict was built to fill. You hand it your cleaned list of addresses — your old CRM, your dead estimates, your purchased list — and it enriches each row with a roof-age range from aerial imagery and a storm history modeled per roof, not painted across a ZIP code. The output is a ranked file: which roofs on your own list are actually due, ordered, with the age and storm signals attached, so your reps work the houses that are worn out and skip the ones that aren't.

The honest limits, stated plainly so you can decide if it fits: it returns a roof-age range, not an install date, because an install date from imagery would be a guess dressed up as a fact. The storm history is a record of exposure and odds, not a guarantee of damage — it tells you which roofs to go look at, not what you'll find when you get there. It does not measure the roof for your estimate, and it does not file or touch anyone's insurance claim. It is a targeting and list-enrichment layer that sits on top of the work you already do. Used that way, it turns a stale list into a sorted call queue. Used as a crystal ball, it will disappoint you — so don't, and it won't.

Scoring: turning enriched rows into a ranked call queue

Enriched data is inert until you score it. The point of scoring is to put the roof most likely to become a signed job at the top of the queue, so a rep with four good hours works the four best hours of doors and dials, not a random walk through a spreadsheet.

A simple, defensible scoring model you can build today

You do not need machine learning to score your own list. You need a weighted sum you can explain to a skeptical sales manager. Here is a starting framework — tune the weights to your market.

Signal Weight Why
Roof age range midpoint vs. expected service life 35% The strongest predictor of replacement need. Closer to or past end-of-life scores higher.
Storm exposure (count and severity of recent events) 25% Accelerates failure and creates a timely reason to call.
Relationship strength (past customer / prior estimate / cold) 20% A warm record converts far better at the same roof age.
Ownership change since last contact 10% New owner = fresh intent, often inspection-driven.
Contact data confidence (valid phone/email) 10% A perfect roof you can't reach is worth nothing today.

Normalize each signal to 0-100, multiply by the weight, sum. Now sort descending. The top of that list is your week.

Worked example

Three records off the same purchased list, all "cold," post-enrichment:

Record A — 412 Oakridge. Roof age range 21-25 yr (product life ~25, so near end: score 95). Two hail events in 24 months (severity moderate: 70). Cold, no prior relationship (20). Sold 14 months ago (90). Valid mobile (100).

  • Weighted: (95×.35)+(70×.25)+(20×.20)+(90×.10)+(100×.10) = 33.3+17.5+4+9+10 = 73.8

Record B — 88 Walnut. Roof age range 12-15 yr (mid-life: 45). No storm events (10). Prior estimate two years ago (75). No ownership change (20). Valid mobile (100).

  • Weighted: (45×.35)+(10×.25)+(75×.20)+(20×.10)+(100×.10) = 15.75+2.5+15+2+10 = 45.25

Record C — 1190 Birch. Roof age range 7-10 yr (young: 15). One minor wind event (30). Cold (20). No ownership change (20). No valid phone, email only (40).

  • Weighted: (15×.35)+(30×.25)+(20×.20)+(20×.10)+(40×.10) = 5.25+7.5+4+2+4 = 22.75

A, then B, then maybe-never C. Record A is a near-end-of-life roof, recently sold, storm-exposed, and reachable — that is a call-today door even though it is a cold record. Record C is a young roof you cannot even reach; it gets suppressed and revisited in two years. Without scoring, a rep might have started at the top of the alphabet and burned the morning on Birch.

Set thresholds, not only a sort

A ranked list still needs cut lines so reps know where to stop:

  • Hot (call this week): top scores, typically near-end-of-life roof plus a recent storm or a warm relationship.
  • Warm (mail / nurture): mid-scores — aging but not urgent, or urgent but only reachable by mail. These go into a mail or drip cadence, not a dial list.
  • Hold (suppress, re-score later): young roofs, no events. Set a calendar trigger to re-score in 12-18 months when age and storm data have moved.
  • Dead (delete/suppress): un-roofable, out-of-area, do-not-contact, confirmed recently re-roofed.

The "hold" bucket is the one that compounds. Those records are not failures; they are appointments with your future self. Re-scoring them next year, after another year of aging and another storm season, is the cheapest pipeline you will ever build.

Working the refreshed list: outreach that matches the data

A scored list is only worth the outreach you put behind it. Match the channel and the message to what the data says about each record. Same roof, different relationship, different first sentence.

Match channel to score

  • Hot + reachable by phone: a rep dials. This is your highest-value time; protect it for the top of the list.
  • Hot + phone unreliable: door knock or a piece of direct mail with a specific hook, because the roof justifies the truck roll or the stamp.
  • Warm: mail and email drip. Lower cost per touch, appropriate for a roof that is aging but not urgent.
  • Hold: nothing now. A calendar re-score, not a call.

Scripts that use the data without overpromising

The whole point of enriching the record is that your rep can open with something true and specific instead of a generic pitch. But specific does not mean reckless. Three openers, by relationship:

Past customer (warm, aging roof): "Hi Janet, it's Mike from Cedar Ridge Roofing — we put a roof on your detached garage back in 2016. I was reviewing our older customers and your main roof is getting into the age where it's worth a free look before any small issue turns into an interior problem. Could I have someone swing by this week?"

Cold, storm-exposed, near end of life: "Hi, this is Dana with Summit Exteriors. We track which neighborhoods took the worst of the hail this spring, and your street was in one of the harder-hit pockets. Combined with the age of a lot of the roofs over there, we're offering free inspections so homeowners have documentation either way. No obligation — would a quick look help?"

New owner (sold since last contact): "Hi, congratulations on the place on Oakridge. I'm a local roofer — when homes around that age change hands, the roof is often near the end of its life and it's smart to know where you stand before a leak finds out for you. I'd be glad to do a free inspection and give you an honest read."

Notice what those scripts do not do: they don't claim to know the exact roof age, they don't promise the homeowner anything about insurance, and they don't say "free roof." They lead with a true, specific reason to look. The roof condition data earns the appointment; the inspection earns the job.

Mining the warm bucket: a worked walk-through

The past-customer and old-estimate bucket is the highest-return slice of any refreshed list, and it is the one most contractors never systematically work. Here is what mining it actually looks like.

Start with every estimate you wrote in the last three to six years that didn't close, plus every customer whose roof you touched eight or more years ago. Standardize and enrich those addresses. Now sort by the gap between the roof's current age range and its expected service life.

Suppose you pull 600 old estimates. After enrichment:

  • About 120 show a roof now in the top of its service-life band — these were the "borderline" bids from years ago that have aged into the buying zone. Highest priority. The homeowner already let you on the property once; the relationship is half-built.
  • About 90 show a roof that has since been re-roofed (fresh surface in imagery). Suppress these — they're satisfied for two decades. Do not let a rep waste a call confirming what the data already told you.
  • About 70 sold to new owners. Re-target as net-new with the new-owner script; the old estimate is irrelevant but the address is hotter than ever.
  • About 140 picked up storm exposure since you bid them. Layer that onto whatever their age says — an aging roof that also caught two hail events is a call-this-week record regardless of how the original bid went.
  • The remainder are still mid-life with no events. Drop into hold and re-score next year.

That single exercise turns a forgotten estimate backlog into roughly 120-to-260 genuinely workable records, most of them warm, at the cost of enriching 600 addresses. This is money that is already in your book — you paid to acquire these relationships once. Refreshing the data is how you collect on them a second time.

If your refreshed list is heavy on storm-exposed roofs, you are going to have claims conversations. There is a bright line here, and crossing it is how roofers get fined or shut down. Learn it cold and teach it to every rep.

What you can do, and should do well:

  • Inspect the roof and document thoroughly — dated photos, measurements, a clear record of the condition you observe.
  • Write an accurate, itemized repair estimate for the work you would do, aligned to standard estimating practice (Xactimate line items, real quantities).
  • State facts about your own scope — what you found, what you would replace, what it costs.
  • Hand that documentation and estimate to the homeowner, so the homeowner has the facts in their hands.

What you must never do (this is unlicensed public adjusting in most states, and it is a real legal exposure):

  • Negotiate, adjust, or "handle" the claim with the carrier for a fee.
  • Interpret the homeowner's policy or tell them what is and isn't covered.
  • Promise a specific payout, an approval, or that the claim will go through.
  • Say anything about the homeowner's deductible being waived, absorbed, covered, or made to disappear — in many states that is insurance fraud, full stop.
  • Advertise a "free roof."
  • Represent the homeowner against the insurer.

The safe frame, every time: you document, you estimate, you hand it over. The homeowner files. The insurer decides coverage. Your job is to show up with thorough facts about the roof and an accurate estimate for your work. That is genuinely valuable and completely defensible. The moment a rep starts talking about "getting your deductible covered" or "we'll handle the insurance company," you have stepped over the line. Make the do-not-say list part of onboarding and put it on a card in every truck.

This is also why current roof condition data is an asset here, not a liability: a dated storm-exposure record and an estimated roof age tell you which roofs are worth inspecting. The inspection produces the documentation. The documentation goes to the homeowner. Nothing in that chain requires you to touch the claim, and nothing in it should.

The economics: why this pays for itself

Contractors hesitate to spend on cleaning and enriching a list because the cost is upfront and visible while the return is downstream and uncertain. Run the math once and the hesitation usually disappears.

Take a 5,000-row pile. After cleaning, suppose 1,800 rows drop out as junk, duplicates, out-of-area, or do-not-contact — leaving 3,200 worth enriching. Say enrichment runs a low per-record cost; the suppressed 1,800 just saved you that cost on every one of them. Now you score the 3,200 and the model surfaces, say, 250 "hot" records — near-end-of-life roofs that are reachable, often storm-exposed or warm.

Your reps work those 250 first. Even at a modest connect-and-book rate, a few hundred well-targeted dials produces inspections, and inspections at the right age band close at a far higher rate than cold dials into a random list. One signed re-roof is worth thousands of dollars. You do not need many conversions out of 250 prioritized doors to cover the enrichment cost on all 3,200 rows several times over. The rest of the list isn't wasted either — it's sorted into warm (mail), hold (re-score later), and dead (suppressed), so nothing gets worked at the wrong cost.

Compare that to the default: a rep working the same 5,000 rows in spreadsheet order, burning hours on new roofs, re-roofed houses, wrong numbers, and out-of-area parcels, with no way to know which door is worth the knock. The enrichment cost is small; the cost of a rep's wasted month is not.

Keeping the list fresh: making this a system, not a one-time cleanup

The biggest waste is treating this as a project instead of a process. You clean and enrich the list once, work the hot bucket, and then let the whole thing rot again for three years. Build the loop instead.

A standing cadence

Frequency Action
Continuous New leads enter with standardized addresses and an initial score from day one.
Monthly Re-score the "hot" and "warm" buckets; move worked records to the right stage; suppress confirmed re-roofs and do-not-contacts.
After every major storm Re-run storm exposure across the whole list; any held record that was just hit jumps buckets. This is your fastest, most natural re-engagement trigger.
Annually Full re-enrichment: every "hold" record gets a fresh age range and a year of accumulated storm data. The roofs that crossed into the buying band surface automatically.

That annual re-enrichment is the engine. A roof you held last year because it scored 25 may score 60 this year purely because it aged twelve months and caught a hailstorm. You did nothing except re-run the data, and the record promoted itself.

Hygiene rules that keep the data trustworthy

  • One address format, enforced at entry. Standardize on the way in, not only in cleanup.
  • Stamp every record with a "data as of" date. A roof age range is only meaningful with the date it was estimated. Six-year-old enrichment is as stale as a six-year-old lead.
  • Track the source of every record and every field. When a number bounces or a roof turns out to be new, you want to know which source is feeding you bad data so you can stop paying for it.
  • Feed outcomes back in. When a record converts, note the score it had. After a season you will know whether your weights are right and can tune them. The model is only as good as the loop.

What pros get wrong

A short list of the expensive mistakes, gathered from contractors who learned them the hard way:

  1. Enriching before cleaning. Paying per record to attach data to junk. Always clean and suppress first.
  2. Trusting an exact roof-age date. Treating an imagery-derived age as a hard install date and looking foolish at the door when the homeowner re-roofed last year. Use the range, say "around 20 years" not "installed in 2004."
  3. Confusing a hail map with per-roof exposure. Working a whole ZIP because a county got painted red, instead of the streets that were actually in the core. Wastes the same effort the data was supposed to save.
  4. Skipping the legal scrub. Dialing into the Do Not Call registry without an established business relationship and eating penalties. Scrub first, every time.
  5. No re-score loop. Doing the cleanup once and letting it rot. The "hold" bucket is where next year's pipeline lives — abandoning it throws that away.
  6. Ignoring ownership changes. Treating a sold home as a dead lead instead of the fresh, often hotter, lead it has become.
  7. Crossing the claims line. Letting reps freelance on deductibles and "we'll handle the insurance." One regulatory complaint is more expensive than a year of clean leads.

A 30-day plan to refresh your old leads

If you want a concrete schedule to run this without it sprawling into a forever-project:

Week 1 — Consolidate and clean. Pull every list into one staging sheet. Standardize and geocode addresses. Dedupe on the address key. Sort into the A/B/C intent buckets. Suppress bucket C. Scrub against Do Not Call and your internal do-not-contact list.

Week 2 — Enrich the survivors. Attach roof age range, storm exposure, and ownership/property facts to buckets A and B. (Hand the cleaned address list to a service like RoofPredict, or assemble the layers from imagery and NOAA/IBHS sources yourself if you have the time.) Stamp every record with a "data as of" date.

Week 3 — Score and set thresholds. Run the weighted model. Sort. Draw your Hot / Warm / Hold / Dead cut lines. Build the call list (Hot, reachable), the mail list (Warm), and the calendar re-score triggers (Hold).

Week 4 — Work it and instrument it. Reps dial the Hot list with data-matched scripts. Mail goes to Warm. Every outcome — connected, booked, bad number, already re-roofed, not interested — gets logged back against the record and its score. By the end of the month you have booked inspections and a tuned model for next quarter.

Then you repeat the loop: monthly re-scores, a storm-triggered re-run whenever a major event hits, and a full annual re-enrichment. The list never goes stale again because you stopped letting it.

The bottom line

Your old leads did not fail. The data on them expired. A roof you couldn't sell at 14 years is a different proposition at 18, and your CRM has no idea because it has been showing the same age since the day you typed it in. Refreshing that list is mechanical: consolidate, standardize, dedupe, suppress the junk, scrub for compliance, attach current roof age and storm data, score, and work the top. Do it as a loop instead of a one-off and the same list keeps producing jobs year after year, because roofs keep aging and storms keep coming whether you update the records or not.

The roofs that are due are already on a list you own. RoofPredict is built to tell you which ones — re-scoring your own CRM and dead estimates with a roof-age range and storm history modeled per roof, so your reps work the houses that are worn out and skip the ones that aren't. It is a range, not a date, and odds, not proof — but pointed at a list you already paid to build, it is the cheapest pipeline in the building. If you want to see it run against a slice of your own old list, book a demo and bring a few addresses you already know the answer to. You decide if it nailed them.

FAQ

Can I get the exact age of a roof from its address?

No — and be skeptical of anyone who says yes. There is no public, centralized database of residential roof install dates; permits are inconsistent and often missing for re-roofs. What you can responsibly get is a roof age range estimated from aerial imagery over time, for example '18 to 22 years.' A trustworthy range beats a fabricated date, and it's enough to decide which roofs are worth an inspection.

Is a stale roofing lead worth more than buying fresh leads?

Often, yes. A purchased fresh lead is frequently sold to several competitors at once and has no relationship with you. Your old list contains past customers and people who already let you bid — warmer relationships at addresses whose roofs have only gotten older. Refreshing your own list with current roof data costs a fraction of buying the same volume of new leads and converts better because the relationship already exists.

How much of an old purchased list is usually unusable?

Plan on losing a meaningful chunk before you spend a dollar enriching it. Some addresses are invalid or out of your service area, some are duplicates of records you already have, some homes have already been re-roofed, and contact data decays roughly 20-30 percent per year. Cleaning and suppressing those first is the single highest-return step, because enrichment usually charges per record and you don't want to pay for junk.

What's the difference between a hail map and per-roof storm data?

A hail map shows that a storm passed through an area — often painting a whole county or ZIP the same color. Per-roof storm data models which individual roofs were actually in the damaging core versus the harmless fringe, since hail swaths are narrow and one street can be hammered while the next is fine. Per-roof exposure tells you which specific homes to inspect; a map just tells you a storm happened somewhere nearby.

Do I need to scrub my refreshed list against Do Not Call before calling?

Yes. Before any phone outreach, scrub against the FTC's National Do Not Call Registry and honor your own internal do-not-contact list. An established business relationship (a past customer or prior inquiry) gives you a limited window to contact some listed numbers, but it's time-bound and you should document the basis. Be aware of state rules and TCPA restrictions on autodialing and texting, which can be stricter than federal law.

How should I handle storm-damage leads without crossing into illegal territory?

Stay strictly on the documentation and estimate side. You can inspect, take dated photos, write an accurate itemized repair estimate for your own scope, and hand that documentation to the homeowner. You cannot negotiate or handle the claim with the carrier for a fee, interpret the policy, promise a payout or approval, say anything about waiving or absorbing the deductible, or advertise a 'free roof' — those cross into unlicensed public adjusting or fraud in many states. The homeowner files; the insurer decides coverage.

How often should I re-score and re-enrich my lead list?

Make it a loop, not a one-time project. Re-score your hot and warm buckets monthly, re-run storm exposure across the whole list after any major storm, and do a full re-enrichment annually. The annual refresh is the engine: roofs you held last year because they scored too low will promote themselves once they've aged twelve months and caught another storm season — you do nothing but re-run the data.

What signals should a roofing lead score actually use?

A defensible weighted model uses: roof age range relative to expected service life (the strongest signal), recent storm exposure, relationship strength (past customer or prior estimate beats cold), ownership change since last contact, and contact-data confidence (a perfect roof you can't reach is worth nothing today). Normalize each to 0-100, weight them, sum, and sort. Then feed conversion outcomes back in to tune the weights over time.

What does RoofPredict actually do with my old list?

You hand it a cleaned list of addresses — your CRM, dead estimates, or a purchased list — and it enriches each row with a roof-age range from aerial imagery and a storm history modeled per roof, then ranks which roofs are actually due. It is a targeting and list-enrichment layer, not a lead service: it returns a range, not an install date, and storm odds, not a damage guarantee. It does not measure the roof for your estimate and does not touch anyone's insurance claim.

Should I re-target homes that sold since I last contacted them?

Yes — a sold home is often a hotter lead, not a dead one. The new owner has no memory of your prior estimate, usually a fresh mortgage, and frequently a home-inspection report that flagged the roof. If the roof is also near the end of its service life, an ownership change is one of the strongest 'reach out now' signals you can layer onto an old address, so treat those records as net-new opportunities.

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.

By signing up, you agree to receive The Roofline by RoofPredict. Unsubscribe anytime.

Sources

  1. National Do Not Call Registry — Information for Businessesftc.gov
  2. FTC Telemarketing Sales Ruleftc.gov
  3. NOAA Storm Prediction Centerspc.noaa.gov
  4. NOAA NCEI Storm Events Databasencdc.noaa.gov
  5. National Weather Serviceweather.gov
  6. Insurance Institute for Business & Home Safety — Hail Researchibhs.org
  7. USPS Publication 28 — Postal Addressing Standardsusps.com
  8. NRCA — National Roofing Contractors Associationnrca.net
  9. U.S. Census Bureau — American Housing Surveycensus.gov
  10. International Residential Code (IRC) — ICC Codesiccsafe.org
  11. Texas Department of Insurance — Public Insurance Adjusterstdi.texas.gov
  12. FCC — Telephone Consumer Protection Act (TCPA) Rulesfcc.gov
  13. U.S. Bureau of Labor Statistics — Roofers Occupational Outlookbls.gov
  14. RoofPredictroofpredict.com

Related Articles