Skip to main content

How to Score Roofing CRM Leads by Likelihood the Roof Is Due

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

Most roofing CRMs are a graveyard with good lighting. You have a few thousand contacts in there: old estimates that never closed, past customers you installed for years ago, door-knock cards your reps typed in, a couple of bought lists, the form fills from your website. And every Monday somebody decides who to call based on whatever floats to the top of a list sorted by date. That is not a strategy. That is a slot machine.

The contractors who pull real money out of a database do one thing the others don't: they rank it. They put a number on every contact that answers a single question — how likely is it that this specific roof needs to be replaced in the next 12 to 24 months? Then they work the database from the top of that number down. The reps who knock get sent to the doors most likely to convert. The mail goes to the addresses most likely to call back. The old estimates that are suddenly worth a follow-up rise to the surface instead of rotting under three years of newer junk.

This is lead scoring, and it is not new — software companies have done it forever. What's new is that a roof gives you signals no SaaS lead ever had. A roof has an age. It sits under a specific weather history. It belongs to a house with a known value and a known owner who has lived there a known number of years. Those facts are knowable, they are scoreable, and almost nobody in roofing is using them to sort their own book.

Below is the whole system: the signals that actually predict a roof replacement, how to weight them, the math to combine them into one number, how to build it from a spreadsheet up to an automated pipeline, where the data comes from, the edge cases that wreck a naive model, and the mistakes that make most roofers' scoring worse than no scoring at all.

What a lead score actually is (and what it is not)

A lead score is a single number — call it 0 to 100 — that estimates the probability a contact is worth real sales effort right now. It is a ranking tool, not a verdict. A 91 does not mean the roof is shot. It means that out of every address in your CRM, this one sits in the slice where your time pays back the most. A 12 does not mean you'll never sell that house. It means today is not the day, and your Tuesday is better spent elsewhere.

Three things people get wrong on day one:

A score is relative, not absolute. The point is to order your list. If your whole database scores between 40 and 60, that's fine — you still work the 60s before the 40s. Don't get hung up on whether 60 is "good."

A score predicts effort-worthiness, not truth. No model knows the roof is failing. Aerial age estimates give you a range, storm models give you odds, and equity data gives you capacity to pay. You are stacking probabilities, not reading a crystal ball. The honest version of every score is "more likely than the one below it."

A score decays. A contact you scored in March is not the same contact in November if a hailstorm rolled through in July. Scores are a living layer on your data, not a one-time stamp.

The payoff is blunt. Say you have 4,000 contacts and a two-person canvass crew that can physically touch 250 doors a week. Without scoring they touch a random 250. With scoring they touch the top 250. If the top decile of your list converts at even twice the rate of the average — a conservative assumption once roof age and storm exposure are in the model — you just doubled the output of the same payroll without buying a single lead.

The signals that predict a roof replacement

Not every fact about a contact matters. A scoring model lives or dies on picking signals that are (a) actually predictive of a roof needing replacement and (b) reliably available across most of your database. Here are the ones that earn their place, grouped by how much weight they deserve.

Tier 1: roof age and storm exposure (the engine)

These two are the heart of the model because they speak directly to the physical condition of the roof. Everything else is context.

Roof age. An asphalt shingle roof in most of the country is a candidate for replacement somewhere in the 18-to-25-year window, sooner in brutal-sun and high-UV regions, sooner again for cheap 3-tab versus architectural shingle. The single most useful thing you can know about a roof is roughly how old the covering is. Note the word roughly. You will almost never get an exact install date. What you can get — from aerial imagery analysis — is a defensible range, like "18 to 22 years." That range is enough to score on. A roof estimated at 19-23 years scores far higher than one estimated at 4-7 years, and that's the call that matters.

Be careful with the obvious-looking shortcut here. The year a house was built is not the age of its roof. A 1968 house may be on its third roof. Property records and Zillow give you year built, and re-roofs are invisible to them. Scoring on year-built alone will send your crew to houses that got a new roof eight years ago. More on this trap in the data section.

Storm exposure, modeled per roof. Hail and high wind are what turn a "someday" roof into a "now" roof. But the way most roofers use weather data is too blunt to score on. A county-level hail report or a swath map tells you a storm passed through the area. It does not tell you whether this roof took a hit hard enough to matter. Two houses three blocks apart can have wildly different exposure based on hail size, the angle the stones fell, wind direction, and the slope and orientation of each roof plane.

