Every ranked list of roofing lead sources you have read puts the channels in order and hands you the list. That is the wrong first move, because roofing demand is not created by marketing. It is triggered, and then marketing only decides who gets the call.
A homeowner does not wake up wanting a roof. Something happens: hail hits, a ceiling stains, a letter arrives from the carrier, or a house goes under contract. Four triggers, four different buying situations, four different channels that reach them. Rank sources without naming the trigger and you end up comparing a canvasser to a Google Business Profile as though they were competing for the same customer. They are not.
The short answer
Attach every source to a trigger: canvassing and storm pages for hail, Local Services Ads and Google Business Profile for failures, insurance agent relationships for underwriting non-renewals, and realtor and inspector partnerships for transactions. Run at least one per trigger, keep referrals compounding underneath all four, and judge each on cost per closed deal rather than cost per lead. The four-trigger spread is what stops a quiet hail year from becoming a payroll problem.
Why ranking channels first fails in roofing
Ask roofers where their best leads come from and the answers look contradictory until you ask what kind of work they sell.
On r/RoofingSales, a commenter answered the "best lead source" question with a question of their own: "Depends on your setup. Retail heavy? Google + SEO. Insurance focused? Storm follow-up + outbound." In the r/Roofing thread asking what actually brings the best leads, the operator with the most structured answer listed their quality tier as personal network, previous customers and their referrals, door knocking, Google SEO and Local Services, then referral partners. Their weak list included Meta, with the parenthetical that explains everything: "we're primarily an insurance business."
Meta is not a bad roofing channel. It is a bad channel for insurance-triggered work, because you cannot target "people whose roof was hit by Tuesday's hail" from an interest graph, and you can target them from a hail swath map. The same channel moves position depending on which trigger you are fishing.
Watch out
If your marketing plan lists channels but never names the trigger each one serves, you almost certainly have four sources fishing the same trigger. That is a single point of failure with a diversified invoice.
Trigger 1: the storm
Best sources: post-storm canvassing, storm event pages, mitigation partners, geo-targeted paid social.
This is the trigger the whole industry is built around, and the volume is real. NOAA's National Weather Service Storm Prediction Center logged 5,432 hail events of one inch or larger in 2025, up from 5,373 in 2024, according to Triple-I's compilation of the annual severe weather report summary.
The catch is concentration. Of those 5,432 events, Texas had 902, Kansas 375, Oklahoma 369, Nebraska 315, Missouri 253 and Colorado 244. Ten states account for the bulk of it. If you are not in that band, the storm trigger is an occasional windfall, not a business model.
The channels that work here are the ones you can deploy inside 72 hours:
- Canvassing the affected grid. Check the municipal solicitation permit and HOA rules first, because many cities now require a badge and a permit.
- A storm event page published within days, targeting the date and city of the actual event. Low competition, high intent, and it keeps ranking after the trucks leave.
- Mitigation partners. Water mitigation companies get called first when water comes through a ceiling, and the roof repair is a natural handoff. One caution from a r/RoofingSales referral thread: a commenter noted mitigation firms were paying "at least 1,500 for a referral from a plumber," so if you want that relationship, dinner is not the going rate.
- Geo-targeted paid social ramped hard on the affected postal codes, which is the one situation where Meta beats search for roofing.
Trigger 2: the failure
Best sources: Google Business Profile, Local Services Ads, non-branded search, and whoever answers the phone.
A leak is an emergency, and emergencies get searched. This is the only trigger where channel choice is nearly settled: the homeowner opens Google, taps the map pack or the Local Services listing, and calls two or three companies in a row.
Which is why the sharpest comments across both roofing subreddits are not about channels at all. From the r/Roofing thread: "the channel is almost irrelevant if your response speed is broken. Roofing leads are high intent and time sensitive. Someone with a damaged roof is calling 3 companies. The one who picks up first or responds first gets the job."
An owner in a separate r/RoofingSales thread was blunter about the window: it is not three or four hours later that they have found someone else, "it is 10 [expletive] minutes later. If we pick up the phone or call a form submission instantly and set an appointment for the following week, they stop calling other roofers."
That last clause is the part almost nobody prices correctly. Speed does not just win you the lead. It removes you from the bidding war, because a homeowner with an appointment on the calendar stops shopping. You are no longer one of four quotes competing on price.
Buying more failure-trigger leads while calls go to voicemail is the most expensive mistake in the trade. We covered the arithmetic in how much roofing leads actually cost, and the short version is that roofing's cost per lead problem is usually a conversion problem wearing a disguise.
Trigger 3: the underwriting letter
Best sources: insurance agent relationships, renewal-season inspection offers, roof age data on your existing customer list.
This is the trigger almost nobody in the roofing marketing literature writes about, and it is growing fast.
Carriers have stopped sending inspectors and started using aerial imagery. What comes out the other end is a letter, and the letter has a legally defined shape. Massachusetts, which has published unusually clear guidance, requires that an insurer non-renewing a policy provide written notice 45 days before the policy expiration date, including the specific reasons. The state's Division of Insurance says plainly that if your roof "is at a certain age, has a significant amount of moss and/or cracked shingles, or has too many trees hanging over it," the carrier "can decide that they do not want to insure your home."
Then comes the line that should reshape how you sell into this trigger. From the same Massachusetts guidance, answering what a homeowner should do if they cannot replace the roof before the policy expires:
"You should discuss with your insurance company. If you can prove that you have a signed contract for the work to begin, they may be willing to renew the policy."
That is a state regulator documenting that a signed roofing contract is itself the remedy. Not a completed roof. A signed contract, inside a 45-day window, with a homeowner whose fallback is the FAIR Plan at insurer-of-last-resort pricing. There is no other trigger in roofing where the deadline is written into state guidance and the customer already knows they have no choice.
There is also a defensible angle for homeowners flagged unfairly, and it makes you useful rather than opportunistic. Massachusetts Bulletin 2025-02, issued April 30, 2025, tells insurers that cosmetic conditions which do not reflect structural quality, such as roof discoloration or streaking, should not be the sole basis for non-renewal, cancellation or declination, and that where imagery does not clearly show damage, insurers are expected to do additional review. Homeowners can also send documentation back. A roofer who can write that letter is worth more to an agent than one who just wants referrals.
How to work this trigger honestly:
- Build agent relationships, not adjuster relationships. The agent is the one who loses a client when the carrier walks. Give them a same-week inspection and a documented report they can send to underwriting.
- Sell the renewal timeline, not fear. Lead with the deadline and the signed-contract remedy.
- Mine your own database by roof age. You already know install dates for every roof you have put on. Anything approaching 15 years is an underwriting conversation waiting to happen.
Watch out
There is a wrong way to work this trigger, and regulators have already named it. The Massachusetts Division of Insurance issued a consumer advisory about mailers sent to Rhode Island residents by an entity called Home Coverage Risk Alert, which included the property address, claimed the home had been "flagged" over roof age or condition, suggested the carrier may raise the premium or non-renew, offered roof inspection reports, and referred homeowners to "certified contractors to 'restore eligibility'." The mailers were not from any insurance company. If your underwriting-trigger marketing looks like that letter, you are one complaint away from being the example in the next bulletin.
Most roofers do not have a lead problem, they have a trigger-coverage problem: three channels all pointed at hail and nothing catching the underwriting letters landing in their own customer list. We map which triggers your market actually produces, then build the follow-up that converts them. If your channels are fine and the real gap is response time, we will say that instead of selling you a retainer.
Trigger 4: the transaction
Best sources: long-tenured realtors, home inspectors, roof certifications, recently-sold address lists.
A house going under contract produces roof work on a hard deadline. Home inspections surface roof problems that have to be resolved before closing, and insurers commonly decline to bind a new policy on a questionable roof without a certification, which means no certification, no policy, no closing.
That is real, funded, deadline-driven demand. It also has the worst reputation of any channel in roofing, for one specific reason. The top-voted reply in the r/RoofingSales thread asking what works for realtor and insurance agent referrals was seven words: "Realtors just use and abuse us for their inspection reports." The reply underneath was one line: "You give free inspection reports to realtors?!!"
They are both right. The transaction trigger burns roofers who treat it as a referral relationship instead of a service they charge for. The fix is structural:
- Charge for the inspection and credit it against the job. This single rule separates agents who send work from agents who send homework.
- Pick one agent, not the board. As one operator put it, not all agents are a good referral source and many "waste your time and resources," but find "that one agent who has been in your town/county/city for 20 years and everyone goes to with ALL of their home problems."
- Add home builders. The same commenter flagged builders referring homeowners whose houses are now out of warranty, which is a clean handoff nobody competes for.
- Work recently-sold lists. New owners are the one group with a documented reason to think about the roof and no incumbent contractor.
The number that actually ranks your sources
Cost per lead is the metric agencies publish. Cost per closed deal is the metric that decides whether you make money, and the two invert constantly.
The most useful public dataset on this comes from an operator who posted 90 days of tracked marketing spend across six roofing companies to r/RoofingSales. Their reported cost per closed deal:
| Channel | Monthly spend | Deals closed | Cost per closed deal |
|---|---|---|---|
| Storm chasing + cold calling | $5,500 | 11 | $500 |
| Cold calling team (3 callers) | $4,300 | 6 | $716 |
| Door knocking (3 knockers) | $8,400 | 9 | $933 |
| Facebook ads | $5,200 | 5 | $1,040 |
| Google Ads (LSA + PPC) | $6,100 | 5 | $1,220 |
| Shared lead vendor | $4,800 | 1 | $4,800 |
Read that bottom row twice. The shared vendor's leads were the cheapest per lead, at roughly $150 each, and produced the single most expensive deal in the sample. As the poster put it, you save money on the front end and hemorrhage it on the back end, because when three to five roofers call the same homeowner your close rate collapses. Their rule of thumb: under $800 per closed deal is good, over $1,500 means something is broken.
By the numbers
Two independent operators in that thread landed on nearly the same Google number. The tracked dataset put Google Ads at $1,220 per closed deal. A roofing owner replying said they spend "about $1250 per sold deal on google leads" against roughly $8,000 average profit per job, and framed the objection this way: if someone offered to take $1,250 and hand back $8,000 two months later, how much would you give them?
One honest caveat, raised in the thread itself: this compares six different companies running different channels, not one company running all six, so sales team and market quality are not held constant. The poster conceded the point. Treat the ranking as a directional signal and your own tracked numbers as the authority.
The real failure mode is not knowing the number at all. As the same operator described the diagnostic: ask an owner to pull up their last 30 leads and watch some sit in a CRM, some in a spreadsheet, some in unread Facebook messages, and some in a forgotten voicemail. That is not a lead problem, that is a systems problem, and more leads just means more leads falling through more cracks.
What buying leads actually looks like
If shared leads sit last in the table, purchased "set appointments" deserve their own warning, because the pitch is much better than the product.
A roofing company documented spending over $11,000 across two lead generation firms at $80 to $120 per set appointment, under rules where they could not call the homeowner ahead of time and simply showed up. From the first vendor's 42 residential leads: 18 were no-shows, over 20 were roofs only one to three years old, and at least five had notes that other roofers were already at the appointment. They signed two roofs, about $28,500 in revenue and roughly $3,000 gross profit against $6,000 of spend.
The second, better-known vendor produced the same story, then started upselling: older roofs cost extra, at $10 more per lead for five-plus years and $20 more for ten-plus, none of it disclosed before payment.
The most useful part of that post is the teardown of the method, because there is no secret in it: pull storm data, pick neighborhoods, build homeowner lists, run a dialer, and book "free inspections." It works. It is also something you can run yourself, in the territory you actually want. We ran similar math for one marketplace in are Angi leads worth it for roofing.
The four-trigger build
A 90-day version that covers all four without a big budget:
- Week 1: audit which triggers your market produces. Pull your last 50 jobs and tag each one storm, failure, underwriting or transaction. Most roofers find two triggers make up 90% of revenue and the other two are unworked.
- Weeks 1 to 2: fix the failure trigger first. Complete the Google Business Profile, enable messaging, and put a real answering process behind the phone. Free, and it is the trigger with the highest intent.
- Weeks 2 to 4: sort your customer list by roof age. Everything past 15 years goes into an underwriting-trigger campaign timed to renewal season.
- Weeks 3 to 6: build two relationships, not twenty. One insurance agent, one long-tenured realtor or one water mitigation company. Bring a paid-inspection offer, not a request for referrals.
- Weeks 4 to 8: publish for the storm trigger before the storm. City and event pages for the last two real events in your area. They rank while nothing is happening and convert when something does.
- Ongoing: track cost per closed deal by trigger. A source with cheap leads and a poor sit rate is not cheap, it is hiding the cost in rep time and windshield time.
If you want the version that spends nothing at all, roofing lead generation without buying leads builds the same coverage from permit data and public records. Once you know your close rate by trigger, how many roofing leads you need per month turns it into a target.
The verdict
The best lead source for a roofing company is whichever one is attached to a trigger you are not currently covering. For most roofers reading this, that is the underwriting letter: carriers imaging roofs at scale, non-renewal notices landing with a 45-day clock, and a documented remedy that is literally a signed roofing contract. It costs nothing but relationships, it runs counter-cyclically to storms, and almost nobody is working it.
Storm work will always be the biggest number in a hail year. The point of the other three triggers is that you do not get to pick which years those are.
Sources
- Triple-I, Facts + Statistics: Hail, compiling NOAA National Weather Service Storm Prediction Center annual severe weather report summaries (5,432 hail events in 2025, 5,373 in 2024, and state-level counts)
- Massachusetts Division of Insurance, "The Truth about Your Roof: Understanding How Insurance Companies Use Aerial Imaging to Assess Roof Condition" (45-day non-renewal notice, signed contract remedy, documentation rights, FAIR Plan)
- Massachusetts Division of Insurance, "Consumer Advisory: Roof-Related Insurance Notices" (Home Coverage Risk Alert mailers)
- Massachusetts Division of Insurance, Bulletin 2025-02, Underwriting Actions Based on the Use of Aerial Imaging, issued April 30, 2025 (cosmetic conditions, additional underwriting review)
- r/RoofingSales, "i tracked every dollar spent on marketing for 6 roofing companies over 90 days" and its comment thread (cost per closed deal table, the $1,250 and $8,000 figures, the methodology caveat)
- r/RoofingSales, "Thinking of Using a Roofing Lead Gen Company? Read This Before You Spend a Dollar." (the $11,000 account)
- r/RoofingSales, "Best lead source?" and "What's Actually Working for You When It Comes to Getting Referrals from Realtors or Insurance Agents?"
- r/Roofing, "Roofers: what actually brings you the best leads?"
