Roofing Lead Generation Companies vs. Running Your Own Ads: A Contractor's Real Cost Breakdown
On this page
Every roofing owner hits the same fork. Either you pay a lead generation company a per-lead or per-month fee and let them feed you contacts, or you stand up your own ads on Google, Meta, and local services and try to manufacture demand yourself. Most owners pick one, get burned, switch to the other, get burned a different way, and conclude that customer acquisition is just expensive and noisy. It is expensive. It does not have to be noisy.
The reason the comparison feels impossible is that the two options fail for opposite reasons, and almost nobody measures them on the same scorecard. Bought leads fail on margin and ownership. Self-run ads fail on competence and time-to-traction. When you put both on a single unit-economics sheet — cost per lead, cost per qualified appointment, cost per signed job, and who owns the asset at the end — the decision stops being a vibe and becomes arithmetic. That arithmetic is what we are going to do here, with the real numbers, the contract language that traps people, and a third path that most owners never seriously evaluate: targeting the homes that are actually due for a roof before you spend a dollar on either channel.
A note before the math. Nothing here promises a specific cost per lead or close rate for your market — anyone who does is selling you something. Pricing for roofing leads and ad clicks swings wildly by metro, season, storm activity, and how saturated your local competitors already are. What stays constant is the structure of the decision and the levers you control. We will give you ranges that show up repeatedly in the trade, and a model you can drop your own numbers into.
The two options, stated honestly
Before comparing them, define them, because the categories blur in marketing copy.
Roofing lead generation companies sell you the contact information of a homeowner who has indicated interest in a roof. The category splits into several sub-models that behave completely differently:
- Lead marketplaces / aggregators (the pay-per-lead networks). They run their own ads or buy traffic, capture form fills, and resell each lead. Critically, most sell the same lead to multiple contractors unless you pay extra for exclusivity.
- Pay-per-call services that route a phone call to you and bill per qualified call duration.
- Local Services Ads (the platform's own "verified pro" pay-per-lead product) which is technically a lead-gen product run by the search platform itself, billed per lead with a dispute process.
- Appointment-setting / done-for-you agencies that run ads in your name and book appointments on your calendar for a retainer plus per-appointment fee.
- Shared vs. exclusive is the axis that matters most inside this category and we will return to it.
Running your own ads means you (or an agency you direct) build and own the campaigns:
- Search ads (PPC) targeting high-intent queries like "roof replacement [city]" or "roof leak repair near me."
- Performance Max / display / retargeting to stay in front of people who visited but did not convert.
- Paid social (Meta, sometimes TikTok) for storm-response offers, financing messages, and neighborhood targeting.
- Local Services Ads run by you — this one straddles both columns, which is exactly why people get confused.
The honest framing: a lead-gen company sells you an outcome (a contact) and keeps the machine. Running your own ads means you build the machine, eat the learning curve, and keep the asset. Everything downstream — margin, control, durability — flows from that one difference.
The only scorecard that matters
Cost per lead is the number everyone quotes and the number that lies the most. A $35 shared lead and a $120 exclusive lead are not comparable until you push them all the way down the funnel to cost per signed job. Use this five-row scorecard for any channel, vendor, or campaign:
| Metric | What it measures | Why it matters |
|---|---|---|
| Cost per lead (CPL) | Spend ÷ raw leads | Entry price, easiest to game |
| Contact rate | % of leads you actually reach | Shared leads crater here |
| Lead-to-appointment rate | % that become a real sit | Filters junk and tire-kickers |
| Cost per qualified appointment | Spend ÷ kept appointments | The first honest number |
| Cost per acquisition (CPA) | Spend ÷ signed jobs | The only number that pays your bills |
The trap is stopping at row one. A vendor quotes "$40 leads" and it sounds cheap next to "$90 cost per click on my own search ads." But if the $40 lead is shared four ways, your contact rate is 45%, and your lead-to-job rate on those is 4%, your real CPA is $40 ÷ 0.04 = $1,000 per job before you count the wasted hours. Meanwhile the self-run search click that cost more per touch might convert a 25% lead-to-job rate because the intent is higher and the lead is exclusively yours.
Work it both ways with a clean example.
Bought shared leads, worked example:
- 100 leads at $45 = $4,500
- Contact rate 50% = 50 reachable
- Of reachable, 30% set an appointment = 15 appointments
- Appointment kept (show) rate 70% = ~10 sits
- Close rate on sits 35% = ~3.5 jobs
- CPA = $4,500 ÷ 3.5 = ~$1,285 per signed job
- Plus the labor to dial 100 leads, most of which were also sold to your competitors.
Self-run search ads, worked example:
- $4,500 in spend
- Cost per click $25, so 180 clicks
- Landing-page conversion 8% = ~14 leads (lower volume, higher intent, exclusively yours)
- Contact rate 80% (they called you or filled your form, expecting only you) = ~11 reachable
- Appointment set 55% = ~6 appointments
- Show rate 75% = ~4.5 sits
- Close rate 40% = ~1.8 jobs
- CPA = $4,500 ÷ 1.8 = ~$2,500 per signed job
Look at what that example actually shows. On raw CPA, the bought leads won this round — and that is the honest counterintuitive result owners hate to admit. Volume channels can produce a lower headline CPA precisely because they're a numbers game. But the example is rigged in one important way: it assumes you are bad at your own ads. New self-run campaigns almost always lose for the first 60 to 120 days while the algorithm learns and you fix your landing page, your call answering, and your speed-to-lead. The bought-lead CPA is roughly flat from day one; the self-run CPA starts terrible and improves toward a floor that is usually well below the bought-lead number once the asset matures and you stop paying the aggregator's margin on every contact.
That is the real shape of the decision: bought leads are a high floor with no ceiling of ownership; self-run ads are a painful ramp toward a lower floor and a durable asset. Neither sentence fits in a sales pitch, which is why neither vendor will tell you.
Where lead generation companies actually win
Let's be fair to the bought-lead model, because owners who hate it are usually reacting to one bad vendor, not the category.
Speed to first deal. You can be receiving leads tomorrow. For a new company, a new market, or a sales rep you need to keep busy this week, that is real. Building your own pipeline from zero takes weeks before the first qualified call.
No competence tax. You do not need to learn keyword match types, conversion tracking, pixel setup, or creative testing. The vendor already did. For an owner who has no marketing person and no time, outsourcing the machine is rational.
Variable cost that scales down instantly. Slow month? Stop buying. With your own ads, you carry agency retainers and learning losses regardless of volume.
Storm surge coverage. When a hailstorm hits and demand spikes for six weeks, lead vendors can hand you volume faster than you can stand up campaigns. Renting demand during a surge, then pulling back, is a legitimate play.
Where the model earns its keep is exclusive, vertically-integrated lead products with a real dispute process — not the cheapest shared marketplace. A platform's own verified-pro lead product, billed per lead with the ability to dispute spam and wrong-number leads, behaves much more like a self-run channel than a shared aggregator does. If you buy leads, buy those.
Where lead generation companies quietly cost you
Now the parts the order page does not advertise.
Shared leads mean you are racing. Most marketplace leads are sold to three to five contractors. Speed-to-lead is everything — the first to call inside five minutes wins a hugely disproportionate share. If your office staff dials in an hour, you paid for a lead your competitor already closed. You are not buying a customer; you are buying a footrace entry.
You never own the asset. Stop paying and the pipeline stops the same day. There is no compounding. Three years of buying leads leaves you with exactly the same dependency you started with, plus a vendor who knows you cannot leave.
Lead quality drifts and you cannot see why. Aggregators optimize for volume because they are paid per lead. When their traffic source degrades — incentivized form fills, mistargeted geos, recycled old leads — your CPA balloons and you have no visibility into the cause because you do not control the top of the funnel.
Attribution is murky on purpose. When the vendor owns the click and the form, you cannot independently verify how the lead was generated or whether it was truly fresh and exclusive. "Exclusive" sometimes means exclusive-for-24-hours, then resold.
The contract is where margin goes to die. This deserves its own section.
Lead-vendor contract traps to read for
Before signing any lead agreement, find and price these clauses. Each one is a place where your effective CPA balloons.
- Minimum spend / lead quotas. Many contracts commit you to N leads or $X per month for 6–12 months. If your close rate is bad, you are still buying.
- The return/credit policy and its limits. How do you dispute a junk lead (disconnected number, renter, wrong service, out of area)? What is the window — 24 hours, 7 days? Is there a cap on credits per month? A 10% credit cap on a feed that is 30% junk means you eat 20% no matter what.
- Definition of "qualified" and "exclusive." Get it in writing. A lead that "matches your service area" is not the same as a homeowner who asked for a roof. "Exclusive" must specify: sold to no other contractor, ever, full stop.
- Auto-renewal and cancellation notice. 30-, 60-, or 90-day written notice windows are common and easy to miss. Calendar the cancellation date the day you sign.
- Lead replay / recycled leads. Some networks re-sell aged leads as "new." Ask directly how old a lead can be when delivered.
- Geographic and category exclusivity. Are you the only roofer they sell this ZIP to, or one of ten?
If a vendor will not put exclusivity, the junk-credit policy, and the cancellation window in plain writing, that is your answer.
Where running your own ads wins
The self-run column wins on everything that compounds.
You own the asset. The campaigns, the conversion data, the retargeting audiences, the landing pages, the reviews, the ranking — all of it accrues to you. Year three of running your own ads is dramatically more efficient than year one because you have data and history the algorithms reward. Bought leads in year three cost the same as year one.
Exclusivity by default. Someone who searches your brand or clicks your ad and fills your form expects a call from you and only you. Contact rates and close rates run materially higher than on shared leads for this reason alone.
Full control of targeting and message. You decide whether you want storm-damage homeowners, financing-driven retail replacements, or commercial flat-roof RFPs. You can dial geography to the neighborhood. You can match the offer to the season.
Transparent unit economics. With your own conversion tracking, you can see CPL, cost per appointment, and CPA per campaign and per keyword. You can kill losers and scale winners with real data instead of a vendor's monthly invoice.
Lower floor at maturity. Once you strip out the aggregator's margin and your own learning losses, a mature self-run channel almost always lands at a lower CPA than shared bought leads. That is the whole reason lead-gen companies exist and are profitable — they are running the ads you could run, and keeping the spread.
Where running your own ads quietly costs you
Fairness again. The DIY column has a brutal first chapter.
The competence tax is real. Google Ads, Meta, conversion tracking, and landing-page optimization are genuine skills. Done badly, you will pay $40 per click for clicks that never convert and conclude that "ads don't work for roofing." Ads work. Bad ads don't.
Time to traction is weeks, not days. Algorithms need conversion data to optimize. Expect 60 to 120 days and a meaningful learning budget before performance stabilizes. If you need a deal this week, this is not your fast path.
Click costs in roofing are high and rising. Roofing is one of the most expensive home-services categories for paid search because the job value is high and every competitor is bidding. Storm season and saturated metros push costs higher still.
You carry fixed cost in slow months. Agency retainers and baseline spend continue whether the phone rings or not. Bought leads flex to zero instantly; your own machine has idling costs.
Fraud and waste need active management. Click fraud, bot form fills, and mistargeted impressions are real. Without someone watching, spend leaks.
The honest summary of this section and the last: self-run ads reward operators who will commit a budget and a few months to building a durable asset, and punish those looking for a quick fix.
The side-by-side
| Dimension | Lead-gen companies | Run your own ads |
|---|---|---|
| Time to first lead | Days | Weeks to months |
| Who owns the asset | The vendor | You |
| Exclusivity | Often shared (pay up for exclusive) | Exclusive by default |
| Cost trend over time | Flat | Drops as it matures |
| Headline CPL | Lower, easy to game | Higher, more honest |
| CPA at maturity | Higher floor | Lower floor |
| Control of targeting/message | Low | High |
| Competence required | Low | High |
| Flexes to zero in slow months | Yes | No |
| Attribution transparency | Poor | Full |
| Best for | New companies, storm surges, filling reps fast | Operators building durable, compounding acquisition |
The answer for most established roofing companies is not one column. It is a portfolio: own your high-intent search and brand demand because that is the lowest-CPA, highest-control channel at maturity, and rent volume from exclusive lead products to cover surges and ramp new markets. But there is a prior question both columns skip, and it is the one that actually moves your CPA.
The question both options skip: are you advertising to the right roofs at all?
Here is what nobody in the bought-vs-DIY debate says out loud. Both options are demand-capture. They wait for a homeowner to raise their hand — to search, to click, to fill a form — and then fight (you against competitors, or your ad against the auction) to be the one who answers. Demand capture is necessary, but it is the most expensive and most competitive slice of the market, because every roofer is bidding for the same hand-raisers.
The homes you most want are not raising their hands yet. A roof that is 18 to 24 years old in an asphalt-shingle market is statistically near or past the end of its service life. Add a recent hail or high-wind event over that same roof and you have a household with a real, near-term need that has not yet started searching. They are not in the auction. They are not on the lead marketplace. Reaching them costs a fraction of capturing them after a competitor's ad has already trained them to comparison-shop.
This is demand generation by targeting, and it sits underneath both other options. Instead of paying top-of-auction prices to capture whoever happens to be searching today, you identify the specific homes most likely to need a roof soon and reach them directly — by mail, by door, by a personalized microsite — before they ever type a query.
Two honest caveats so this does not read as magic. First, roof age from public and parcel data is a range, not an exact install date — "likely 18 to 24 years" is the right precision, never "installed March 2007." Second, a storm-exposure flag is odds, not proof of damage; it tells you a roof was in the footprint of a significant hail or wind event, which is a reason to inspect, not a guarantee of a claim. Treat both as prioritization signals, not promises. Used that way, they are the highest-leverage input you have, because they tell you where to point every dollar of the other two channels.
How targeting changes the bought-vs-DIY math
Walk it through the scorecard. If you can rank the homes in your service area by how likely they are to need a roof — roof-age band, storm exposure, and an overall opportunity score — then:
- Your self-run ads stop spraying a whole metro and start geo-targeting the neighborhoods dense with due and overdue roofs. Same budget, far higher conversion, lower CPA.
- Your direct mail and canvassing hit only the addresses worth hitting, instead of a blanket EDDM drop where 80% of the roofs are five years old.
- Your bought-lead spend can be cut to surge-only, because you are now generating your own qualified demand from the homes that were never in the auction.
The CPA math shifts because you removed the most expensive variable — wasted reach. A blanket mail drop to 10,000 homes where only 1,500 have aging roofs means you paid to print and post 8,500 useless pieces. Mail only the 1,500 due-and-overdue roofs and your cost per response can fall by the inverse of that waste ratio.
How RoofPredict runs the targeting-first pipeline
This is the specific work RoofPredict was built to do, and it is worth being concrete about what you actually do with it rather than waving at "AI" or "data."
Build the ranked due-roof audience. You define a territory — draw it on a hex map, import a CSV of addresses, or pull a service area — and RoofPredict scores every home in it. Each roof gets a roof-age band (recent, mid-life, due, overdue), a per-roof storm-exposure read based on the hail and wind events that have passed over that address, and a combined opportunity score. The output is a ranked, house-by-house target list with a plain "why this home" evidence chain — the age band, the storm history, the score — so a sales manager can see why an address is on the list, rather than only that it is. This is the input both your ad geo-targeting and your mail list should have been using all along. To be clear about the limits: the age is a band derived from data, not a measured install date, and the storm read is exposure, not confirmed damage.
Turn the list into tracked outreach you own. The due-roof list becomes a direct-mail campaign with personalized mail proofs (brand, copy, and address checks before anything prints), vendor release, and per-piece delivery and return tracking — with a cost quote up front so you are not guessing at spend. Every targeted home also gets a personalized report — its roof profile, storm history, and the cost-of-waiting math — as a PDF and as a public microsite with a lead-capture form, plus per-home and lookup QR codes for the mail piece and the door hanger. That microsite is your asset, not a vendor's: when a homeowner scans the QR and fills the form, the lead is exclusively yours and the source is captured immutably as first touch.
Work the field and the pipeline. For the doors, you build canvass routes, assign canvassers, and run a mobile field app with next-stop directions, outcome forms, voice notes, and the leave-behind QR, with live route progress on the map. Every lead — whether it came from a microsite form, a QR scan, an inbound call, or a canvasser — drops into a lead pipeline (new → contacting → appointment → inspected → won/lost) with two-way sync to the CRM you already run, including HubSpot, ServiceTitan, JobNimbus, AccuLynx, Jobber, Housecall Pro, Salesforce, Pipedrive, Leap, Roofr, SalesRabbit, and CompanyCam, plus Zapier and CSV. You are not replacing your CRM; you are feeding it qualified, first-touch-attributed demand.
The point of describing all of that is the unit economics. You are no longer choosing between renting leads and gambling on ads. You are generating your own exclusive demand from the homes that were statistically most likely to need you — and you own every asset the work produces.
Proving it pays: measure actual vs. estimate, not vibes
The reason owners cannot tell whether bought leads or their own ads are working is that nobody closes the loop from spend to signed job. RoofPredict's results view runs the full funnel — delivered → views → form fills → calls → leads → wins — and reports cost per lead and cost per win against three reference points: your actual results, the estimate you started with, and an industry benchmark. You can run A/B variants of a campaign and see which mail piece or offer actually produced cheaper wins, not cheaper clicks.
That closed loop is what lets you make the portfolio decision with arithmetic instead of opinion. When you can see, per channel, your true cost per win, the bought-vs-DIY argument settles itself: you keep what produces cheap wins and cut what produces cheap clicks. Most owners discover their lowest cost-per-win channel was the one they were under-funding — usually their own targeted outreach — and their highest was the shared lead feed they assumed was cheap because the CPL looked low.
A simple model you can run this week
You do not need software to start thinking correctly. Build this in a spreadsheet for each channel you run:
- Total spend for the period (ad spend + agency fees, or lead fees + the labor-hours to work them, costed at a real hourly rate).
- Raw leads produced.
- Contact rate — what fraction did you actually reach.
- Lead-to-appointment and show rate.
- Close rate on sits.
- Signed jobs, then CPA = total spend ÷ signed jobs.
- Average job margin, then gross profit per dollar of acquisition spend.
Run it for bought leads and for your own ads side by side. Then run it again costing the labor honestly — the hours your team spends dialing shared leads are a real cost the vendor's invoice hides. Most owners are shocked the first time they put the dialing labor into the bought-lead row.
If you touch storm and insurance work, stay on the right side of the line
A large share of roofing acquisition spend chases storm-damaged roofs, and that is exactly where contractors get themselves into legal trouble with their marketing. Targeting storm-exposed roofs is fine and smart. What you say in the ad and on the door is where the risk lives.
Here is the line, plainly. As a roofing contractor you may inspect a roof, document damage thoroughly with photographs, and prepare an accurate, Xactimate-aligned estimate to repair your own scope of work, and you may state facts about that scope to the carrier. You may not, for a fee, negotiate or "handle" the homeowner's claim, interpret their policy or what is covered, promise a specific approval or payout, promise their deductible is waived or absorbed or "gone," advertise a "free roof," or represent the homeowner against their insurer. That last set is unlicensed public adjusting in most states, and it is also false-advertising exposure.
The safe frame, the one to build every storm-season ad and script around: you document the roof thoroughly, you write an accurate repair estimate, and you hand it to the homeowner. The homeowner files the claim. The insurer decides coverage. Your marketing sells inspection and documentation quality, not a guaranteed outcome. RoofPredict's role on the storm side is strictly the legal one — which roofs likely qualify based on age and storm exposure, and the photo-and-scope documentation workflow — never claim handling.
The do-not-say list for storm marketing
Keep this where your sales and marketing people can see it. None of these belong in an ad, a script, a door pitch, or a yard sign:
- "We'll get your roof approved."
- "Your insurance will cover it" / "We handle the whole claim."
- "We'll get your deductible waived" or "We eat the deductible."
- "Free roof."
- Any promise of a specific payout, approval odds, or that you will negotiate with the adjuster on the homeowner's behalf.
What you can say: we inspect, we document the damage with photos, we write an accurate repair estimate, and we give it to you for your claim. That is honest, it is compliant, and it converts better than the illegal version because homeowners have learned to distrust the "free roof" pitch.
Documentation and estimate quality is itself an acquisition advantage
The contractors who win storm work are not the ones who promise the most; they are the ones whose inspection and documentation are so thorough that the homeowner's claim has everything it needs. That is a marketing message you can run honestly: photo-documented inspections and a clean, Xactimate-aligned repair estimate handed to the homeowner.
On the back end, when you are repairing your own scope, the same discipline that makes a clean estimate also surfaces legitimate scope you may have under-counted on your own repair — code-required items the local jurisdiction mandates, and components your estimate missed. RoofPredict's claim-side tooling (RoofClaim) supports that documentation work directly: it intakes and OCRs claim documents, maps line items against a roofing knowledge base to flag missing scope and code-required items with evidence anchors and pricing, runs a recoverable-depreciation completion checklist, tracks deductibles, and scores packet completeness — all on locked, UPPA-gated, contractor-documentation-only templates. The frame never changes: you are documenting your own repair scope accurately and completely, not adjusting the homeowner's claim. Used that way, documentation rigor is both compliant and a genuine differentiator in a market full of "free roof" noise.
A 90-day plan to stop guessing
Put the whole thing into motion without betting the company on one channel.
Days 1–15: Build the scorecard and the baseline. Pull the last 12 months of every acquisition source you have used — bought leads, any ads, referrals, canvassing. Run each through the five-row scorecard, costing labor honestly. You now know your real cost per win per channel, probably for the first time.
Days 1–30: Rank your service area. Build the ranked due-roof audience for your territory — roof-age bands, storm exposure, opportunity score — so every dollar of outreach has a target list instead of a blanket. This is the input both your ads and your mail were missing.
Days 15–45: Own your high-intent search. Stand up or fix your own search campaigns on the highest-intent queries, with conversion tracking wired correctly, and geo-target the neighborhoods dense with due and overdue roofs. Accept that this channel loses for 60–90 days before it matures. Fund it as an asset, not an experiment.
Days 15–60: Launch targeted mail and canvassing. Turn the due-roof list into tracked mail with proofs and per-piece tracking, personalized microsites and QR codes, and canvass routes for the densest streets. Capture every response into your CRM with immutable first-touch source.
Days 30–90: Use bought leads as a surge tool only. Keep one exclusive, disputable lead product available to flex up during storm surges or to fill a new rep — not as your baseline pipeline. Hold its real cost-per-win against your owned channels on the same scorecard.
Day 90: Re-run the numbers and reallocate. With a quarter of clean, closed-loop data, move budget toward your lowest cost-per-win channel and cut your highest. Repeat every quarter.
The owners who run this loop stop arguing about lead-gen companies versus their own ads, because they have replaced the argument with a scoreboard. The answer for your market, your season, and your sales team will not match your competitor's — and now you will actually know what it is.
Speed-to-lead is the hidden multiplier on both channels
Whichever side you land on, one variable swamps almost every other: how fast you call a fresh lead. This is the most under-managed lever in roofing sales, and it is the single reason bought shared leads underperform their headline price. When a marketplace sells the same homeowner to four contractors, the deal does not go to the cheapest bid or the best reviews — it goes to whoever calls first while the homeowner is still thinking about their roof. Inside the first five minutes the contact and set rates are a different universe than at one hour, and by the next morning the lead is effectively cold and probably already someone else's appointment.
That changes how you should staff and budget. If you buy shared leads, you need an answer process that fires within minutes, not a callback queue your office clears at lunch. Practically, that means a few specifics:
- Instant routing. The lead hits a phone in someone's hand the second it lands, not an inbox someone checks hourly.
- A real human on the first attempt, then a cadence. If no answer, a tight sequence of call, text, and a second call across the first hour, then daily for several days. Most contractors quit after one ring-out and waste the lead they paid for.
- After-hours coverage. Storm leads and evening form fills do not wait for business hours. If a competitor answers at 7 p.m. and you call back at 9 a.m., you bought them an appointment.
On your own ads the same physics apply, but you control the lever fully because the lead is exclusively yours — there is no race, only your own response discipline. A self-run campaign with sloppy speed-to-lead throws away the exclusivity advantage you paid the competence tax to earn. Before you spend another dollar on either channel, time-stamp your last fifty leads from contact to first call attempt and look at the median. Most owners who run that audit find their real problem was never the channel; it was the ninety minutes between the lead arriving and anyone calling.
What actually makes self-run ads convert
Owners who conclude "ads don't work for roofing" almost always built the campaign correctly and then sent the click to a page that could not convert it. The auction gets you the visitor; everything after the click is yours to win or lose, and it is where most of the wasted spend hides. A few fundamentals separate a self-run channel that matures into a low CPA from one that bleeds:
- One offer per landing page, matched to the ad. If the ad says "storm damage inspection," the page leads with a storm-damage inspection, not your generic homepage. Message-match lifts conversion more than almost any bid tweak.
- A form that asks for the minimum. Name, address, phone, and what's wrong. Every extra field costs you fills. Capture the rest on the call.
- Click-to-call above the fold on mobile. Most roofing traffic is mobile and many homeowners would rather tap and talk than type. Make the phone number a one-tap button.
- Proof that you are real and local. License, photos of recent local jobs, named reviews, and a real address. Roofing is a high-trust, high-dollar purchase to a stranger; a thin page reads as a scam.
- Conversion tracking wired before you spend. If the platform cannot see which clicks became leads, it optimizes toward clicks, not customers, and you will never reach the low CPA the channel is capable of. This is the step DIY owners skip most, and it quietly caps their ceiling.
Get those right and the painful 60-to-120-day ramp ends at a genuinely low, durable cost per signed job. Skip them and you will pay premium roofing click prices to fill a leaky bucket, then blame the channel.
The owned channel everyone forgets: referrals and past customers
Before you spend a dollar renting or manufacturing demand, account for the cheapest acquisition you already have and usually neglect. Past customers and referrals close at far higher rates than any cold lead because the trust problem is already solved, and they cost a fraction of a bought lead or a paid click. A homeowner who knows your work, or who was sent by a neighbor who does, contacts you expecting to hire you — the opposite of a shared marketplace lead racing four contractors.
This is not a reason to skip paid acquisition; it is a reason to stop letting your best channel leak. A few moves that cost almost nothing:
- A simple referral ask at the right moment — right after a clean install and a happy walkthrough, not six months later.
- Staying in the database. Roofs you touched five years ago are aging into their next service window, and storms keep passing over them. Your own past-customer list is itself a due-roof audience if you track install dates and storm exposure.
- Reviews as an acquisition asset, not a vanity number. Named local reviews feed both your map presence and your paid landing pages, lowering CPA on every other channel.
When you build the five-row scorecard, put referrals in their own row. Owners are routinely stunned to find their lowest cost-per-win channel was the one they never managed at all — and that the smart play is often to fund it deliberately before scaling either paid option.
Common mistakes that wreck the comparison
A few errors show up over and over and make owners draw the wrong conclusion about which channel "works."
- Judging a channel on cost per lead instead of cost per win. The cheapest leads frequently produce the most expensive jobs. Always push to the bottom of the funnel.
- Killing self-run ads in week three. The channel is supposed to lose early. Cancel it before it matures and you confirm a false belief and hand the advantage to competitors who waited.
- Hiding the labor cost of shared leads. Dialing leads your competitors also bought is real, expensive payroll the vendor invoice never shows. Cost it.
- Treating one bad vendor or one bad month as the verdict on a whole category. Storm seasonality and a single degraded traffic source can swing results hard. Judge on a quarter of data, not a week.
- Spraying paid spend across a whole metro with no targeting. Whether it's mail, doors, or geo-targeted ads, blanket reach is where most of the waste lives. Point spend at the due and overdue roofs.
- Marketing storm work with promises you cannot legally make. "Free roof" and "we handle the claim" do more than risk a fine; they erode the homeowner trust that converts. Sell documentation, not outcomes.
Avoid those six and the bought-vs-DIY question becomes answerable with your own numbers instead of someone else's pitch.
The honest bottom line
Lead generation companies are not a scam and self-run ads are not a silver bullet. Bought leads buy you speed and flexibility at the cost of margin, ownership, and exclusivity. Your own ads cost you a competence tax and a painful ramp in exchange for a durable, exclusive, compounding asset with a lower CPA at maturity. The right answer for most established roofers is a portfolio: own your high-intent demand, rent surge volume from exclusive products only, and measure everything to cost per win.
But the lever that beats both — the one neither vendor will mention because it makes you less dependent on them — is targeting the right roofs before you spend. Generate your own exclusive demand from the homes statistically most likely to need you, own every asset that work produces, and feed it into the CRM and pipeline you already run. That is the move that turns customer acquisition from an expensive guess into arithmetic you control.
If you want to see the ranked due-roof audience for your own territory and run your true cost-per-win across every channel, that is exactly what RoofPredict is built to do.
FAQ
Are roofing lead generation companies worth it?
They are worth it in specific situations: when you are new and need deals this week, when you are ramping a new market, when a storm spikes demand faster than you can build campaigns, or when you have no marketing capacity at all. They are not worth it as a permanent baseline, because you never own the asset, the leads are often shared with competitors, and your cost per signed job stays flat forever instead of dropping. The smart use is exclusive, disputable lead products as a surge and ramp tool, not your core pipeline.
Is it cheaper to buy roofing leads or run my own ads?
Buy leads tend to have a lower headline cost per lead and a flat cost per acquisition from day one. Your own ads start more expensive while the campaigns and landing pages mature, then settle at a lower cost per acquisition because you remove the aggregator's margin and the leads are exclusively yours. Over a 12-month horizon, mature owned channels usually win on cost per signed job; over a two-week horizon, bought leads win. Decide on cost per win, not cost per lead, and cost the labor of working shared leads honestly.
What is the difference between shared and exclusive roofing leads?
A shared lead is sold to several contractors at once, so you are racing competitors to call first and your contact and close rates suffer. An exclusive lead is sold only to you, so the homeowner expects a single call and your conversion rates run materially higher. Exclusive leads cost more per lead but frequently produce a lower cost per signed job. Always get the word exclusive defined in writing, because some vendors mean exclusive for 24 hours and then resell.
Why is my cost per lead low but my cost per job still high?
Because cost per lead ignores everything between a contact and a contract. A cheap shared lead with a low contact rate, lots of junk, and a low close rate produces an expensive signed job. Always push the math down to cost per acquisition: spend divided by signed jobs. Track contact rate, lead-to-appointment, show rate, and close rate so you can see where the funnel leaks instead of fixating on the entry price.
How long does it take for self-run roofing ads to become profitable?
Plan for 60 to 120 days. Ad platforms need conversion data to optimize, and you need that time to fix your landing page, your speed-to-lead, and your call answering. New campaigns almost always lose money in the first one to three months. Fund them as an asset with a learning budget, not as an experiment you cancel in week three. The payoff is a lower, durable cost per acquisition once the channel matures.
What contract clauses should I check before signing with a lead company?
Find and price six things: minimum spend or lead quotas, the junk-lead credit policy and its monthly cap, the written definition of qualified and exclusive, the auto-renewal and cancellation-notice window, whether aged or recycled leads can be delivered as new, and the geographic and category exclusivity. If a vendor will not put exclusivity, the credit policy, and the cancellation window in plain writing, treat that as the answer and walk.
How do I target homes that need a roof before they start searching?
Score the homes in your service area by roof-age band and storm exposure to build a ranked, house-by-house target list, then reach the due and overdue roofs directly with mail, canvassing, and personalized microsites before they ever type a search query. This demand generation reaches homes that are not yet in the ad auction, so it costs a fraction of capturing hand-raisers later. Remember that roof age from data is a range, not an exact install date, and a storm flag is exposure, not proof of damage, so treat both as prioritization signals.
Can I advertise that I will get a homeowner's insurance claim approved or waive their deductible?
No. Promising approval or a specific payout, claiming you will handle or negotiate the claim, advertising that you will waive or absorb the deductible, or offering a free roof crosses into unlicensed public adjusting and false advertising in most states. As a contractor you may inspect, document damage with photos, and write an accurate repair estimate for your own scope, then hand it to the homeowner, who files the claim while the insurer decides coverage. Sell documentation and inspection quality, never an outcome.
How do I prove whether bought leads or my own ads are actually working?
Close the loop from spend all the way to signed jobs for each channel on one scorecard, and cost the labor of working shared leads, which the vendor invoice hides. Track delivered, views, form fills, calls, leads, and wins, then compute cost per lead and cost per win per channel and compare against your estimate and an industry benchmark. Run A/B variants to see which offer produces cheaper wins, not cheaper clicks, then reallocate budget toward the lowest cost-per-win channel each quarter.
Should I use a lead company or my own ads if I just opened my roofing business?
Start with an exclusive, disputable lead product to get deals while you build, because you cannot wait the months a self-run channel needs to mature. In parallel, immediately stand up your own high-intent search with proper conversion tracking and start building a targeted due-roof outreach list, because those owned channels are what will lower your cost per win over time. Treat bought leads as the bridge, not the destination, and shift budget toward your owned channels as their cost-per-win data comes in.
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
- NRCA Roofing Industry Resources — nrca.net
- IBHS FORTIFIED Roof Standards — ibhs.org
- NOAA Storm Prediction Center — spc.noaa.gov
- NOAA Storm Events Database — ncdc.noaa.gov
- National Weather Service — weather.gov
- FTC Truth in Advertising — ftc.gov
- FTC Endorsements and Testimonials Guides — ftc.gov
- Texas Department of Insurance: Public Adjusters — tdi.texas.gov
- NAIC Public Adjuster Information — naic.org
- International Code Council (IRC / IBC) — iccsafe.org
- U.S. Census Bureau American Housing Survey — census.gov
- U.S. Bureau of Labor Statistics: Roofers — bls.gov
- OSHA Fall Protection in Roofing — osha.gov
- RoofPredict — roofpredict.com
Related Articles
Google Ads Not Converting Roofing Leads? A Contractor's Fix-It Playbook
Your roofing Google Ads are getting clicks but no signed jobs. Here's how to find exactly where the money leaks out and close the gaps, from match types to call answer rates.
Retargeting Ads for Roofing Companies: A Practitioner's Operating Manual
Retargeting works for roofers as a closer, not a lead source. The audiences, budget math, compliant storm creative, and measurement that turn warm visitors into booked inspections.
Roofr Review for Roofing Contractors: Is It Worth It?
A practitioner's take on whether Roofr is worth it for your shop — what it does well, where it leaves gaps, and how to match the tool to your actual bottleneck.