The scoreable version of storm exposure is per-address: for this specific roof, what is the modeled severity and recency of hail and wind events it has actually absorbed? A roof that took two qualifying hail events in the last three years, the most recent one severe, is a different animal than one in the same ZIP that the storms mostly missed. When you can get exposure modeled at the roof level instead of the ZIP level, it becomes one of your strongest single predictors.

Tier 2: ownership and equity (capacity and motivation)

A roof can be 22 years old and storm-beaten, but if the owner can't or won't pay, your conversion dies on the doorstep. These signals predict whether a likely-due roof turns into an actual signed job.

Length of ownership / tenure. Someone who has owned the home 12 years and is on the original roof is a strong candidate — they've been there long enough to be on an aging roof and long enough to have built equity and intent to stay. Brand-new owners (under a year) are mixed: some just bought and won't touch the roof for a while, others bought because the roof needs work and are now shopping. Tenure is a useful signal but read it with nuance.

Owner-occupied vs. rental / absentee. Owner-occupants generally convert better for retail roofing than absentee landlords, who are slower, more price-driven, and harder to reach. This isn't absolute — some investors maintain aggressively — but as a scoring input, owner-occupied earns points.

Estimated equity / home value band. You're not pulling anyone's finances. But public assessed values, estimated market values, and rough mortgage-age signals let you band a property into "likely has the equity to fund a roof" versus "underwater or thin." A homeowner with substantial equity can finance, HELOC, or cash a roof far more easily. This is a capacity signal, and it's the difference between a high-likelihood roof that pays and one that stalls in financing.

Tier 3: engagement and source (intent and freshness)

These are the classic CRM signals — and in roofing they're real, just usually overweighted relative to the physical ones above.

Recency and type of prior contact. An estimate you wrote 14 months ago that didn't close is gold if the roof has since aged into the window or taken a storm. A past install customer is worth scoring for referral and re-roof-of-the-secondary-structure work (detached garage, the rental they also own). A cold record you've never spoken to scores lower on engagement but can score high on physical signals.

Lead source quality. A referral or a repeat customer behaves differently than a bought aggregator lead that five competitors also bought. Source is a legitimate input — weight it, but don't let it dominate. A great roof at a mediocre-source address still beats a pristine-source address with a five-year-old roof.

Stated need / inbound signal. Anyone who filled out a form, called about a leak, or told a canvasser "we've been meaning to look at it" carries explicit intent. That's a thumb on the scale, but verify the roof signals — plenty of "interested" homeowners have a roof with ten good years left.

A note on what NOT to put in the model

