Roofing CRM Reactivation Campaign Ideas: Wake Up the Dead Leads You Already Paid For
On this page
Every roofing company is sitting on a pile of money it already paid for and then forgot about. It is not in the truck bay and it is not in accounts receivable. It is in the CRM: the homeowners who called for an estimate eighteen months ago, the storm canvass that produced 400 "maybe next spring" cards, the insurance jobs that stalled when the homeowner went quiet, and the past customers whose roofs are now four years older than the day you last spoke to them.
Most contractors treat those records as dead. They are not dead. They are dormant, and dormant is a completely different problem with a completely different cost structure. A brand-new lead from paid search or a lead aggregator costs you real cash every single time. A name already in your database costs you a text message and ten minutes of a setter's time. When a slow week hits and the phone stops ringing, the fastest, cheapest pipeline you have is the one you already own. The trouble is that almost nobody works it on purpose, and the few who try usually blast one generic "We miss you!" email to 6,000 contacts, get three unsubscribes and zero appointments, and conclude that database marketing does not work for roofing.
It works. It just has to be built like a real campaign instead of a guilt-trip newsletter. What follows is the full operating system: how to find which records are actually reactivatable, how to segment them so each message earns its open, the specific sequences and copy that book inspections, the timing rules that separate a useful touch from a nuisance, and how to plug roof-age and storm signals into the whole thing so you are knocking on the doors that are physically most likely to need a roof right now. There are scripts, tables, worked numbers, and the mistakes that quietly kill these campaigns.
Why your old database outperforms cold leads (the math nobody runs)
Start with the unit economics, because they decide everything downstream. Pull your own numbers, but here is a representative picture for a residential retail-and-storm roofer doing a few million in revenue.
| Channel | Cost to generate one booked inspection | Show / sit rate | Notes |
|---|---|---|---|
| Paid search (branded + non-branded) | High; you pay per click whether or not they convert | Moderate | Competes with every other roofer bidding the same terms |
| Lead aggregator / shared lead | High per lead, sold 3-5 times | Low | You are racing 4 other contractors to the phone |
| Door canvass (cold) | Labor-heavy per knock | Low per door | Great for storm density, brutal cost per sit |
| Past customer referral ask | Very low | High | They already trust you |
| CRM reactivation (dormant lead) | A text + a setter's time | Moderate to high | They already raised their hand once |
The reason reactivation wins is not magic, it is selection. A name in your CRM already did something a cold address never did: they identified themselves as someone with a roof problem and a willingness to talk to a roofer. That intent does not fully evaporate. It decays. A homeowner who got three bids and picked another company is mostly gone, but a homeowner who got busy, got a scary-high quote, or got told "you have a few years left" is still a buyer whose clock is running.
Run the simple version of the math on your own database. Suppose you have 5,000 historical contacts and 3,000 of them are reachable and never bought. If a tight reactivation program books inspections from even 2 to 4 percent of that reachable group over a quarter, that is 60 to 120 inspections you did not pay a lead source for. At your real close rate and average job value, that is a number worth building a system around. The point is not the exact percentage, it is that the marginal cost of the attempt is so low that almost any nonzero conversion is profitable. You are not buying intent. You are harvesting intent you already bought.
What "reactivation" actually means in roofing
Reactivation is not one motion. It is four distinct plays that get lumped together and shouldn't be:
- Lost-bid revival — homeowners who got a quote and didn't sign. They have a number in their head and a reason they stalled.
- Cold-lead resurrection — people who inquired (web form, call, canvass card) but never got a real appointment, or no-showed, or went dark before a sit.
- Stalled-job recovery — jobs that started down the path (especially insurance/storm work) and froze. The homeowner ghosted, the adjuster came back low, the contingency sat unsigned.
- Past-customer re-engagement — completed jobs where the roof, gutters, or attic now has a new reason to call you, plus the referral and review motions that ride along.
Each one needs different segmentation, different copy, and different timing. Treating them as one list is the single biggest reason these campaigns flop.
Step one: get the data clean enough to trust
You cannot run a precise campaign on a sloppy database, and roofing CRMs are notoriously sloppy because data gets entered by tired setters and canvassers on phones in the rain. Before you write a single message, spend a day on hygiene. This is the least glamorous and highest-leverage part of the whole effort.
The minimum field set
For reactivation to work, each record needs to support segmentation. At minimum you want:
- Full street address (the whole address, not the city alone) — you will geo-segment by storm path and neighborhood, and you will append roof signals to it later.
- Phone (mobile flagged) and email — and a record of which channel they originally used.
- Original inquiry date and inquiry source (web, call, canvass, referral, event).
- Stage at which they went cold (inquiry, scheduled, inspected, quoted, contingency signed, job complete).
- Quoted amount and scope, if a quote was given.
- Reason lost / reason stalled, even if it is a one-word tag.
- Storm event reference, if they came in tied to a specific hail or wind date.
- Do-not-contact / consent status — non-negotiable, covered below.
If half your records are missing the "reason lost" tag, that is your first project. Going forward, make that field mandatory at the moment a job is marked dead. A salesperson who can't close should still be required to record why, because that one word is what lets you write a message that actually addresses the objection a year later.
Dedupe, validate, and suppress
Run these passes in order:
- Dedupe by address and phone. The same homeowner often exists three times: a canvass card, a web form, and a call-in. Merge them so you don't text someone twice and so you can see the full history.
- Validate phone and email. Use a list-validation pass to drop disconnected numbers and dead inboxes before you send. Sending to dead emails tanks your sender reputation; texting dead numbers wastes spend and can flag your number as spammy.
- Mobile vs. landline split. Only text numbers identified as wireless. Texting a landline is useless and texting a number you can't verify as mobile raises compliance risk.
- Build your suppression list. Anyone who unsubscribed, asked to stop, is on a litigation/complaint flag, or is a current active job. Suppress competitors and your own employees too.
Clean data is not a one-time event. Put a 90-day recurring cleanse on the calendar so the next campaign starts from a good baseline instead of this same archaeology dig.
Step two: segment so every message earns its place
A reactivation "campaign" sent to your whole list is not a campaign, it is spam with your logo on it. The whole edge of database marketing is that you know things about these people. Use them. Here is a segmentation framework that maps cleanly onto roofing reality.
Segment by where they went cold (the primary cut)
This is your top-level split because it dictates the message more than anything else.
| Segment | Who they are | Core emotional truth | Lead motion |
|---|---|---|---|
| Quoted, not sold (recent: 0-6 mo) | Got a real number, stalled | Price shock, decision fatigue, or shopping | Re-open the conversation, address the stall reason |
| Quoted, not sold (aged: 6-24 mo) | Old quote, life moved on | Forgot, or problem got worse | Fresh look, prices/conditions have changed |
| Inspected, no quote | We looked, never delivered or they ghosted at quote | Dropped ball (often ours) | Deliver value, re-inspect if needed |
| Inquiry only, no sit | Raised hand, never met us | Never got attention fast enough | Low-friction re-offer |
| Stalled storm/insurance | Damage path started, froze | Confusion, fear, adjuster came back low | Documentation help, restart the file (compliance below) |
| Past customer (1+ yr) | We did the roof/repair | Trust intact, no current need | Maintenance, adjacent work, referral, review |
Layer in recency, source, and value
On top of the "where they went cold" cut, add three modifiers that change priority and tone:
- Recency. A 60-day-old lost bid gets a near-real-time, salesperson-driven touch. A two-year-old inquiry gets a softer, lower-expectation re-introduction. Decay is real; match the energy to it.
- Source quality. A referral that never closed is worth a personal call from the owner. A bought shared lead from two years ago that went dark gets the automated, lowest-cost touch.
- Estimated value. A quoted full replacement is a different prospect than a quoted minor repair. Sort your highest-value stalled quotes to the top of the call list and give them human, not automated, treatment.
The storm and roof-age overlay (this is where it gets sharp)
Everything above is about what the homeowner did. The most powerful overlay is about what the roof itself did. Two homeowners both "quoted, not sold" eighteen months ago are not equal if one of them is under a neighborhood that took golf-ball hail last month and the other had a quiet year. The roof has new facts even if the homeowner has the same old hesitation.
That is the segmentation most contractors can't do, because their CRM knows the homeowner's history but knows nothing about the roof's history or its likely remaining life. You can fix that by appending two signals to every address:
- Roof-age range — an estimate, from aerial imagery, of roughly how old the roof is, expressed as a range (for example, "roughly 15 to 19 years") rather than a false-precision date. A 4-year-old roof that didn't buy is a low-priority follow-up. A 16-to-20-year-old roof that didn't buy is a roof aging out of its service life, and the homeowner's original hesitation is now fighting a worse roof.
- Storm exposure per roof — a modeled estimate of which addresses sat under significant hail or wind, scored by the odds the roof was actually affected, rather than merely whether a storm crossed the county.
When you append those, your reactivation list stops being chronological and becomes physical. You can build a segment like "quoted-not-sold, roof-age range 15+, and modeled storm exposure in the last 12 months" — that is a list of people who already trust you enough to get a quote, whose roof is now older and likely worse, and who just had weather that gives them a concrete reason to act. That segment converts at a different level than your general database, and we will come back to how to source it.
Step three: the channels, and how to actually use each one
Reactivation lives across text, phone, email, direct mail, and retargeting. Each has a job. The mistake is using one for everything.
SMS — the workhorse, with rules
Text is the highest-response channel for dormant roofing leads because it is read in minutes and it is conversational. It is also the most legally loaded, so treat it with respect.
- Only text people who consented to be texted. Under the TCPA, sending marketing texts to mobile numbers without prior express written consent is a liability you do not want; statutory damages run per message. A homeowner who filled out your web form agreeing to be contacted, or who texted you first, is in a far stronger position than a number you scraped off a canvass card with no consent language. When in doubt, lead with a channel you have clear consent for, and get explicit opt-in before adding anyone to ongoing SMS.
- Honor opt-outs instantly and automatically. STOP must work. Keep that suppression permanent.
- Identify yourself and keep it human. No link-only blasts. A text should read like a person typed it.
- Watch the timing window. Don't text early morning or late evening; keep it to reasonable daytime hours in the recipient's time zone.
Text is for the conversational re-open and for booking, not for pitching a roof in 160 characters.
Phone — for value, not volume
The phone is your highest-conversion channel for your highest-value segments. Don't waste it dialing 3,000 cold names. Use it where a human voice changes the outcome: stalled high-value quotes, stalled insurance files, referrals that didn't close, and any text thread that warms up. A setter calling a list of "quoted $18k, went quiet 90 days ago" is the best hour of selling in the building.
Email — for story, proof, and the long tail
Email is cheap, it carries photos and proof, and it is where you can tell a longer story (a before/after, a neighborhood you just finished, a maintenance reminder). It is weaker on immediate response but unbeatable on cost for the aged, lower-intent tail of your database. Keep your list clean so you don't burn deliverability, and segment so the message matches the person.
Direct mail — underrated for the aged and the storm-struck
Mail cuts through precisely because your competitors abandoned it. A well-targeted postcard to a tight, storm-exposed, roof-age-aged segment lands physically in the home of someone with a real reason to call. It pairs beautifully with the roof-age + storm overlay: you are not mailing a zip code, you are mailing the 300 specific homes most likely to need a roof.
Retargeting and a custom audience — the ambient layer
Upload your suppression-cleaned database as a custom audience and run light retargeting so your brand shows up while the other touches do their work. It is the cheap ambient layer that makes the text and the call feel familiar instead of cold. Mind platform rules on consent for uploaded lists.
Step four: the campaigns, with full sequences and copy
Now the actual plays. Each one below is a complete sequence you can lift. Numbers and brackets are placeholders for your real details. Keep your own voice; these are skeletons, not scripts to read robotically.
Campaign 1: The 9-word re-open (lost bids, 0-6 months)
This is the single highest-ROI reactivation move in roofing and it is almost insultingly simple. For homeowners who got a real quote and went quiet in the last few months, send a short, no-pressure question that invites a reply. The genius is that it asks nothing and assumes nothing.
Touch 1 (SMS or email, day 0):
Hi [First name], it's [Your name] with [Company]. Are you still thinking about getting the roof handled this year?
That's it. No link, no pitch, no "we have a special." The reply rate on a question like this is high because it is easy to answer and it carries no sales pressure. When they reply "yes, but..." you have just learned the real objection, live. When they reply "we went with someone else," you close the record cleanly and stop wasting touches.
Touch 2 (only if no reply, day 4):
No worries if the timing's off — want me to keep your file open and check back in the fall, or close it out?
Giving them the explicit out ("close it out") paradoxically pulls replies from people who actually do still want it.
Touch 3 (only if no reply, day 9, switch channel): a brief voicemail or email referencing the original scope: "Wanted to make sure the estimate we put together back in [month] didn't fall through the cracks on our end." Then stop. Three touches, then the record moves to the long-cycle nurture, not the trash.
Campaign 2: Price and conditions have changed (aged quotes, 6-24 months)
An old quote is stale on both sides: your pricing moved and their roof got worse. Give them a legitimate reason to look again.
Touch 1 (email with a photo, day 0): Acknowledge time has passed, offer a fresh look, and give a concrete why-now.
[First name] — it's been about [X months] since we looked at your roof at [address]. Materials and our schedule have both changed since then, and honestly your roof is a year-plus older now. Happy to come back out, take fresh photos, and give you an updated number with no obligation. Want me to grab a slot?
Touch 2 (SMS, day 5): A one-liner with the easiest possible yes: offer two specific times. People reactivate when you remove the work of scheduling.
Touch 3 (direct mail, day 14): A postcard with a real before/after from their neighborhood. Proximity is persuasion in roofing; "we just did three roofs on [nearby street]" is more convincing than any adjective.
Campaign 3: The dropped-ball recovery (inspected, no quote / inquiry, no sit)
These are often your fault, which is good news, because the fix is an apology plus value, and homeowners respond to a company that owns it.
Touch 1 (call or personal text, day 0):
[First name], [Your name] with [Company]. Looking back through our files, it looks like we came out to look at your roof but never got you the write-up you deserved. That's on us. Can I get you a proper inspection report this week — no charge, no pressure?
The re-inspection itself is the conversion event. You are back on the roof, taking fresh photos, finding fresh issues, and the report is a document the homeowner keeps. Deliver real value in that report (photos, specific findings, honest remaining-life range) and the quote conversation follows naturally.
Campaign 4: The storm restart (stalled insurance/restoration) — read the compliance box first
This is the highest-value and highest-risk reactivation segment, so the copy has to be disciplined. Stalled storm jobs froze for a reason: the homeowner got confused, the adjuster came back lower than hoped, the contingency sat unsigned, or fear took over. Your job in reactivation is to restart the documentation and estimate side, not to become the homeowner's claims advocate.
The do-not-say list, because this is where roofers get in trouble
When you reactivate a storm file, you may do these things, and your copy can say them plainly:
- Re-inspect the roof and document damage thoroughly with photos and measurements.
- Prepare an accurate, line-item repair estimate aligned to standard estimating practice for your scope of work.
- Hand that documentation and estimate to the homeowner so they can file or follow up with their insurer.
- State facts about what you observed and what your repair scope covers.
You may not, for a fee, do any of the following, and none of this belongs in any message, script, or postcard:
- Negotiate, adjust, or "handle" the claim for the homeowner, or contact the carrier as their representative against the insurer. That is public adjusting and it is licensed in most states.
- 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. Waiving or rebating a deductible is illegal in many states and is insurance fraud-adjacent everywhere.
- Advertise a "free roof" or imply insurance makes it free.
Keep your reactivation copy on the safe side of that line and you capture all the intent with none of the exposure. Here is a touch that does exactly that.
Touch 1 (call or text, day 0):
[First name], it's [Your name] with [Company]. We started looking at storm damage on your roof at [address] a while back and the file went quiet. If you'd like, I can come re-inspect, take updated photos, and put together a detailed repair estimate you can keep on hand. The decision on filing is always yours and your insurer's — we just make sure the damage is documented right. Want me to come back out?
Notice what that does: it offers documentation and an estimate (allowed), it explicitly puts the filing decision with the homeowner and insurer (compliant), and it promises nothing about coverage, payout, or deductible (safe). That is the frame for every storm reactivation message you send.
Touch 2 (day 6): Offer to send their existing photos/report so they have the documentation in hand regardless. Being genuinely helpful with the record is what restarts trust.
Campaign 5: Past-customer re-engagement (the long game)
People you already did work for are your warmest list and the one most contractors ignore entirely once the check clears. They will not need a new roof for years, but they will need adjacent work, they know other people who need roofs, and they decay out of memory fast.
Build a year-round, low-frequency rhythm, not a campaign:
- Seasonal maintenance reminder (twice a year): a genuinely useful note before storm season and before winter — gutter check, attic ventilation, a reminder to call after any big storm. This keeps you top of mind and occasionally surfaces a repair.
- Workmanship-warranty check-in at a meaningful interval (for example, a few years post-install): "We install with a [X]-year workmanship warranty — let's make sure everything's still tight." A free re-inspection here finds repairs and generates reviews.
- The referral ask, done right: the best moment is right after a positive interaction (a completed repair, a five-star review). "Who else on your street should I be taking care of?" beats a generic referral blast.
- Review recovery: past customers with no review are a reactivation segment of their own. A single text asking for a review, sent at the right moment, is the cheapest reputation work you will ever do.
Campaign 6: The roof-age trigger (your database as a forecast)
This is the campaign that runs forever in the background and it is unique to roofing. Every roof in your past-customer and lost-bid database is aging on a clock. A roof you quoted at "7 to 10 years old" three years ago is now in the "10 to 13" band and getting closer to the replacement conversation. A roof you installed is approaching the back half of its service life.
If you append a roof-age range to your database and re-check it periodically, you can trigger a touch when a record crosses an age threshold — independent of any storm. "Your roof is reaching the age where it's worth a free check-up" is a soft, honest, non-storm reason to re-engage that works in the dead of a calm summer when nobody has a fresh leak. Tie it to a real free inspection and you convert the curious into the booked.
A worked example: turning 3,200 dead records into booked inspections
Abstract advice is easy to nod at and hard to run, so here is a concrete 30-day sprint on a realistic database.
Starting point: 3,200 reachable records that never bought, after dedupe and validation. Break them down:
| Segment | Count | Primary channel | Sequence |
|---|---|---|---|
| Lost bids, 0-6 mo | 180 | SMS + call | Campaign 1, owner/setter works the replies |
| Aged quotes, 6-24 mo | 540 | Email + SMS + mail | Campaign 2 |
| Inspected, no quote | 220 | Call + text | Campaign 3 |
| Inquiry only, no sit | 1,400 | Email + retarget | Low-friction re-offer |
| Stalled storm | 160 | Call + text | Campaign 4 (compliant) |
| Roof-age 15+ overlay (cross-cut) | 700 | Mail + email | Campaign 6 |
Week 1: Hygiene and suppression. Validate phones/emails, pull opt-outs, append roof-age ranges and storm exposure to every address. Build the segments above as saved lists in the CRM.
Week 2: Launch the high-value human touches first — the 180 recent lost bids and the 160 stalled storm files get worked by a person, by phone and personal text, because that is where the dollars are and where a human voice converts. Simultaneously, the 1,400 low-intent inquiries get the automated email + retargeting layer, which costs almost nothing to run.
Week 3: Fire the aged-quote sequence (540) and the dropped-ball recovery (220). Mail drops to the storm-exposed, roof-age-aged subset.
Week 4: Work the replies. This is where discipline matters — a reactivation campaign generates a flood of "maybe," "text me in the fall," and "how much would it be" responses, and every one needs to land in a person's queue with a next step, not evaporate.
Plausible outcome: if the human-worked high-value segments convert at the high end and the automated tail converts at the low end, a sprint like this commonly produces several dozen booked inspections at a marginal cost dominated by labor, not media. The exact yield depends on your list quality and close skill — but the cost floor is so low that the campaign pays for itself at conversion rates that would be a disaster for paid media. That asymmetry is the entire reason to do this.
Two operational notes make or break the sprint. First, sequence the labor so your best closer is on the phone during the hours those high-value replies come in — the 180 recent lost bids and 160 storm files will generate live conversations within an hour of the first text, and a reply that sits for a day cools fast. Block calendar time for it the way you would block a sales meeting. Second, hold the automated tail back a touch if your human capacity is thin; there is no point lighting up 1,400 low-intent inquiries the same week your one setter is buried in storm-file callbacks. Stagger the waves to match the hands you actually have. A reactivation sprint is throttled by follow-up capacity, not by list size, and the contractors who run it well treat reply-handling as the constraint and build the whole calendar around it.
Run the sprint twice and compare segment performance head to head. You will almost always find that one or two segments — usually recent lost bids and stalled storm files — carry most of the revenue, and that knowledge lets the next sprint front-load the labor where it pays. Reactivation is a repeatable system, and the second run is sharper than the first because you finally have your own numbers instead of someone else's averages.
Where roof-age and storm data plug in: doing this with RoofPredict
Everything above gets sharper when your database knows something about the roofs, not only the homeowners. That is the gap RoofPredict is built to fill, and it is worth being precise about what it does and does not do.
RoofPredict tells roofing contractors which roofs are due, house by house. For an address, it estimates a roof-age range from aerial imagery — a range, not a manufacture date, because imagery gives you "roughly 14 to 18 years," not a certificate — and it models storm physics per roof, scoring the odds a specific roof was actually worn or affected by the hail and wind that passed through, rather than just flagging the whole county. You can use it to enrich your own CRM and mailing list with those two signals, so your reactivation segments become physical instead of purely chronological.
In practice that means you can take your dormant database and rank it: the lost bids whose roofs are now aging out of service life rise to the top of the call list; the past customers and old inquiries under a roof with high modeled storm exposure become a tight, defensible mailing list instead of a zip-code carpet bomb; and your background roof-age trigger campaign has real numbers to fire on. You are pointing your cheapest pipeline — names you already own — at the roofs most likely to need work right now.
Be honest about the limits, because overpromising on this data is how you lose trust. A roof-age range is an estimate from imagery; it narrows your targeting, it does not replace getting on the roof. A storm-exposure score is a probability, not proof of damage — it tells you where to look first, and the inspection still decides. RoofPredict is not a lead-buying service and it does not hand you homeowners; it ranks and enriches the doors, routes, and lists you already work, so your crews spend their hours on the roofs the storm wore out and the roofs aging out. It is a targeting and prioritization layer on top of your sales process, not a replacement for it. Used that way — to decide which dormant records to call first and which homes to mail — it turns a chronological CRM into a forecast of where the next roof is.
Timing, cadence, and frequency: the rules that keep you out of the spam folder and out of trouble
A reactivation program lives or dies on cadence. Too little and the touch is forgotten; too much and you become the company people block.
The per-campaign cadence
- Active sequences run 3 to 5 touches over 2 to 3 weeks, then stop. After that, the record moves to long-cycle nurture (quarterly, light), not continued pestering. The biggest mistake is a sequence with no end — homeowners can feel the difference between persistence and harassment, and so can spam filters and a state attorney general.
- Switch channels between touches. Text, then call, then mail. Repetition on a single channel reads as nagging; the same message across channels reads as a company that's genuinely trying to reach you.
- Match cadence to recency. Hot recent lost bids get a tight, fast sequence. Two-year-old inquiries get a slow, soft re-introduction with long gaps.
Seasonal timing for roofing specifically
Reactivation has a calendar. The natural re-engagement windows are:
- Early spring, before the busy season, when homeowners start thinking about the exterior again — fire your aged-quote and roof-age-trigger campaigns here.
- Immediately after a storm event in a homeowner's area — the most time-sensitive reactivation there is, and the one where your storm-exposure overlay earns its keep. Re-touch your dormant records under the impacted footprint within days, with the compliant documentation-and-estimate frame.
- Late summer / early fall, the "get it done before winter" push — strong for stalled jobs and dropped-ball recovery.
The frequency cap and the suppression discipline
Set a hard rule: no contact gets more than [X] marketing touches per month across all campaigns combined. Without a global cap, a homeowner can land in three segments at once and get carpet-bombed. Enforce it at the CRM level, not the campaign level. And honor every opt-out permanently and instantly — STOP on text, unsubscribe on email, do-not-call on the phone. Beyond the legal exposure under TCPA and CAN-SPAM, blowing past opt-outs is how you train your warmest market to hate you.
Measuring it: the metrics that tell you the truth
Vanity metrics will lie to you. Opens and clicks feel good and predict nothing. Track the chain that ends in revenue:
| Metric | What it tells you | Healthy direction |
|---|---|---|
| Reply / response rate | Is the message and segment landing | Up; below baseline means wrong segment or weak copy |
| Re-engagement rate (any positive reply) | Size of the warm pool you reopened | Up |
| Inspections booked | The real conversion event | The number that matters |
| Sit / show rate on reactivated leads | Quality of the reopened lead | Compare to fresh leads |
| Close rate on reactivated leads | Whether these turn into jobs | Often near your normal rate, since intent was real |
| Revenue per 1,000 records touched | The unit economics of the whole program | The number to optimize over time |
| Cost per booked inspection | Reactivation vs. paid media | Should crush paid channels |
| Opt-out / complaint rate | Whether you're overdoing it | Keep low; spikes mean cut frequency |
The two numbers to put on the wall are cost per booked inspection (which should embarrass your paid channels) and opt-out rate (your early warning that you're pushing too hard). Everything else is diagnostic.
What pros get wrong (the failure modes)
After watching a lot of these programs, the same mistakes recur. Avoid them and you are ahead of most of your market.
- The one-blast "we miss you" email. Untargeted, ungated, sent to everyone, converts nobody, generates unsubscribes. Reactivation is segmentation first, copy second, send third.
- No reason lost / reason stalled tags. Without them you can't write a message that addresses the actual objection, so every touch is generic. Make the field mandatory at the moment a job dies.
- Treating all dead leads as one list. A 60-day lost bid and a two-year-old cold inquiry need opposite energy. Lumping them wastes your best segment on the wrong message.
- Ignoring the roof's clock. Sorting your database by homeowner recency but never by roof age means you call people whose roofs are fine and skip people whose roofs are aging out. The roof has facts the contact record doesn't.
- Skipping past customers. The warmest, cheapest, highest-trust list, routinely abandoned the day the check clears.
- Automating the high-value segments. Stalled $20k quotes and frozen storm files deserve a human voice, not a drip. Automate the tail, not the gold.
- No end to the sequence and no frequency cap. Endless touches across overlapping segments turn your warmest market hostile and invite compliance trouble.
- Sloppy consent and opt-out handling. Texting non-consented numbers and ignoring STOP is not a marketing risk, it is a legal one. Get consent, honor opt-outs, keep the suppression list permanent.
- Crossing the compliance line on storm files. Promising approvals, payouts, waived deductibles, or a "free roof" to restart a stalled claim is how a reactivation campaign becomes a regulatory problem. Stay on the document-and-estimate side, every time.
- Measuring opens instead of inspections. If your dashboard celebrates email opens and can't tell you cost per booked inspection, you are flying blind.
A 30-day build checklist
If you do nothing else, do these in order:
- Export and audit your CRM. Count reachable, never-bought records and tag which stage they went cold.
- Dedupe and validate phones and emails; build the permanent suppression list from opt-outs and active jobs.
- Backfill reason-lost tags where you can and make the field mandatory going forward.
- Append roof-age range and storm exposure to every address so your segments become physical rather than purely chronological.
- Build the six segments as saved lists: recent lost bids, aged quotes, inspected-no-quote, inquiry-no-sit, stalled storm, past customers — plus the roof-age and storm overlays.
- Confirm consent for every channel; set the global frequency cap and the auto opt-out handling.
- Write the sequences using the skeletons above, in your own voice, with the storm copy kept strictly on the document-and-estimate side.
- Route human touches to humans. Recent high-value bids and stalled storm files go to a setter or the owner, not a drip.
- Launch in waves, human-worked segments first, automated tail in parallel.
- Work the replies with a real next-step queue, and measure cost per booked inspection and opt-out rate weekly.
Your database is not a graveyard. It is a list of people who already raised their hand and a list of roofs that are getting older and occasionally getting hammered by weather. Treat the homeowner's intent and the roof's condition as two separate facts, segment on both, sequence with discipline, stay on the right side of the compliance line, and you will book inspections this quarter from leads you already paid for years ago. That is the cheapest growth a roofing company can buy, because you already bought it.
When you're ready to make those segments physical — to rank your dormant records by which roofs are actually due and which sat under real storm exposure — that roof-age and storm signal is exactly what RoofPredict appends to your own list, so your next reactivation sprint points at the roofs most likely to need a roof right now.
FAQ
What is a roofing CRM reactivation campaign?
It's a structured effort to re-engage homeowners already in your CRM who never bought — lost bids, cold inquiries, stalled jobs, and past customers — and convert them into booked inspections without paying for new leads. Unlike a one-off blast, it segments records by where they went cold, sends sequenced touches across text, phone, email, and mail, and routes the highest-value segments to a person. The whole appeal is cost: a name you already own costs a text and a few minutes of a setter's time, versus paying per lead every time for a fresh one.
How do I segment a roofing database for reactivation?
Start with the primary cut: where the record went cold (recent lost bid, aged quote, inspected-no-quote, inquiry-no-sit, stalled storm job, or past customer). Then layer modifiers: recency, original source quality, and estimated job value. Finally, overlay roof-age range and storm exposure per address so your lists become physical rather than purely chronological. That lets you build a segment like 'quoted-not-sold, roof now 15-plus years old, recent storm exposure,' which converts far better than a generic database send.
What's the highest-ROI reactivation message for old roofing quotes?
A short, no-pressure question to recent lost bids: something like 'Are you still thinking about getting the roof handled this year?' It asks nothing, assumes nothing, and gets a high reply rate because it's easy to answer. The replies hand you the real objection live, so your salesperson can address the actual reason the homeowner stalled. Follow with one channel-switched touch and then stop — three touches, then move the record to long-cycle nurture rather than the trash.
Is it legal to text homeowners in my CRM for marketing?
Only with prior express written consent for marketing texts to mobile numbers, under the TCPA — statutory damages run per message, so this is a real liability. A homeowner who filled out your form agreeing to be contacted or who texted you first is on much stronger footing than a scraped canvass number. Honor STOP instantly and permanently, identify yourself, text only verified mobile numbers, and keep to reasonable daytime hours. When consent is unclear, lead with a channel you have clear permission for and get explicit opt-in before adding anyone to ongoing SMS.
How do I reactivate a stalled insurance or storm job without breaking the rules?
Stay strictly on the documentation-and-estimate side. You may re-inspect, photograph and measure damage, write an accurate line-item repair estimate for your scope, and hand it to the homeowner so they file with their insurer. You may not, for a fee, negotiate or handle the claim, interpret coverage, promise a payout or approval, promise a waived or absorbed deductible, or advertise a free roof — that crosses into unlicensed public adjusting and, with deductibles, into fraud territory. Your reactivation copy can offer the inspection and estimate while explicitly putting the filing decision with the homeowner and insurer.
How often should I contact a dormant lead before giving up?
Run an active sequence of three to five touches over two to three weeks, switching channels between touches, then stop and move the record to a light quarterly nurture. Match cadence to recency: hot recent lost bids get a tight, fast sequence, while two-year-old inquiries get slow, soft re-introductions. Set a global frequency cap so a contact in multiple segments doesn't get carpet-bombed, and enforce it at the CRM level. A sequence with no end is the fastest way to turn your warmest market hostile and attract compliance trouble.
Which metrics actually matter for a reactivation campaign?
Track the chain that ends in revenue, not vanity metrics. The two to put on the wall are cost per booked inspection, which should be dramatically lower than your paid channels, and opt-out/complaint rate, your early warning that you're pushing too hard. In between, watch reply rate, inspections booked, sit and close rate on reactivated leads (often near your normal rate since the intent was real), and revenue per thousand records touched. Email opens and clicks feel good but predict almost nothing.
How does roof-age data improve a reactivation campaign?
It adds a fact your contact record doesn't have: the roof's clock. Two homeowners who both declined a quote eighteen months ago aren't equal if one roof is now aging out of its service life. Appending a roof-age range — an estimate from aerial imagery expressed as a range, not a manufacture date — lets you sort your dormant database by which roofs are physically closest to needing replacement, and lets you fire a background trigger campaign when a record crosses an age threshold, even in a calm season with no storms. It narrows targeting; the on-roof inspection still confirms condition.
What is RoofPredict and how does it fit reactivation?
RoofPredict tells roofing contractors which roofs are due, house by house: it estimates a roof-age range per address from aerial imagery and models storm physics per roof, scoring the odds a specific roof was affected rather than just flagging the county. You use it to enrich your own CRM and mailing list with those two signals, so your reactivation segments rank by which roofs are actually due. It's not a lead-buying service and doesn't hand you homeowners — it prioritizes the records and homes you already work. Limits matter: the age is a range, the storm score is a probability, and the inspection still decides.
Should past customers be part of a reactivation campaign?
Yes, and they're the segment most contractors abandon the day the check clears. They're your warmest, cheapest, highest-trust list. Build a low-frequency year-round rhythm rather than a one-off blast: seasonal maintenance reminders before storm season and winter, a workmanship-warranty check-in at a meaningful interval, a referral ask timed right after a positive interaction, and a review request to customers who never left one. None of it sells a new roof immediately, but it keeps you top of mind, surfaces repairs, and feeds referrals and reviews that lower your cost per job everywhere else.
The Roofline by RoofPredict
Stay Ahead of Roofing Market Changes
Join The Roofline by RoofPredict for weekly roofing intelligence: material price signals, storm demand, insurance and regulatory updates, sales tactics, and local contractor opportunities.
Sources
- National Roofing Contractors Association — nrca.net
- Insurance Institute for Business & Home Safety (IBHS) — Hail and Roofing Research — ibhs.org
- NOAA National Weather Service — Storm Prediction Center — spc.noaa.gov
- NOAA Storm Events Database — ncdc.noaa.gov
- FTC — Telemarketing Sales Rule and Do Not Call — ftc.gov
- FCC — TCPA and Telephone Consumer Protection Rules — fcc.gov
- FTC — CAN-SPAM Act Compliance Guide for Business — ftc.gov
- Texas Department of Insurance — Public Adjusters — tdi.texas.gov
- National Association of Insurance Commissioners (NAIC) — naic.org
- OSHA — Fall Protection in Residential Construction — osha.gov
- International Code Council — International Residential Code (IRC) — iccsafe.org
- U.S. Census Bureau — American Housing Survey — census.gov
- U.S. Bureau of Labor Statistics — Roofers Occupational Outlook — bls.gov
- RoofPredict — roofpredict.com
Related Articles
Roofing Sales Follow-Up That Actually Closes: A Field-Tested System for Inspected Homeowners
Most roofing jobs are lost in the silence after the inspection, not at the door. Here is the follow-up system that turns inspected homeowners into signed contracts.
How to Stop Competing on Price in Roofing (Without Going Broke Waiting for the Right Customer)
Price-shopping is a symptom, not the disease. Here is the operational system roofing contractors use to get chosen on value, charge real margin, and stop bidding against the cheapest truck in town.
How to Differentiate Your Roofing Company in a Crowded Market
Most roofers compete on price because they sound identical to the three other trucks in the driveway. Here is how to build differences buyers actually pay for.