What To Do With Old Roofing Leads That Didn't Convert
On this page
Every roofing company in the country is sitting on money it already paid for. It's in the CRM. It's in the shoebox of business cards by the truck. It's in the spreadsheet a sales rep keeps that nobody else can open. It's the homeowner who said "let me talk to my wife," the no-show from a hailstorm two springs ago, the quote you wrote in October that got buried when the holidays hit, the referral who ghosted after you sent the estimate. You spent gas, payroll, ad budget, and a ladder climb to create each of those contacts. Then they didn't sign. So they sit there, going stale, while you spend more money to generate brand-new strangers at the top of the funnel.
That's backwards. A name that already raised a hand — even a year ago — is warmer than a cold door you've never knocked. The roof on that house is one to two years older than it was when you quoted it. The reasons the deal stalled have probably changed. And the cost to reach back out to that person is close to zero compared to the cost of buying a replacement.
What follows is the operator's version of that work: how to find the dead list, scrub it so you don't burn your sender reputation or your reps' morale, segment it by why each deal actually stalled, re-sequence the follow-up so it lands instead of annoys, and — the part most shops skip — re-rank the whole pile by which roofs are actually due now, so your reps spend their hours on the contacts most likely to turn into a contract. There are scripts, a worked example with real numbers, and the compliance lines you cannot cross when storm and insurance language enters the conversation.
Why "dead" roofing leads are worth more than you think
The word "dead" is doing a lot of damage in most sales offices. A lead that didn't close on the first pass is not dead — it's unfinished. The roofing buying cycle is long and lumpy. A homeowner who calls you in May is not necessarily going to spend $14,000 in May. They might spend it the following March, after the roof finally leaks into the dining room, after the tax refund lands, after they get the home equity line approved, or after the third neighbor on the street gets a new roof and they feel behind. Your only job between now and then is to still be the company they call.
Most shops fail at exactly that. Industry research on lead response and follow-up has shown for years that a large share of salespeople give up after one or two contact attempts, while most sales that eventually happen require five or more touches. Roofing is worse than average here because the average ticket is high, the trust bar is high, and the trigger event (a leak, a storm, a real-estate deadline) often hasn't happened yet when you first talk to them. So the rep marks the lead "not interested," the CRM buries it, and eighteen months later that homeowner googles "roofers near me" and hands the job to whoever answered the phone.
Here is the money math that should change how you think about the pile. Say a single new lead costs you somewhere between $50 and $200 to generate once you blend in ad spend, paid lead-service fees, canvasser payroll, and your own time. A shop running steady marketing for two or three years can easily have 800 to 2,000 of those contacts logged. Even if 90 percent of them are genuinely gone, the remaining 10 percent — 80 to 200 homeowners — represent contacts you've already paid for that are sitting at zero additional acquisition cost. Reactivating even a slice of that, at a roofing average ticket, is frequently the single highest-ROI activity available to a contractor in a slow month, and it requires no new ad budget at all.
The FTC's guidance on telemarketing and the rules around the National Do Not Call Registry both carve out room for contacting people you have an existing business relationship with — which is part of why your own old inquiries are a categorically better asset than a cold purchased list. (More on staying clean below; you still have to honor opt-outs and the specific timing windows.)
Before you touch the phone: get the list out where you can see it
You cannot work a pile you can't see. The first job is pure operations, and most owners skip it because it isn't glamorous. Do it anyway.
Pull every source into one table
Dead leads hide in more places than you'd guess. Round up all of them:
- The CRM — every contact marked lost, cold, dead, no-answer, not-interested, on-hold, or "follow up later" with a date that's already passed.
- Old estimates and proposals — anything you wrote and sent that never turned into a signed contract. These are gold because the person was far enough down the road that you measured and priced.
- No-shows and missed appointments — they wanted you enough to book a time. Something got in the way; it usually wasn't you.
- Storm-event lists — door knocks and inspections from past hail or wind events where the homeowner didn't move forward.
- The spreadsheets and the shoebox — the rep's personal tracker, the receptionist's call log, business cards, the form-fill exports nobody imported.
- Past customers — repairs you did years ago, the other side of a duplex, the homeowner whose roof you patched and who never came back for the full replacement.
Get all of it into one table. It does not have to be pretty. Columns you want at minimum: name, full address, phone, email, the date of last contact, the source (where the lead came from), the original reason it stalled if you have it, and the dollar value you quoted if there was a quote.
De-duplicate and merge
The same homeowner often appears three times — once from a Facebook form, once from a door knock, once from a referral. Merge them. Keep the most complete record and the most recent contact date. A messy list with triplicates makes your reactivation rate look worse than it is and makes a homeowner feel stalked when three reps call the same week.
Verify the contact data is still good
People move, change numbers, and abandon email addresses. Before you spend rep hours, clean the channels:
- Run emails through a validation pass so you're not blasting dead inboxes and tanking your domain's sender reputation. Bounce rates above a few percent get you flagged by inbox providers fast.
- Scrub phone numbers against the National Do Not Call Registry and your own internal do-not-contact list. The existing-business-relationship exemption helps, but it has limits and time windows, and a homeowner who told you to stop is off the list permanently regardless.
- Where the record only has a name and a rough location, the address is the anchor that lets you re-attach phone and email later — and, as you'll see, the address is also what lets you check whether the roof is due.
Quick triage: is this contact even reachable and allowed?
Before segmenting, throw out the truly unworkable: no valid phone, no email, no mailable address, or an explicit opt-out. Everything that survives goes into segmentation. Be honest here — a list of 1,200 "leads" often becomes 700 reachable, contactable records, and that's fine. Seven hundred warm-ish homeowners you already paid for is a strong asset.
Segment by WHY the deal stalled — not by how old it is
This is the step that separates a shop that gets booked jobs from a shop that gets blocked numbers. The instinct is to sort by date and start dialing the oldest first. Don't. Sort by the reason the deal didn't close, because the reason dictates the message. A homeowner who balked at price needs a completely different conversation than one who couldn't get their insurance sorted, who needs a different conversation than one who simply went dark.
Here's a working taxonomy. Tag every reachable record with one of these.
| Segment | What actually happened | What changed since (your angle) | Priority |
|---|---|---|---|
| Price / budget | Sticker shock; couldn't afford it then | Financing options, the roof is now worse, costs of waiting | High |
| Timing | "Not yet," busy season, holidays, new baby | Time has simply passed; the "later" they named has arrived | High |
| Spouse / decision | "I need to talk to my wife/husband" | Re-open with both decision-makers, offer a no-pressure re-look | Medium-High |
| Comparison shopping | Getting other bids; you never heard back | They likely picked nobody (decision fatigue) or had a bad install | Medium |
| Insurance / storm stalled | Waited on a carrier decision after a storm | A new storm, or a now-documentable condition | Medium (compliance-sensitive) |
| Ghost / no-answer | Never reached them; pure non-response | New channel, new timing, a reason to care now | Medium |
| No-show | Booked, didn't show | Low-friction re-book; assume life got in the way | High |
| Wrong fit | Not the homeowner, rental they don't manage, out of area | Mostly remove; salvage only if they own other property | Remove |
The two highest-yield segments in almost every shop are timing and no-show, and they're the two reps most readily write off. A "not yet" from last spring is a "now" this spring. A no-show wanted you badly enough to put it on the calendar; the failure was logistical, not a rejection.
If your CRM never captured a stall reason — common — you'll have to infer it from notes, or simply treat the whole batch as "ghost/timing" and let the re-engagement conversation surface the real reason. That's fine. Even a rough segmentation beats blind dialing.
The re-engagement message: lead with the homeowner, not with "just checking in"
The fastest way to get ignored is to open with "Hi, I'm just following up on the quote we sent." It signals that the call is about your pipeline, not their roof. The homeowner owes you nothing and remembers little. You have to give them a reason to re-engage that's about them.
Three principles for every reactivation touch:
- Give them an easy out. Permission-based openers ("Have you given up on the roof project, or is it still on your list?") outperform pushy ones because they lower the homeowner's guard. Counterintuitively, offering the easy "no" gets you more "yes."
- Bring something new. A reason the call exists today: a price that's about to change, a financing option you didn't have before, the fact that you'll be working their street next week, or a specific observation about their roof's age or a storm that's passed over it.
- Make the next step tiny. Not "can we re-quote your whole roof." Instead: "Want me to swing by for a five-minute look while I'm in the neighborhood?" Small asks get yeses.
Channel order that respects the homeowner
Don't blast all channels at once. Sequence them, and stop the sequence the moment they respond.
- Email first for anyone with a valid address — it's the lowest-friction, least-intrusive, cheapest, and it warms them up before a call.
- Text second, only where you have a defensible basis to text them (they're an existing inquiry, you have consent or a clear prior relationship, and you honor STOP immediately). Texting rules are stricter than email; when unsure, don't.
- Phone third, and treat it as the high-value channel for warm responses, not the opening blast.
- Direct mail as a parallel track for the address-only records and for the higher-value old estimates — a physical "we're working your neighborhood" piece converts surprisingly well on a list of people who already know your name.
- A door knock for the genuinely high-value, geographically clustered ones, especially old estimates where you already measured the roof.
Reactivation email that gets replies
Keep it short, specific, and human. A template that works for the timing/ghost segment:
Subject: still thinking about the roof?
Hi [First name] — it's [Your name] with [Company]. We talked back in [month/season] about the roof at [street]. No pressure at all — I'm just clearing out my list and wanted to ask straight up: is the roof still on your radar, or should I close out the file?
If it's still on your mind, I'll be near [neighborhood] next week and can swing by for a quick look — no charge, no hard sell. Just reply and I'll find a time that works.
Either way, thanks. — [Your name], [phone]
The "should I close out the file?" line is the workhorse. It triggers loss aversion ("wait, don't close it") and gives the genuinely-gone an easy exit, which keeps your list clean.
Reactivation call script (warm, not desperate)
For the phone, after an email or text has gone out:
"Hi [First name], this is [Your name] over at [Company] — we did a roof estimate for you a while back over on [street]. I'll be quick. I'm not calling to pester you; I'm honestly just going through my list to figure out who's still got the roof on their plate and who I should let off the hook. Where are you at with it?"
Then shut up and listen. The reason they stalled will come out, and now you can match the segment script:
- Price came up: "Totally fair — a lot of folks felt that. We've got financing now that puts it around [$X] a month instead of all at once. Want me to send the options?"
- Timing: "No rush. When you pictured doing this, what was the trigger — a certain season, the tax refund, the roof getting worse? I'll check back right around then so I'm not bugging you before."
- Spouse: "Makes sense. Would it help if I came back when you're both home and walked you both through it? Twenty minutes, no obligation."
- Went with someone else: "Got it — how'd the install turn out?" (If they didn't actually do it, you're back in the game. If they did, ask for the referral and move on graciously.)
Never beg, never invent a fake deadline, and never imply the price drops just because you're desperate to book. A tight trade talks; homeowners compare notes, and a manufactured "today only" discount makes you look exactly like the company they were right to hesitate on.
The piece most shops miss: re-rank the dead list by which roofs are actually due
Segmenting by stall-reason tells you what to say. It doesn't tell you who to call first. If you've got 700 reachable old contacts and three reps, you cannot work all 700 well. You need a priority order, and "oldest lead first" is a weak one. The strongest signal for a roofing reactivation is the same one that should drive all your outbound: is this roof actually due now?
Think about what's changed on a record since you first quoted it. Two things, reliably:
- The roof aged. A roof you looked at as "a few years left" two seasons ago is now closer to the end. A 16-year-old asphalt shingle roof you quoted is now 18; the homeowner who said "not yet" may genuinely be at "now," and they don't know it.
- Weather happened. Storms passed over some of those addresses and not others. Hail and high wind don't fall evenly across a county — they fall in streaks and pockets, roof by roof. A homeowner on the wrong side of a hail core has a different roof today than the identical house two streets over.
This is exactly the gap RoofPredict is built to fill on your own list. Hand it the addresses from your dead-lead pile and it returns, house by house, a roof-age range from aerial imagery plus a storm-exposure read modeled per roof — not merely "it hailed somewhere in this ZIP," but how the hail and wind actually loaded each individual roof. A hail map shows you where it hailed; modeling the storm on each roof shows you which ones it likely wore out. Pair that with the roof's age and you get a ranked list: the contacts whose roofs are oldest and most storm-worn float to the top, and the ones with plenty of life left sink. Your reps then work the dead list in the order most likely to produce a signed contract instead of in the order it happened to land in the CRM.
Be clear-eyed about what this is and isn't. The roof age is a range, not a birth certificate — a defensible "roughly 17 to 21 years" beats a confident-but-wrong exact date, and it's plenty to prioritize a call list. The storm read is odds, not proof — it tells you which roofs are likely worn, not which ones will definitely qualify for anything. It doesn't measure the roof, it doesn't identify the shingle brand, and it absolutely does not tell you a homeowner's roof is covered by insurance or owed a payout. What it does is answer the only question that matters when you're deciding who to call back first: of the people I already paid to find, whose roof is most likely due right now? That turns "work the whole stale pile and hope" into "call the 120 oldest, most storm-worn roofs first, this week."
You can approximate a lighter version of this by hand — sort by the roof age you noted at original quote, add a couple years, and cross-reference any addresses inside a known past storm track. It's slower and rougher, but the principle holds: prioritize by roof-due-ness, message by stall-reason.
A worked example: turning 1,400 dead leads into booked jobs
Numbers make this concrete. These figures are illustrative — your shop's will differ — but the structure is what to copy.
Say you pull everything and land at 1,400 raw records. After de-duping and merging, you're at 1,150 unique. Email validation, DNC scrub, and removing the genuinely unworkable (bad data, opt-outs, wrong-fit rentals) leaves you 700 reachable, contactable contacts. That's your working asset.
Segment the 700 by stall reason:
| Segment | Count | First channel |
|---|---|---|
| Timing ("not yet") | 180 | Email then call |
| No-show | 70 | Text then call |
| Price / budget | 140 | Email (lead with financing) |
| Spouse / decision | 90 | Call (both home) |
| Comparison shopping | 110 | Email then call |
| Insurance / storm stalled | 60 | Mail then call (compliance-careful) |
| Ghost / no-answer | 50 | Email then text then call |
Now re-rank all 700 by roof-due-ness (age range + per-roof storm exposure). Suppose 200 of them come back as oldest-and-most-worn — roofs in the high-teens-and-up age band, several sitting under past hail or wind tracks. Those 200 get worked first, this week, regardless of which stall-segment they're in, using the matching segment script.
Run realistic reactivation rates. On a warm, already-paid-for list worked with a real sequence (not one call and quit), it's common to reach and have a real conversation with 20 to 35 percent. Take the conservative end: 700 contacts, 25 percent reach a real conversation = 175 conversations. Of those, a portion are genuine "yes, still interested" — say 30 percent re-open into an active opportunity = about 52 active opportunities. Apply a normal-to-slightly-better roofing close rate on warm re-opened deals, say 30 percent (warmer than cold, since they already know you) = roughly 15 to 16 signed jobs.
At a residential roofing average ticket — pick a conservative $12,000 — that's around $185,000 in contracted revenue from a list you'd already paid for and written off, with no new lead spend. Even if your real numbers are half of this, the ROI on a few weeks of disciplined follow-up beats almost any top-of-funnel campaign you could launch instead. And the records that don't convert this round are now re-dated, re-segmented, and cleaner for the next pass.
That last point matters: reactivation is not a one-time event. The leads that say "check back in the fall" go into a dated, automated follow-up. The truly-gone get archived. The list gets better every time you work it, not used up.
Build the system so it runs without heroics
A one-time blitz produces a one-time bump. The shops that win turn reactivation into a standing process. Here's the operational skeleton.
A simple lead-status discipline going forward
Most of the pain of a dead-lead pile comes from sloppy status hygiene at the front end. Fix the intake so you never build this mess again:
- Every lead gets a status and, critically, a stall reason when it doesn't close. Make the reason a required dropdown — your future self will thank you.
- Every "not now" gets a specific follow-up date tied to the trigger the homeowner named, not a vague "someday."
- Nothing gets marked "dead" without a manager glance. "Dead" should mean opted-out, wrong-fit, or roof confirmed replaced — not "didn't answer twice."
An automated drip for the "not yet" crowd
The timing segment is too valuable to work by memory. Put a light, automated email sequence behind it — a few touches a year, spaced out, each genuinely useful (a seasonal maintenance tip, a storm-season heads-up for their area, a financing update). The goal is to stay the company they call, not to sell on every email. Keep the cadence humane; over-mailing burns the list and your domain reputation.
A quarterly re-rank and re-work
Once a quarter, re-run the whole reachable pile through the roof-due-ness ranking. Roofs aged another three months. New storms passed over some addresses. The contacts that float to the top of this quarter's ranking — especially any that just took weather — are your next outbound batch. This is where the per-roof storm modeling earns its keep: it flags the specific old contacts whose roofs likely just got worse, so a rep can call with a real, current reason instead of a generic check-in.
Assign it to someone and measure it
If reactivation belongs to "everyone," it belongs to no one. Assign the dead-lead list to a specific rep or a part-time inside-sales person, set a weekly target of contacts worked, and track three numbers: conversations had, opportunities re-opened, and jobs closed from reactivation. When the owner sees that line on the board, it stops being the thing that gets skipped when the day gets busy.
The compliance lines you cannot cross
Two bodies of rules govern this work. Respect both, because the downside — fines, complaints, a torched reputation in a town where homeowners talk — dwarfs the upside of cutting a corner.
Contact rules
You are reaching out to people, some of whom haven't heard from you in a while. The guardrails:
- Honor the Do Not Call Registry and every opt-out. The existing-business-relationship exemption gives you room to contact prior inquiries, but it has time limits and does not survive a homeowner asking you to stop. Scrub before you dial.
- Texting is stricter than email. Have a defensible basis (prior relationship or consent), identify yourself, and honor STOP instantly. When you're unsure whether you can text someone, email or mail them instead.
- Keep email clean. Validate addresses, include a real unsubscribe, and don't over-send. A dead-lead list torched into a spam-trap minefield can damage deliverability for your whole company.
Storm and insurance claims: stay strictly on the documentation side
A big chunk of stalled roofing leads stalled around a storm and an insurance question. The reactivation conversation will drift there. This is where roofers get themselves in real legal trouble, so know exactly where the line is.
What you can do: inspect the roof, document the condition thoroughly with photographs and notes, and prepare an accurate repair estimate aligned to standard pricing for the scope of your work. You can state plain facts about what you observed and what your scope covers, and you can hand that documentation to the homeowner. The homeowner files their own claim; the insurer decides coverage.
What you cannot do — say none of this, because for a fee it crosses into unlicensed public adjusting in most states, and it's enforced:
- Don't negotiate, adjust, or "handle" the claim for the homeowner.
- Don't interpret their policy or tell them what's covered.
- Don't promise a specific payout, approval, or that the claim will go through.
- Don't promise the deductible is waived, absorbed, eaten, or "taken care of."
- Don't advertise or imply a "free roof."
- Don't represent the homeowner against their insurer.
So when an old storm-stalled lead asks, on a reactivation call, "will insurance pay for this?" — the safe, honest answer is some version of: "I can't speak to your coverage or what they'll approve, and anyone who promises you a payout is telling you something they're not allowed to. What I can do is come document the roof's condition thoroughly and write you an accurate, detailed estimate for the repair. You file the claim with that documentation, and your insurer makes the call." That captures the homeowner's real intent, gives them genuine help, and keeps you clean. RoofPredict's role in all of this is upstream and equally bounded: it tells you which old roofs are likely due by age and storm exposure, and it never tells you — or lets you tell a homeowner — that a roof is covered or owed a dollar.
Reactivation scripts for the seven hardest old-lead situations
The generic re-engagement opener gets the conversation started. What separates booked jobs from polite brush-offs is how you handle the specific situation once the homeowner talks back. Below are the seven that show up most on a stale roofing list, with the exact angle that moves each one — and the trap to avoid.
1. "We went with another company"
Don't crumble and don't argue. Ask one question: "Got it — how did the install turn out?" A surprising share of homeowners who 'went with someone' never actually pulled the trigger, or had a rough experience. If they did the job and love it, congratulate them and ask for a referral; you lose nothing and you stay the good guy. If they're lukewarm or the job never happened, you're back in an active conversation with a homeowner who's already shopped the category and knows roofs cost real money. The trap: bad-mouthing the competitor. It makes you look small and the homeowner defensive.
2. "Your price was too high"
Never apologize for your price or instantly slash it — that confirms you were padding it. Validate, then change the math: "Totally fair, that's a real number. Two things have changed since then: we've got financing that breaks it into monthly payments, and honestly the roof's a couple years older now, so the cost of waiting is climbing too. Want me to come re-look and put real options in front of you?" You're moving the conversation from a scary lump sum to a manageable monthly figure and a fresh inspection, not begging. The trap: a panic discount that trains the homeowner to think your prices are fiction.
3. "I need to talk to my spouse"
This was almost never a real objection — it was a polite exit because one decision-maker wasn't in the room. Re-open with both present: "Makes total sense — would it help if I came back when you're both home and walked you both through it together? Twenty minutes, no obligation, and you can decide as a team." Booking the second look with both people present is the entire game. The trap: re-pitching the same person who already told you they can't decide alone.
4. "Just send me some information"
The homeowner who asked for an email and vanished. Don't send a brochure into the void. Reply with a tiny, specific question that requires a human answer: "Happy to — quick thing so I send the right info: is the main concern the cost, the timeline, or just whether the roof actually needs doing yet?" Now you've turned a dead-end into a diagnostic. Whatever they answer routes them into one of the other scripts. The trap: a generic info-dump that gives them nothing to respond to.
5. The repeat no-show
They booked, you blocked the time, they didn't show — maybe twice. It's tempting to take it personally and drop them. Don't. Re-book with zero friction and zero guilt-tripping: "No worries at all, life happens. I'll be in your area Thursday afternoon — I can swing by for a five-minute look, you don't even have to be home for the outside part. Does that work?" Lowering the commitment (they don't have to be present for an exterior look) defuses the no-show pattern. The trap: a guilt opener ("you missed our last two appointments") that guarantees a third.
6. The total ghost
Never answered, never replied, pure silence. You don't know why, so don't guess — give them a reason to care now and an easy exit. This is where the roof-due-ness signal shines: "Hi [name], it's [you] at [company]. I'll be straight — I'm cleaning out my list. Your roof's getting up there in age, and I'll be working your street next week. Want me to take a quick look while I'm there, or should I close out your file?" Concrete (your street, next week), useful (the roof's age), and easy to decline. The trap: a fourth identical "just checking in" that confirms you're a robot.
7. The old storm lead who stalled on insurance
Handle this one with care, because it's where roofers get in legal trouble. The homeowner waited on a carrier decision that never resolved, and now the file's cold. Re-open on the documentation side only: "A while back you were dealing with the roof after that storm. I don't know where things landed with your insurer — that's between you and them — but if the roof's still got damage I'm happy to come document its condition and write you an accurate repair estimate you can use. Want me to come take a look?" You're offering real help (thorough documentation, an accurate estimate) without touching coverage, payout, or the deductible. The trap: saying anything that sounds like "we'll get your claim approved" or "we can get your deductible covered." Both are off-limits, covered in detail below.
Use the right tools so the work doesn't live in one person's head
Reactivation that depends on a single rep's memory and a spreadsheet they guard like treasure will collapse the week that rep quits. Put the system into tooling that survives turnover.
- A real CRM with statuses, stall-reasons, and dated follow-up tasks. The non-negotiable. If a lead's next action isn't a dated task assigned to a named person, it doesn't exist. Whether you run a roofing-specific platform or a general CRM matters less than using it with discipline.
- Email validation before any send. A cheap validation pass on the list protects your domain reputation. Sending to a list full of dead addresses is how a company quietly loses inbox placement for all its email, including invoices and appointment confirmations.
- A texting platform that handles consent and STOP. If you text at all, use a system that logs consent, auto-honors opt-outs, and timestamps everything. Don't text from a rep's personal cell; you lose the audit trail and the compliance protection.
- A roof-due-ness data layer on the address list. This is the piece a generic CRM can't give you. Feeding your addresses through a service that returns roof-age ranges and per-roof storm exposure — RoofPredict is built for exactly this — converts a flat list into a ranked one. It's the difference between three reps guessing who to call and three reps working a list sorted by likelihood-to-sign.
- A simple dashboard with three numbers. Conversations had, opportunities re-opened, jobs closed-from-reactivation. If the owner can't see those three numbers weekly, the program will quietly die the first busy week.
None of this requires a big software budget. The discipline is worth more than the platform: a $0 spreadsheet worked rigorously beats a five-figure CRM nobody updates.
Time the touch to the homeowner's trigger, not your slow week
Most reactivation campaigns fire when the contractor is slow, which is exactly backwards. The homeowner buys a roof when their trigger hits — and if you know the common triggers, you can time touches to land just before them instead of randomly. The leads were marked "not yet" for a reason; your job is to be in front of them when "not yet" becomes "now."
The triggers that actually move a roofing decision, roughly in order of force:
- A leak the homeowner can see. Nothing converts a stalled lead faster than water on the ceiling. You can't manufacture this, but you can be the first call when it happens — which is the entire argument for staying in light, ongoing contact.
- A storm passing over their specific roof. Hail or high wind on their address, not merely their county. This is the trigger you can actually detect at scale: a per-roof storm read flags exactly which old contacts just took weather, so you reach out with a current, real reason within days.
- A neighbor getting a new roof. Social proof is enormous on a residential street. When you're working one house in a neighborhood, the stalled leads two doors down just got a reason to act. Time a mail drop or knock to coincide.
- Tax-refund season. A meaningful share of homeowners pay for big-ticket home work with refund money in late winter and spring. The price-stalled segment is most reachable then.
- A real-estate event. Listing the house, an inspection that flagged the roof, a buyer demanding a repair. These show up as urgent inbound, but they also revive old quotes fast — "we're selling and the inspector flagged the roof" is a stalled lead becoming a same-week job.
- End of a season. Homeowners who said "after summer" or "in the spring" named a season. Your dated follow-up should fire right at the front edge of it, not in the middle.
The operational takeaway: tag every "not yet" with the trigger the homeowner named, set the dated follow-up to the front edge of that trigger, and layer the detectable triggers — storm-on-their-roof and neighbor-getting-a-roof — on top as interrupts. When a hail core crosses a cluster of your old addresses, that cluster jumps the queue regardless of where their dated follow-up sat. That's the difference between a calendar that nags people before they're ready and a calendar that calls them right as the roof moves to the top of their own to-do list.
A worked rhythm for the timing segment across a year: a useful touch at the front edge of spring (storm season opening, financing reminder), an interrupt touch within days of any storm that crosses their roof, a neighbor-driven touch whenever you're working their street, and a fall touch before winter for anyone who named "after summer." Four or five well-timed, genuinely-useful contacts a year keeps you the company they call without ever feeling like a pest — and it costs almost nothing once the automation and the roof-due-ness data are wired in.
What pros get wrong with old leads
A few failure modes show up again and again in roofing offices. Avoid them:
- Quitting after one or two touches. The single most expensive habit in the building. The deals are in touches five through eight, and most reps never get there.
- Sorting by date instead of by roof-due-ness. Calling the oldest lead first feels orderly and produces mediocre lists. Calling the oldest roofs first produces booked jobs.
- One generic "just checking in" message for everyone. A price-stall and a spouse-stall and a no-show are three different conversations. Blasting them the same note wastes all three.
- Manufacturing fake urgency. Invented deadlines and desperation discounts confirm the homeowner's original hesitation and travel fast by word of mouth.
- Letting the list rot between blitzes. Without a standing quarterly re-rank and a drip for the "not yet" crowd, you rebuild the same graveyard you just cleaned.
- Wandering into claims talk. The moment a rep promises a payout or says "we'll get your deductible covered," you've handed a regulator and a competitor a gift. Train the script.
- Treating past customers as done. The homeowner whose roof you patched five years ago is the warmest contact you own. They're on the list too.
A 30-day plan to work your dead pile
If you want a concrete starting sequence, here it is.
Week 1 — Build the asset. Pull every source into one table. De-dupe and merge. Validate emails, scrub against DNC and your own opt-outs. Triage out the unworkable. Land on your real reachable count.
Week 2 — Segment and rank. Tag every reachable record with a stall reason. Run the full reachable list through a roof-due-ness ranking (age range plus per-roof storm exposure) so the oldest, most storm-worn roofs surface to the top. Pull your top batch — the oldest roofs first.
Week 3 — Work the top batch. Send the segment-matched email/text, then call the responders. Assign it to one owner with a daily contact target. Log conversations, stall reasons, and re-opened opportunities as you go. Book the inspections.
Week 4 — Close, set drips, and systematize. Push the active opportunities toward signed contracts. Put every "check back later" into a dated, automated follow-up tied to the trigger they named. Archive the genuinely gone. Set the quarterly re-rank on the calendar so this becomes a process, not a one-off.
Thirty days, no new ad spend, working a list you already paid to build. For most shops, it's the highest-leverage month of selling available — and at the end of it, you don't have a graveyard anymore. You have a system.
If re-ranking that pile by hand sounds like more nights and weekends than you've got, that's the specific piece RoofPredict takes off your plate: hand it your old addresses and it hands back a ranked list of which of those roofs are actually due now — by age range and the storms each roof has taken — so your reps spend their hours on the homeowners most likely to sign, not on the ones with a decade of roof left. You decide who to call; it just makes sure the call list is in the right order.
FAQ
How old is too old for a roofing lead to be worth reviving?
There's no hard cutoff. A two- or three-year-old inquiry is often still very workable, because the roof has aged and the homeowner's situation has changed. What kills a lead's value isn't age — it's bad contact data, an explicit opt-out, or a roof you've confirmed was already replaced. Validate the contact info and check whether the roof is actually due before you write anyone off by date alone.
Should I call the oldest leads first?
No. Calling the oldest lead first feels orderly but produces a weak call order. Prioritize by which roofs are actually due now — the oldest and most storm-worn roofs — regardless of when the lead came in. A 'not yet' from last spring whose roof is now 19 years old and sat under a hailstorm is a far better first call than a five-year-old lead on a roof with plenty of life left.
How many times should I follow up before giving up on a stalled lead?
Far more than most reps do. Most salespeople quit after one or two attempts, but the majority of deals that eventually close need five or more touches across email, text, phone, and sometimes mail. For a high-ticket purchase like a roof, where the trigger event may not have happened yet, persistence spread over months — not a single blitz — is what converts.
What's the best message to re-engage a cold roofing lead?
Lead with the homeowner, not your pipeline. Skip 'just checking in.' Ask permission and give an easy out — something like 'is the roof still on your radar, or should I close out the file?' — which triggers loss aversion while letting the truly-gone exit cleanly. Bring one new reason the call exists today (financing, you're working their street, an observation about their roof's age or a storm), and make the next step tiny, like a five-minute look.
Can I text old roofing leads to follow up?
Sometimes, but the rules are stricter than email. You need a defensible basis — a prior business relationship or consent — you must identify yourself, and you must honor a STOP request immediately. When you're unsure whether you're allowed to text a specific person, use email or direct mail instead. Always scrub against the Do Not Call Registry and your own opt-out list first.
A stalled storm lead asks if insurance will pay for the roof. What do I say?
Stay on the documentation side. Tell them honestly that you can't speak to their coverage or what their insurer will approve, and that anyone promising a payout isn't allowed to. What you can do is document the roof's condition thoroughly and write an accurate, detailed repair estimate; the homeowner files the claim with that documentation and the insurer decides. Never promise a payout, never say the deductible is waived, and never advertise a free roof — for a fee, that crosses into unlicensed public adjusting in most states.
How do I figure out which old leads have roofs that are actually due now?
Two signals matter: how old the roof is and what weather it has taken. You can approximate it by hand — sort by the roof age you noted at the original quote, add the years that have passed, and cross-reference addresses against known past storm tracks. A tool like RoofPredict does it at scale by returning a roof-age range from aerial imagery plus a storm-exposure read modeled per roof, so your whole dead-lead list can be ranked by which roofs are most likely due.
Is it worth reactivating old leads versus just buying new ones?
For most shops, yes — by a wide margin. A revived lead is a contact you already paid to generate, so the additional acquisition cost is close to zero, and a homeowner who once raised a hand is warmer than a cold stranger. A few weeks of disciplined follow-up on a stale pile routinely beats the ROI of launching a new top-of-funnel campaign, especially in a slow month.
How do I keep my dead-lead list from rotting again?
Fix intake hygiene and build a standing process. Require a stall-reason dropdown and a specific follow-up date on every lead that doesn't close. Put the 'not yet' crowd on a light, useful automated drip. Re-rank the whole reachable pile quarterly by roof-due-ness so newly-aged and newly-storm-hit roofs surface, and assign the list to one owner with a weekly contact target so it never becomes the task that gets skipped.
What close rate should I expect from reactivated roofing leads?
It varies by shop, but reactivated leads close better than cold ones because the homeowner already knows you. As a rough planning frame on a well-worked warm list, expect to reach a real conversation with roughly a quarter to a third of contacts, re-open a portion of those into active opportunities, and close at a rate at or above your normal warm-lead close rate. Track conversations, re-opened opportunities, and jobs closed separately so you can see what's actually working.
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 Do Not Call Registry — donotcall.gov
- FTC Telemarketing Sales Rule — ftc.gov
- FTC CAN-SPAM Act: A Compliance Guide for Business — ftc.gov
- IBHS — Hail Research and Roof Performance — ibhs.org
- NOAA National Severe Storms Laboratory — Severe Weather 101: Hail — nssl.noaa.gov
- NOAA Storm Prediction Center — Storm Reports — spc.noaa.gov
- NWS — Thunderstorm Hazards: Wind and Hail — weather.gov
- NRCA — National Roofing Contractors Association — nrca.net
- ICC — International Residential Code (Roof provisions) — codes.iccsafe.org
- OSHA — Fall Protection in Residential Construction — osha.gov
- U.S. Census Bureau — American Housing Survey — census.gov
- Bureau of Labor Statistics — Roofers Occupational Outlook — bls.gov
- Texas Department of Insurance — Public Insurance Adjusters — tdi.texas.gov
- RoofPredict — roofpredict.com
Related Articles
Should I Send a Rep to This Address? A Roofer's Decision Framework
Every door you knock costs payroll, gas, and a rep's best hours. Here is how seasoned roofers decide which addresses earn a visit and which ones don't.
How to Break Into a New Roofing Market With No Reputation
You moved a crew into a town where nobody knows your name. Here is how to pick the right territory, land the first jobs, and build proof fast enough to keep the lights on.
How to Find High-Margin Roofing Jobs Without Waiting for a Storm
Storm work is feast-or-famine. Here's how to build a steady pipeline of high-margin roofing jobs from aging roofs, premium offers, and tight routing instead of chasing hail.