Leave out anything you can't get consistently across the database, anything that's pure noise (the contact's first name, the day of the week they were added), and anything that smells like a fair-housing or fair-lending problem. You are scoring roofs and properties, not people's protected characteristics. Score the address and its physical and ownership facts. Stay far away from demographic proxies. When in doubt, ask whether the input describes the roof or the resident — and lean toward the roof.

How to weight the signals

Here's where most homegrown models go sideways: people either weight everything equally (so a stale lead source drags down a perfect roof) or they let one pet signal run the whole show. The fix is to assign each signal a share of the total 100 points based on how directly it predicts a due roof that will pay.

A defensible starting weighting for a residential retail roofer:

Signal Points (max) Why it carries this weight
Roof age (range) 30 Most direct predictor of physical need
Storm exposure (per-roof, recency-weighted) 25 Turns "someday" into "now"; drives insurance-pathway jobs
Estimated equity / value band 15 Capacity to actually fund the job
Ownership tenure + owner-occupied 12 Motivation and reachability
Prior engagement (estimate/customer/inbound) 12 Warmth and ease of the conversation
Lead source quality 6 Real but secondary; don't let it dominate
Total 100

The two physical signals — age and storm — are 55 of the 100 points on purpose. They're the ones the rest of the industry doesn't have at the address level, and they're the ones that actually correlate with a roof coming off. Everything else modifies that core.

If you're a storm-restoration shop, push storm exposure up to 30-35 and trim equity, because the insurance pathway changes the financing math. If you're a pure retail-replacement shop in a low-hail region, do the opposite: age and equity climb, storm drops to 10. The weights are yours to tune — the discipline is that they must sum to 100 and each must be defensible out loud.

Turning each signal into points

A weight is a max. You still need a rule that converts the raw value into a fraction of that max. Use simple, transparent scoring bands — you want to be able to explain any score to a skeptical sales manager in one sentence.

Roof age (30 pts max):

Estimated age range Points
20+ years 30
16–20 years 26
12–16 years 16
8–12 years 8
Under 8 years 0
Unknown 12 (neutral default)

Storm exposure (25 pts max):

Modeled per-roof exposure Points
Severe hail/wind in last 24 mo 25
Moderate event in last 24 mo 17
Event 2–4 years ago 10
Old or marginal events only 4
No meaningful exposure 0

Equity / value band (15 pts): high equity 15, mid 9, thin 3, unknown 7.

Tenure + occupancy (12 pts): owner-occupied 8+ years 12, owner-occupied 3–8 years 9, owner-occupied under 3 years 5, absentee 2.

Engagement (12 pts): open/recent estimate 12, past install customer 9, inbound inquiry 10, prior contact no estimate 5, never contacted 2.

Source (6 pts): referral/repeat 6, organic/web 4, canvass 3, aggregator/bought 1.

The "unknown" defaults matter more than they look. A huge chunk of your database will be missing a field. Default missing data to a neutral middle, never to zero and never to max. Defaulting unknowns to zero buries every contact you simply haven't enriched yet; defaulting to max floods your crew with junk. Neutral keeps the unenriched in the running until you learn more.

One more refinement worth building in once the basic model runs: track how confident you are in each input, and let confidence scale the points. A roof-age range of "19–21 years" pulled from clear, recent aerial imagery deserves its full 26–30 points. A range of "15–25 years" from a single grainy older image is genuinely uncertain — you might award 80 percent of the band's points and flag the address for a drive-by before you commit a crew to it. The same logic applies to equity (a fresh assessor record versus a stale one) and to storm exposure (a well-modeled severe event versus a marginal one at the edge of the swath). You don't need a separate confidence column for every signal on day one, but knowing which scores rest on solid data and which rest on a guess keeps you from over-trusting a number that looks precise because it has two decimal places.

The math: combining signals into one score

With bands defined, the score is an addition problem. Here's the full worked example for one contact.

123 Maple Street. Estimate written 16 months ago, never closed. Aerial age estimate 18–22 years. Two hail events modeled at the roof in the last 30 months, the most recent moderate-to-severe. Owner-occupied, 11 years tenure, high equity band. Source: organic web form.

Signal Band hit Points
Roof age 18–22 yr → 16–20 band 26
Storm exposure severe in last 24 mo 25
Equity high band 15
Tenure/occupancy owner-occ, 11 yr 12
Engagement open estimate (16 mo) 12
Source organic web 4
Total score 94

A 94. That contact should have been called months ago, and a date-sorted list would have buried it under newer noise. Now compare a contact that looks attractive on the surface but isn't:

88 Birch Lane. Brand-new website inquiry this morning. House built 1962 (no aerial age yet). No modeled storm history. Recently sold — owner there 7 months. Value band unknown.

Signal Band hit Points
Roof age unknown (year-built is NOT roof age) 12
Storm exposure none 0
Equity unknown 7
Tenure/occupancy owner-occ under 3 yr 5
Engagement inbound inquiry 10
Source organic web 4
Total score 38

The fresh inbound scores a 38 — worth a call back, sure, but not ahead of Maple Street. This is the exact judgment a human gets wrong all day: the shiny new lead feels urgent, the 16-month-old estimate feels dead. The score corrects the instinct.

Run one more, because the most instructive case is the contact that splits the difference:

412 Cedar Court. Past install customer — you put a roof on the detached garage four years ago, but the main house is original. Aerial age estimate on the main house 21–24 years. No modeled storm history (low-hail region). Owner-occupied, 16 years tenure, mid equity band. No open estimate on the main roof.

Signal Band hit Points
Roof age 21–24 yr → 20+ band 30
Storm exposure none meaningful 0
Equity mid band 9
Tenure/occupancy owner-occ, 16 yr 12
Engagement past install customer 9
Source repeat customer 6
Total score 66

A 66 — no storm points at all, yet it ranks well above the fresh inbound because the roof is genuinely old, the owner is rooted, and you already have a relationship and a foot in the door. That's a phone call you make this week: "We did your garage a few years back — the main roof's getting up there in age, want us to come take a look before it starts giving you trouble?" The score surfaces a warm, high-probability job that a date-sorted list would never have shown you, because nothing about this contact is "new."

Multiplicative gates (when one factor should veto)

Pure addition has a flaw: a contact can rack up points on soft signals while the roof itself is brand new. If your roof-age data is solid and says "4 years," no amount of engagement or equity should send a crew there for a replacement pitch. Handle this with a gate — a multiplier that caps the score when a hard disqualifier is present.

A simple version: if roof age is confidently under 6 years, multiply the final score by 0.3. The contact can still surface for gutters, maintenance, or a future tickle, but it won't crowd the replacement queue. Use gates sparingly and only on confident data — gating on a shaky signal just hides good contacts.

Decay (keeping scores honest over time)

Add a time component so engagement points fade. An estimate written last week and one written 30 months ago shouldn't carry identical engagement weight. A clean approach: multiply the engagement points by a recency factor — full value under 6 months, 0.7 from 6–18 months, 0.4 beyond. The physical signals (age, storm) don't decay the same way; if anything, age climbs — a roof you scored at 17 years is 18 next year, and a new storm only adds exposure. Re-score the database on a schedule (below) so this stays live.

Building it: from spreadsheet to pipeline

You do not need to buy a platform to start. You need to start. Here's the maturity ladder.

Stage 1 — the spreadsheet prototype (a weekend)

Export your CRM to a spreadsheet. One row per contact, one column per signal. Add a column per signal for its points using nested IF formulas off your bands, then a final column that sums them (and applies the gate/decay multipliers). Sort descending. You now have a ranked list you can hand to a rep Monday morning. This is genuinely how most good scoring models are born — the math is grade-school arithmetic; the value is in the discipline and the data.

Things to nail at this stage:

  • Lock the bands in one place. Put the thresholds in a small reference table the formulas point at, so you tune weights without rewriting every cell.
  • Add a "why" column. Concatenate the top two contributing factors into plain text — "20+ yr roof + recent hail" — so the rep sees why a contact is hot, instead of a bare number. Reps trust a score they can read.
  • Stamp the scoring date. You'll want to know how stale each score is.

Stage 2 — native CRM scoring (a week or two)

Most roofing CRMs and general CRMs have a scoring feature or at least custom fields plus automation. Recreate your bands as automation rules or a scoring property. The win here is that the score lives next to the contact, updates when fields change, and can drive views and assignment. Build a saved view: "Score 80+, not contacted in 30 days, assigned to canvass." That view is your Monday list.

Watch the ceiling: native scoring tools often only see fields already in the CRM. If your CRM doesn't hold roof age or storm exposure, native scoring can only rank on engagement and source — the weak half of the model. Which is why stage 3 exists.

Stage 3 — enriched and automated (the real system)

The mature version enriches every address with the physical and ownership signals your CRM doesn't natively hold, then scores on the full picture and re-scores on a schedule. The pipeline:

  1. Export / sync the address list out of the CRM (or connect via API).
  2. Enrich each address with roof-age range (from aerial analysis), per-roof storm exposure, ownership/tenure/occupancy, and equity band.
  3. Score with your weighted model, gates, and decay.
  4. Write it back to the CRM as a score field plus the "why" reasons and the enriched fields themselves.
  5. Re-run monthly, and event-trigger a re-score after any significant storm in your service area.

That write-back step is what makes it stick. The score and the reasons live in the CRM your reps already use, so nobody has to open a separate tool. The reps just work the top of the list.

Where the data comes from

A scoring model is only as good as its inputs. Here's the honest sourcing picture for each signal, including the limits.

Roof age. You have three options. (1) Your own records — if you installed it, you know. Mine your job history first; it's the most accurate roof-age data you'll ever have, and it's free. (2) Public records for year built — useful as a weak floor, useless for re-roofs, never treat it as roof age. (3) Aerial imagery analysis that estimates the age of the current covering from how it looks from above and from historical imagery — this is the only scalable way to get an actual roof age (as a range) across thousands of addresses you didn't install. This is exactly the gap RoofPredict fills, covered in its own section below.

Storm exposure. Public sources exist — NOAA's Storm Events Database and the Storm Prediction Center publish hail and wind reports, and the National Weather Service archives warnings. These are real and authoritative, but they're event- and area-level, not roof-level. To score well you want exposure modeled to the individual roof (size, direction, slope, recency), which is a modeling step on top of the raw public data, not the raw data itself.

Ownership, tenure, occupancy, equity. County assessor and recorder records (assessed value, owner of record, sale dates, owner mailing address vs. site address for the absentee signal) are public and authoritative. Several data vendors package this nationally. The U.S. Census gives you area-level context (owner-occupancy rates, median values) useful for sanity checks, not per-address scoring. Equity is estimated — assessed value minus an estimated mortgage balance inferred from sale price and date — so band it, don't treat it as exact.

Engagement and source. This one you already own. It's sitting in your CRM. The work is cleaning it — deduping, standardizing source labels, and making sure "estimate written" actually means an estimate was written.

A reality check on data quality: every external source has error. Aerial age is a range, not a date. Equity is an estimate. Storm models are odds. Build the model to expect fuzziness — that's why you score in bands and default unknowns to neutral. A model that demands perfect data never ships.

Where RoofPredict fits

The two heaviest-weighted signals in the whole model — roof age and per-roof storm exposure — are exactly the two that don't live in your CRM and that you can't easily get yourself across a few thousand addresses. That's the gap RoofPredict was built for.

RoofPredict takes your address list (or scans an area you define) and returns, per address, a roof-age range estimated from aerial imagery and a storm exposure read modeled on that specific roof — not a ZIP-level hail map, but hail and wind scored against the individual roof, paired with its age. In scoring terms, it hands you the 55 points of the model the rest of the industry can't fill at the address level. You can enrich your own CRM and mailing list with those signals and feed them straight into the weighting above.

The honest limits, because a model built on hype is worse than no model: roof age comes back as a range, not an install date — the model is reading a roof from above, not pulling a receipt. Storm exposure is odds, not proof a shingle cracked — it tells you which roofs the storm most likely wore out, which is exactly what a likelihood score is supposed to capture. RoofPredict tells you which roofs to look at first; your rep on the ladder confirms the actual condition. It sharpens the targeting you already do — it is not a lead-buying service, and it won't hand you a homeowner who's already raising their hand. It tells you which of your doors and which of your old estimates are most likely due, so your crew, your mail, and your follow-up calls hit the right addresses instead of the whole street.

That's the natural home for it in a scoring system: it's the enrichment layer that makes the heaviest signals real, so the number you sort on actually means something.

Putting the score to work

A score nobody acts on is a vanity metric. Here's how the ranked list changes each motion.

Canvassing and door-knocking

Route your crew by score, not by geography alone. The ideal is a route that's both tight geographically and sorted by score within the area — you don't want reps driving across town between 90s, but within a workable cluster, the 90s get knocked before the 50s. Give each rep the "why" line for every door so they walk up knowing this is a 19-year-old roof that took hail in the spring, not a blind knock. A green canvasser who knocks pre-qualified doors closes more, makes money faster, and stays — which quietly fixes the rep-churn problem that bleeds most roofing sales teams.

What the rep says at the door stays on the right side of the line: they're there to look at the roof and document its condition, not to promise anything. "We've been through the neighborhood after the spring storms; based on the age and what we're seeing from the street, yours is one we'd want to get up on and document properly" is honest and it's compliant. More on the compliance line below.

Direct mail

Mail is expensive per piece and most roofers spray it. Scoring fixes the economics: mail the top of your list, skip the new roofs entirely. If your model says 600 of your 4,000 addresses are genuinely likely-due, you mail 600 — not 4,000 — and the response rate per thousand climbs because you cut the dead weight. The same budget either goes further or gets reallocated to more touches on the addresses that matter. Personalize the piece with the reason where you can without overclaiming — "homes in your area built around [era] are reaching the age where roofs are commonly replaced" is fine; "your roof is failing" is not, because you don't know that from the air.

Working the old CRM book (the cheapest money you'll find)

The highest-ROI use of scoring is mining the database you already paid to build. Two buckets:

  • Dead estimates that aged into the window. Pull every unclosed estimate over 12 months old, enrich and re-score it. The ones where the roof has since aged into the 18+ band or taken a storm are warm calls with context: "We quoted you back in [month] — given the storms we've had since, I wanted to see if you wanted us to come take another look." You already have the measurements and the relationship.
  • Past install customers. Score them for the other structures they own (the detached garage, the rental, the parents' house they mentioned) and for referral timing. A happy customer whose secondary roof is now 20 years old is a layup.

Re-scoring triggers

Set two cadences. A monthly full re-score to catch aging-in and new enrichment. And an event-triggered re-score after any significant hail or wind event in your service area — the storm just changed the exposure points on hundreds of roofs at once, and the contractor who re-scores and re-routes the next morning is working the right doors while everyone else is still working last month's list.

The compliance line on storm and insurance scoring

If storm exposure is in your model — and it should be — you'll generate lists of homes that likely took hail or wind. That's legitimate and valuable. But the moment your reps or your mail start talking about insurance, there's a bright line you cannot cross, and crossing it is unlicensed public adjusting in most states.

Here's the safe frame, and it's genuinely the right way to run the business anyway:

What you (the roofer) MAY do. Inspect the roof. Document the damage thoroughly with photos and measurements. Write an accurate, itemized repair estimate aligned to standard estimating practice. Hand that documentation and estimate to the homeowner. State facts about your own scope — what you'd repair and what it costs — to the carrier if the homeowner asks you to. That's all on the document-and-estimate side, and it's exactly what good restoration roofers do.

What you MAY NOT do, for a fee, on the homeowner's behalf:

  • Negotiate, adjust, or "handle" the claim with the insurer.
  • Interpret the policy or tell the homeowner what is or isn't covered.
  • Promise a specific payout, approval, or that the claim will go through.
  • Promise the deductible will be waived, absorbed, eaten, or made to disappear. (It's the homeowner's legal obligation; offering to erase it is insurance fraud in many states.)
  • Advertise a "free roof."
  • Represent the homeowner against the insurer.

The clean division of labor: you document and estimate; the homeowner files; the insurer decides coverage. Your scoring model and your reps live entirely on the first part — "which roofs likely qualify based on age and storm exposure, and here's thorough documentation and an accurate estimate." Teach your whole team the do-not-say list explicitly, because a green canvasser repeating "we'll get your roof covered, deductible's on us" can expose the company to real liability no matter how good your targeting is. Score the roofs, document the damage, write the estimate — and stop exactly there.

Common mistakes that make scoring backfire

A bad scoring model is worse than none, because it gives false confidence and sends crews to the wrong doors with a number that feels authoritative. The ways it goes wrong:

Scoring on year-built instead of roof age. The single most common error. Year built is in every public record, so it's tempting. But re-roofs are invisible to it, and a model that treats a 1965 house as a 60-year-old roof will fill your route with houses that got new shingles last decade. Year built is, at best, a weak floor — never the roof-age input.

Overweighting engagement. SaaS scoring leans hard on "opened the email, clicked the link." In roofing, the physical roof matters more than the click. An overweighted-engagement model ranks a tire-kicker with a 6-year-old roof above a quiet homeowner on a 22-year-old roof that just took hail. Keep the physical signals at the core.

Letting lead source dominate. A premium-source lead on a new roof is still a new roof. Source is a 6-point modifier, not a 40-point driver.

Defaulting unknowns to zero. This silently deletes from contention every contact you haven't enriched yet — which early on is most of them. Default to neutral.

Never re-scoring. A static score rots. Roofs age, storms hit, estimates go stale. A model you ran once last year is lying to you now.

Treating a range like a date or odds like proof. The model gives you likelihood. The rep on the ladder gives you truth. Confusing the two leads to overclaiming at the door and on the mail piece, which is both a trust problem and, near insurance, a compliance problem.

Scoring people instead of properties. Stay on the roof and the property's public facts. Don't build a model that leans on protected characteristics or their proxies. Score the address.

Building the perfect model and never shipping. The weekend spreadsheet that ranks your book today beats the perfect automated pipeline you'll "get to next quarter." Start crude, work the top of the list, improve the model with what you learn.

A 30-day rollout plan

Week 1 — Clean and export. Dedupe the CRM, standardize source labels, pull a clean address export. Decide your six signals and their weights (start with the table above). Build the spreadsheet model and score the database as-is on the data you already have.

Week 2 — Enrich the heavy signals. Get roof-age ranges and per-roof storm exposure onto your addresses (this is where an enrichment source earns its keep), plus ownership/equity from assessor data. Re-score with the full model. Now your top decile is real.

Week 3 — Operationalize. Write the scores and "why" reasons back into the CRM. Build the saved views: top-score canvass list, top-score mail pull, aged-estimate re-engagement list. Brief the reps on reading the "why" line and on the compliance do-not-say list.

Week 4 — Run and measure. Work the top of the list for two weeks. Track conversion by score decile — you're looking for the top decile to clearly out-convert the average. Tune the weights based on what closed. Set the monthly re-score and the post-storm trigger. Now it's a system, not a project.

Getting your sales team to actually use it

The model can be perfect and still die if your reps don't trust it. Tradespeople and seasoned closers have a healthy distrust of anything that smells like a marketing gimmick or a suit's spreadsheet telling them how to do their job — and they're often right to. A score that shows up as a naked number with no explanation gets ignored within a week. Here's how to earn the buy-in:

Lead with the "why," not the number. A rep doesn't care that 123 Maple is a 94. They care that it's a 20-year-old roof that took hail in the spring and you already quoted the owner once. Surface the two or three reasons in plain trade language right next to the score. When the reason is obviously real, the number earns credibility by association.

Prove it with their own results. Don't argue the model — run it. Give one rep a scored route for two weeks and let the close rate speak. When a green canvasser knocks pre-qualified doors and starts booking inspections instead of getting doors shut in his face, word travels through the crew faster than any training slide. The score that makes reps money is the score reps use.

Let them override — and watch the overrides. Reps know things the data doesn't: the house with the blue tarp, the neighbor who mentioned a leak, the street that's all rentals. Let them flag and re-rank within reason. Then watch which overrides actually closed. Sometimes the rep's gut beats the model and you learn a new signal to add; sometimes the override flops and the rep learns to trust the score. Either way the system gets smarter and the team owns it.

Don't let it replace judgment at the door. The score gets the rep to the right door. What happens after the knock is still selling, still inspecting, still climbing the ladder to see the real condition. Frame the score as a tool that stops them wasting their talent on dead doors — not as a replacement for the talent. That framing lands with people who are proud of being good at the job.

Measuring whether the score works

The whole point is more revenue per unit of effort, so measure that directly. Track conversion rate by score decile: pull contacts into ten buckets by score and watch close rates climb as score climbs. If your top decile doesn't out-convert your bottom decile by a wide margin, your weights or your data are off — fix the model, don't abandon it. Also watch cost-per-acquired-job by motion: scored mail should beat sprayed mail per dollar; scored canvass routes should beat random routes per rep-hour. And watch the database utilization rate — what fraction of your CRM is actually being worked. A good scoring system pulls money out of contacts that were sitting dead, so that number should climb.

The contractors who win the next few years won't be the ones who buy the most leads. They'll be the ones who own their next jobs — who turn their own streets and their own customer book into a ranked, repeatable pipeline of the roofs most likely to be due, storm or not. Scoring is how you build that. The math is simple. The discipline is the hard part, and it's the part your competitors won't do.

FAQ

What signals best predict that a roof needs replacing?

The two strongest, by a wide margin, are roof age (as an estimated range, not the year the house was built) and per-roof storm exposure (hail and wind modeled against the specific roof, not a ZIP-level map). Together those should carry over half your scoring weight. Capacity-and-motivation signals come next: estimated home equity, length of ownership, and whether it's owner-occupied. Engagement and lead source matter but should be modifiers, not drivers — a tire-kicker with a 6-year-old roof is still a 6-year-old roof.

Can I just use the year the house was built as the roof age?

No, and it's the most common mistake in roofing lead scoring. Year built is in every public record, but re-roofs are invisible to it — a 1965 house may be on its third roof, and a 2005 house may have just been re-shingled after a storm. Scoring on year built sends your crew to houses that got new shingles last decade. Use year built only as a weak floor. For actual roof age across addresses you didn't install, you need aerial imagery analysis that estimates the age of the current covering as a range.

How do I turn signals into one score?

Give each signal a share of 100 points based on how directly it predicts a due roof that will pay (for example: roof age 30, storm exposure 25, equity 15, tenure/occupancy 12, engagement 12, source 6). For each signal, define simple scoring bands that convert the raw value into a fraction of its max points, then add the points up. Add a gate that caps the score when the roof is confidently brand new, and a decay factor so old engagement fades. Sort the database descending and work the top first.

What should I do with contacts that are missing data?

Default missing fields to a neutral middle value, never to zero and never to maximum. Defaulting unknowns to zero silently removes from contention every contact you simply haven't enriched yet — which early on is most of your database. Defaulting to max floods your crew with junk. Neutral keeps the unenriched contacts ranked reasonably until you learn more, then re-score once you've enriched them.

How often should I re-score my CRM?

Two cadences. Run a full re-score monthly to catch roofs aging into the replacement window and to fold in newly enriched data. And run an event-triggered re-score after any significant hail or wind event in your service area — a storm changes the exposure points on hundreds of roofs overnight, and the contractor who re-scores and re-routes the next morning works the right doors while competitors are still on last month's list.

Do I need to buy software to start scoring?

No. The math is grade-school arithmetic. Export your CRM to a spreadsheet, add a column of points per signal using your bands, sum them, and sort descending — you can have a ranked list to hand a rep within a weekend. The real value isn't the tool, it's the discipline and the data quality. Move to native CRM scoring and then to an automated, enriched, write-back pipeline as you grow, but start with the spreadsheet.

Where does RoofPredict fit in a scoring model?

It fills the two heaviest-weighted signals that don't live in your CRM and are hard to get yourself across thousands of addresses: a roof-age range from aerial imagery and storm exposure modeled on each specific roof, paired together. You enrich your own address list or CRM with those signals and feed them into your weighting. Honest limits: roof age comes back as a range, not an install date, and storm exposure is odds, not proof — it tells you which roofs to look at first, and your rep on the ladder confirms the actual condition. It sharpens your own targeting; it is not a lead-buying service.

Can I score leads by which homes likely had storm damage and pitch insurance?

You can score by storm exposure and target the roofs most likely to have taken hail or wind — that part is legitimate. But there's a hard line on the insurance conversation. You may inspect, document the damage thoroughly, and write an accurate repair estimate, then hand that to the homeowner. You may not, for a fee, negotiate or handle the claim, interpret what the policy covers, promise a payout or approval, promise to waive or absorb the deductible, or advertise a free roof — that's unlicensed public adjusting and, in the case of the deductible, can be fraud. You document and estimate; the homeowner files; the insurer decides coverage.

What's the highest-ROI thing to do with a lead score first?

Mine the database you already paid to build. Pull every unclosed estimate over 12 months old, re-enrich and re-score it, and call the ones whose roofs have since aged into the replacement window or taken a storm — you already have the measurements and the relationship, so these are warm calls with context. Then score past install customers for their other structures (detached garages, rentals, family homes) and for referral timing. This is the cheapest money in your CRM.

How do I know if my scoring model actually works?

Measure conversion rate by score decile. Sort contacts into ten buckets by score and watch close rates rise as the score rises — your top decile should clearly out-convert your average and your bottom decile. If it doesn't, your weights or your data are off, so fix the model rather than scrapping it. Also compare cost-per-acquired-job for scored versus unscored mail and canvass routes, and watch how much of your dead database is now getting worked.

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. Storm Events Databasencdc.noaa.gov
  2. NOAA Storm Prediction Centerspc.noaa.gov
  3. National Weather Serviceweather.gov
  4. Insurance Institute for Business & Home Safety (IBHS)ibhs.org
  5. National Roofing Contractors Association (NRCA)nrca.net
  6. OSHA Fall Protection in Constructionosha.gov
  7. U.S. Census Bureau American Community Surveycensus.gov
  8. 2021 International Residential Code (IRC), ICCcodes.iccsafe.org
  9. FTC Business Guidance on Truth in Advertisingftc.gov
  10. Texas Department of Insurance: Public Insurance Adjusterstdi.texas.gov
  11. Bureau of Labor Statistics: Roofers Occupational Outlookbls.gov
  12. National Association of Insurance Commissioners (NAIC)naic.org
  13. FEMA National Risk Indexhazards.fema.gov
  14. RoofPredictroofpredict.com

Related Articles