Roofing Lead Cost Too High? A Contractor's Playbook to Fix Your Cost Per Acquisition
On this page
Every roofing owner I talk to eventually says some version of the same sentence: "My lead cost is killing me." A lead that ran $35 three years ago now runs $90 to $200 in competitive metros, and the shared lead from the big aggregators feels worse every quarter — sold to four other companies, half the phone numbers dead, and the homeowner already annoyed before you dial. So you raise your ad budget, the cost climbs again, and the math starts looking like a treadmill set to a speed you didn't choose.
Here's the uncomfortable truth that fixes more roofing businesses than any new lead vendor ever will: cost per lead is almost never the number that's actually broken. It's the number that's easiest to see, so it gets all the blame. The number that's actually bleeding you out is cost per acquired job — and when contractors fix the four or five things that drive that number, the price per lead becomes almost irrelevant. A $150 lead that closes at 30% and produces a $14,000 job is a bargain. A $40 lead that closes at 4% and produces a $6,500 job is a slow-motion bankruptcy.
So let's fix the right thing. We'll start by tearing apart the math so you know which lever moves the needle, then walk through the targeting, speed-to-lead, channel mix, and follow-up systems that bring your true acquisition cost down — with concrete numbers, worked examples, and the mistakes I see good contractors make over and over.
The number you should actually be watching
Most roofers track Cost Per Lead (CPL). A few track Cost Per Appointment. Very few track Cost Per Acquired Job (sometimes called Customer Acquisition Cost, or CAC). The ones who track CAC and gross margin per job are usually the ones who quietly buy out their competitors in a downturn.
Here is the full chain, and every stage where money leaks:
Marketing Spend
↓ (Cost Per Lead)
Leads
↓ (Contact Rate)
Contacts
↓ (Appointment Set Rate)
Appointments
↓ (Inspection / Run Rate)
Inspections
↓ (Close Rate)
Signed Jobs
↓ (Gross Margin)
Profit
CPL only measures the very first arrow. If you obsess over it, you optimize the cheapest possible top of funnel and ignore the five conversions underneath that actually determine whether you make money. That's why two companies buying identical leads at identical prices can have a 4x difference in profitability.
The CAC formula, written out
CAC = Total Sales & Marketing Spend (period)
÷ Number of Jobs Closed (period)
Notice what's in the numerator: it's more than ad spend. Your CAC includes the canvasser's wages, the sales rep's draw and commission, the CRM subscription, the lead vendor invoices, the yard signs, the truck wraps amortized, and the appointment-setter's salary. When roofers tell me their "lead cost" is $90, they're usually quoting a vendor invoice and silently excluding $400 of internal cost per closed job. You can't fix a number you're not measuring honestly.
A worked example you can copy into a spreadsheet
Let's run two companies side by side. Both spend $10,000 a month on customer acquisition. Both sell residential re-roofs averaging $13,500 with a 35% gross margin (so ~$4,725 gross profit per job).
| Stage | Company A (cheap leads) | Company B (qualified targeting) |
|---|---|---|
| Spend | $10,000 | $10,000 |
| Cost per lead | $40 | $120 |
| Leads | 250 | 83 |
| Contact rate | 45% | 70% |
| Contacts | 113 | 58 |
| Appointment rate | 40% | 60% |
| Appointments | 45 | 35 |
| Close rate | 20% | 38% |
| Jobs closed | 9 | 13 |
| CAC | $1,111 | $769 |
| Gross profit | $42,525 | $61,425 |
| Profit after acq. spend | $32,525 | $51,425 |
Company A buys leads at one-third the price and ends up with a higher acquisition cost, fewer jobs, and $18,900 less gross profit on the same budget. The cheap lead was the expensive choice. This is the single most important table in the whole piece — if you internalize nothing else, internalize that cost per lead and cost per job move independently, and only one of them pays your mortgage.
Your homework before you change anything
Before you touch a single ad campaign, pull six months of data and calculate these by channel (Google, Facebook/Meta, aggregator, door-knocking, referral, etc.):
- Cost per lead — total channel spend ÷ leads from that channel.
- Contact rate — leads you actually reached ÷ total leads.
- Appointment set rate — appointments ÷ contacts.
- Sit/run rate — inspections actually performed ÷ appointments set.
- Close rate — signed jobs ÷ inspections.
- Average job size and gross margin by channel.
- CAC by channel — channel spend ÷ jobs closed from that channel.
You will almost certainly find that one channel has a CPL that looks bad and a CAC that's your best in the business, and another channel has a seductive CPL and a CAC that's quietly underwater. Most roofers have never seen this view of their own company. It's a sobering afternoon and it's worth ten new lead vendors.
How to track this without an enterprise CRM
You do not need expensive software to get this view. A single spreadsheet with one row per lead and these columns will run your whole business smarter than most six-figure tech stacks:
- Date received, source/channel, and the cost attributed to that lead (channel spend that month ÷ leads that month is fine to start).
- Whether you contacted them, and how many touches it took.
- Whether an appointment was set, and whether the inspection actually happened.
- Whether it closed, the contract value, and the gross margin.
Pivot that table by channel once a month and you have CPL, contact rate, set rate, run rate, close rate, average job size, and CAC for every source — the seven numbers that run a roofing company. The discipline of filling it in is the hard part, not the tooling. Assign one person to own the spreadsheet and review it in your weekly meeting. If you already run a roofing CRM, build these into a report and stop guessing.
Watch for the attribution traps
Two mistakes distort this data badly. First, the referral that came in through Google. A past customer recommends you, the homeowner Googles your name, clicks your ad, and converts — and your tracking credits the ad for a job your referral engine actually earned. Ask every lead "how did you hear about us" and record the first touch, not only the last click. Second, the long lag. A homeowner who saw your truck wrap in March, your mailer in May, and finally searched in July is a multi-touch win, not a pure search lead. You can't track this perfectly, but knowing it exists keeps you from killing the brand-building channels (signs, wraps, mail) that don't get last-click credit but feed every other channel's close rate.
Why your lead cost actually went up
It helps to know why the price climbed, because the cause points to the fix.
Auction-based ad platforms reward relevance, and punish vagueness
Google Search and Meta both run real-time auctions. Your effective cost is a function of your bid and your quality/relevance signals. When ten roofers in a metro bid on "roof replacement near me," the platform raises the floor for everyone. If your landing page is generic, your click-through is mediocre, and your conversion tracking is broken, the platform charges you a premium to make up for your weak signals. A lot of "my lead cost doubled" is really "my Quality Score fell and I'm paying the penalty."
Aggregators sell the same lead multiple times
The shared-lead model is structurally designed to raise your cost per acquired job even when the per-lead price looks flat. When a lead is sold to four contractors, your realistic close rate on it is a quarter of an exclusive lead's, sometimes worse, because the homeowner is now fielding four calls and price-shopping you against each other. You're not paying for a customer; you're buying a lottery ticket in a race you're tied with three other people in.
Storm cycles whipsaw demand
After a major hail or wind event, everybody floods the same ZIP codes — local crews, out-of-town storm chasers, and the aggregators all bidding on the same panicked searches. Costs spike for 60 to 120 days, then collapse. If your entire acquisition strategy is "buy leads when the phone is ringing," you're buying at the top of every price spike. Knowing where the damage actually concentrated — and getting there before the auction heats up — is the whole game in storm work, and we'll come back to it.
You're competing for attention, not only for roofs
The homeowner who searches "roof leak repair" at 11pm is comparing you to whoever answers first and looks most trustworthy. Rising lead cost is partly rising expectation cost. A slow, generic, hard-to-reach contractor pays more for the same lead because they convert less of it, which the platforms detect and price accordingly.
Fix #1: Stop renting shared leads, start owning your funnel
The fastest CAC improvement for most roofers is shifting budget away from shared aggregator leads toward channels you control and own.
The hierarchy of lead ownership
Think of lead sources on a spectrum from "rented" to "owned":
- Rented (worst economics over time): shared aggregator leads. You pay per lead, you don't own the relationship, you compete on speed and price, and the price ratchets up.
- Exclusive purchased leads: better — only sold to you — but still rented and still expensive per lead. Useful as fill, dangerous as a foundation.
- Earned (your website + SEO + Google Business Profile): you pay once to build it and it produces leads for years. Higher trust, higher close rate, lower marginal cost.
- Owned (your customer list, your service area data, referrals): the cheapest jobs you will ever close, because the targeting and the trust are already done.
The goal isn't to never buy a lead. It's to make purchased leads a supplement to a machine you own, not the machine itself. A healthy residential roofer I'd want to invest in usually has 50–70% of closed jobs coming from earned and owned sources within two years of getting serious about it.
The Google Business Profile is the most underpriced channel in roofing
If you do one thing this month, fully optimize and actively work your Google Business Profile (GBP). It is free to claim, it surfaces you in the local map pack exactly when someone searches "roofer near me," and the leads close at rates that make paid leads look silly because the homeowner found you and saw your reviews.
A practical GBP checklist:
- Verify the profile and use a real address and service-area settings that match where you actually work.
- Pick the precise primary category ("Roofing contractor") and add relevant secondary categories.
- Get reviews relentlessly and respond to every one — ask at the moment of highest satisfaction (final walkthrough, not three weeks later).
- Post photos of real completed jobs weekly; geotag-relevant before/afters build trust and freshness signals.
- Use the Q&A and Posts features; dead profiles rank below active ones.
- Keep NAP (name, address, phone) identical everywhere online — inconsistency suppresses ranking.
This is slow-build, but the CAC on map-pack leads is frequently the lowest in the entire business once it's working.
Fix the leaks in the paid ads you're already running
If you're going to spend on Google or Meta — and most roofers should keep some paid spend — the difference between a $200 lead and an $80 lead is usually account hygiene, not bid level. The platforms charge a relevance penalty for sloppy setups, and most roofing accounts I audit are leaking money in the same four places:
- No conversion tracking, or tracking on the wrong event. If Google is optimizing toward "page view" or raw form fills instead of qualified leads and booked jobs, it will happily buy you garbage all day. Feed the platform your real conversions — ideally booked inspections or signed jobs imported back from your CRM — so its algorithm chases revenue, not clicks.
- Sending every click to your homepage. A dedicated landing page that matches the ad's promise ("storm damage roof inspection in [City]") converts several times better than a homepage. Better conversion rate means a lower effective cost per lead at the same bid, because the platform rewards pages that turn clicks into leads.
- Junk-traffic search terms. Pull the search-terms report monthly and add negative keywords. Roofers routinely pay for "roofing jobs hiring," "roof repair DIY," "how to shingle a roof," and "roofing supply store" — clicks that will never become customers. A tight negative list can cut wasted spend 10–20% in an afternoon.
- Running ads at 2am with no one to answer. If you can't respond fast after hours, schedule ads to run when you can convert them, or add the after-hours coverage from the speed-to-lead section. Paying for leads you can't call back is the most common silent waste in the whole account.
What a good roofing landing page does
The page the click lands on is doing the heaviest lifting in your whole paid funnel, and most roofers ignore it. A landing page that earns its keep:
- States one clear offer that matches the ad, above the fold, with a phone number that's tappable on mobile (most roof searches are mobile).
- Shows real photos of your crews and completed jobs, not stock images.
- Surfaces reviews and trust signals — license number, years in business, manufacturer certifications.
- Has a short form (name, address, phone, problem) — every extra field drops conversion.
- Loads fast. A slow page bleeds both conversions and Quality Score.
Improve the landing page from a 4% to an 8% conversion rate and you've cut your cost per lead in half without touching your bid. That's the cheapest "cheaper leads" you'll ever get.
Fix #2: Speed-to-lead — the cheapest 30% you'll ever find
If you're going to keep buying leads at all, this is the highest-ROI change you can make, and it costs almost nothing: call faster.
The research on lead response time is brutal and consistent across industries. The odds of qualifying a web lead drop off a cliff after the first few minutes. The classic Lead Response Management study found contacting a lead within five minutes versus thirty minutes made you many times more likely to actually reach and qualify them, and after the first hour the odds collapse. For a shared lead sold to four contractors, speed isn't an edge — it's the entire contest. Whoever calls first usually wins, full stop.
What "speed-to-lead" actually requires
- A real-time alert, not an email you check at lunch. Lead hits your CRM, a text and a call task fire to whoever is on rotation.
- A response standard with teeth. "Call within 5 minutes during business hours" posted on the wall, measured weekly, with the average response time reviewed in every sales meeting.
- A second and third attempt the same day, not next week. Most contractors call once, get voicemail, and give up. The contact comes on attempt two through five for a huge share of leads.
- After-hours coverage. Many roof searches happen evenings and weekends — right when a leak is keeping someone up. An answering service or a simple rotation that texts back within minutes captures leads your competitors let go cold.
A simple speed-to-lead playbook
| Time after lead | Action |
|---|---|
| 0–5 min | Auto-text: "Hi [Name], this is [Rep] at [Company] — got your roof request, calling you in 2 minutes." Then call. |
| 5–10 min | If no answer, leave a specific voicemail referencing their address/issue. |
| Same day, attempt 2 | Second call 1–2 hours later from a different angle (text + call). |
| Day 1 evening | Third touch if still no contact. |
| Days 2–7 | Daily touch alternating call/text, then taper. |
| Day 8+ | Drop to long-term nurture (monthly value content) rather than abandoning. |
Five to eight touches over the first week roughly doubles contact rates versus the one-or-two-calls habit most shops have. That alone can take a 45% contact rate to 70%+, which — look back at the math table — is worth more than halving your cost per lead.
Fix #3: Target the roofs that are actually due
Here's where a lot of money is hiding. Most roofing marketing sprays an entire ZIP code and hopes. You pay to reach thousands of homeowners whose roofs are 6 years old and not in the market, to find the few hundred whose roofs are aging out or storm-worn. You're funding a lot of irrelevant impressions and door knocks.
The fix is to narrow your spend toward the homes most likely to need a roof before you spend the marketing dollar. There are a few signals that genuinely predict demand:
- Roof age. Asphalt shingle roofs are typically replaced somewhere in the 15–25 year range depending on material, ventilation, and climate. A neighborhood built in 2004 with original roofs is statistically ripe; a 2019 subdivision is not.
- Storm exposure. Roofs that took meaningful hail or high wind have accelerated aging and a real reason to be inspected now. Storm physics — hail size, wind speed, the angle and duration of the event — vary house by house, not merely ZIP by ZIP.
- Property characteristics. Roof size, pitch, and material change both your job value and your win rate.
Why "roof age" beats "ZIP code" as a targeting unit
Walk a single street built in phases over five years and you'll find roofs in wildly different condition. ZIP-level targeting treats them identically. Address-level roof-age estimates let you spend your canvassing hours, mailers, and ad dollars on the homes statistically most likely to convert — which raises every conversion rate in the funnel and drops CAC without touching your per-lead price.
Where RoofPredict fits
This is the gap RoofPredict is built for. It estimates a roof-age range for individual addresses from aerial imagery, and models storm exposure per roof rather than per ZIP, then ranks the addresses in your service area so your crews and lists target the roofs the storm wore out plus the roofs aging out. It's not a lead-buying service and it won't hand you a homeowner who's already raised their hand — it tells you which doors and routes are worth your time first, and it can enrich your existing CRM or mailing list with roof-age and storm signals so the list you already paid for converts harder.
Honest limits, because targeting tools get oversold: roof age comes back as a range, not a verified install date — aerial imagery and modeling can't read a permit. Storm modeling gives you odds, not proof a specific roof is damaged; only an inspection confirms that. A 22-year-old roof might have been replaced last spring without a visible signal, and a flagged storm street will still have houses with no real damage. Used right, that's fine — the point is to reorder where you knock and mail so you stop paying to reach 6-year-old roofs, not to replace the inspection. Contractors who feed this kind of data into canvassing routes and direct mail typically see higher contact and appointment rates per dollar, which is exactly the lever the CAC math rewards.
Targeting in practice: a canvassing example
Say you have a two-person canvassing crew that can knock ~80 quality doors a day each, and a neighborhood of 1,200 homes. Knocking all 1,200 takes a week and a half and most doors are dead weight. Instead:
- Pull roof-age ranges and storm flags for the 1,200 addresses.
- Filter to the ~350 homes with roofs in the 16+ year range or meaningful recent storm exposure.
- Sequence routes so the crew hits the densest clusters of "due" roofs first.
- Track contact, inspection, and close rates on the targeted list vs. your old spray approach.
You cover the real opportunity in three days instead of nine, your knock-to-inspection rate climbs because you're talking to people who actually have a reason to listen, and your cost per inspection — the real upstream driver of CAC — falls hard.
Targeting in practice: a direct-mail example
The same logic transforms direct mail, which most roofers have written off as dead because they mailed entire ZIP codes at a 0.3% response rate and lost money. Mail isn't dead; untargeted mail is. Run the numbers on a 5,000-piece campaign at roughly $0.70 all-in per piece ($3,500):
- Untargeted ZIP blast: 5,000 pieces, ~0.4% response = 20 calls, maybe 4 inspections, 1 job. CAC north of $3,500 on the mail alone. Painful.
- Targeted to 16+ year and storm-worn roofs: mail the same $3,500 but only to the ~1,800 addresses that are statistically due, repeated twice to the list (so ~900 homes, 2 touches). Response on a relevant, repeated mailer to in-market homes runs far higher — call it 1.5–2.5%. Now you're generating 15–22 calls, 6–9 inspections, 2–3 jobs from the same budget.
Same spend, two to three times the jobs, because every piece went to a home with an actual reason to need a roof. Repetition to a tight, qualified list beats one-shot spray to a giant list every time. This is the core reason list enrichment — adding roof-age and storm signals to addresses before you mail — pays for itself fast.
How to combine signals into a priority score
Don't treat targeting as a single filter; stack the signals into a simple priority tier so your crews and mail hit the best opportunities first:
| Tier | Signals | Action |
|---|---|---|
| A (hit first) | Roof age range 18+ years AND recent meaningful storm exposure | Door-knock first, mail twice, prioritize inspection scheduling |
| B | Roof age 16–20 OR notable storm exposure | Mail, canvass second pass |
| C | Roof age 12–16, no storm signal | Long-term nurture, low-cost touches |
| D (skip for now) | Roof age under 10, no storm signal | Exclude from active spend |
Spend the expensive channels — labor-intensive canvassing, repeated mail — on Tier A and B. Let Tier C sit in a low-cost nurture, and stop paying anything to reach Tier D. That single reallocation, done with real per-address data instead of gut feel, is where a lot of the CAC savings actually come from.
Fix #4: Tighten the conversions you already have
You can cut CAC dramatically without spending one more dollar on traffic, just by improving the rates between the leads you already get and the jobs you already could close. Each percentage point compounds.
Contact rate
Covered above under speed-to-lead. The biggest single lever for most shops. Multi-touch, fast, after-hours.
Appointment-set rate
The phone conversation that turns a contact into a booked inspection is a skill, and most roofers wing it. Standardize it:
- Lead with the homeowner's stated problem, not your company history.
- Offer two specific time windows ("Thursday at 2 or Friday at 10?") instead of "when works for you?" — choice-of-two booking lifts set rates noticeably.
- Confirm the appointment with a text and a reminder the morning of; no-shows are pure wasted CAC.
- Set expectations: who's coming, how long it takes, what they'll get (a written assessment, photos).
Sit / run rate
Reps cancel, homeowners forget, the other spouse isn't home. Require both decision-makers present when possible, confirm twice, and treat a no-show as a coaching event, not a shrug. A 15-point improvement in run rate is leads you already paid for that suddenly produce revenue.
Close rate
This is sales craft and it's beyond one section, but the highest-leverage fixes I see:
- Document thoroughly on the roof. Photos of every slope, every problem, ideally annotated. Homeowners buy what they can see. A rep who shows 25 photos of the actual roof closes far above one who describes it.
- Present a clear written scope and estimate, itemized, that the homeowner can understand and keep. Vague verbal quotes lose to organized competitors every time.
- Offer financing. A meaningful share of roof replacements stall on "I can't write that check this month." Monthly-payment options recover jobs that otherwise die at the price reveal.
- Follow up after the no. Half of "we're getting other quotes" turns into a yes with two or three professional follow-ups. Most reps never make them.
What one point of close rate is worth
Go back to Company B in the table: 35 appointments, 38% close, 13 jobs. Push close rate to 43% and you get 15 jobs from the same appointments and the same spend — CAC drops from $769 to $667 and you booked $27,000 more revenue without a dollar of extra marketing. Conversion optimization is the cheapest growth there is.
Fix #5: Mine the gold you already own
The lowest-CAC jobs in roofing aren't bought at all. They come from people who already know you.
Past customers and your database
If you've been in business five years, you have hundreds of past customers and dead leads sitting in a CRM doing nothing. That list is an asset most roofers never work:
- Storm re-engagement: when a verified storm hits an area where you have past customers, those are warm, trusting contacts whose roofs you may have even installed. A targeted call or mailer to your own list in a storm-affected area converts at multiples of a cold purchased lead. (Layer roof-age and storm data on your own list and the targeting writes itself.)
- Aging-out re-roofs: customers whose repairs you did 8–12 years ago may now be candidates for full replacement.
- Dead leads: the homeowner who didn't buy two years ago may be ready now. A quarterly "still thinking about your roof?" touch costs pennies.
Referrals, engineered not hoped-for
Referrals close at the highest rate and cost the least, yet most roofers "hope" for them. Engineer them instead:
- Ask at peak satisfaction — final walkthrough, with the new roof gleaming behind you.
- Make it concrete: "Do you know one neighbor whose roof took the same storm?" beats "send people my way."
- Give a reason — a yard sign, a referral reward where legal, a neighbor discount.
- Follow up. A text a week after completion with a referral link closes more than the in-person ask alone.
Neighborhood density (the "job-site marketing" multiplier)
When you're already on a roof, the cheapest next job is next door. Yard signs, door hangers to the surrounding 20 homes, and a canvasser working the street while your crew works the roof produce jobs at near-zero acquisition cost. If you targeted that street because it's full of aging or storm-worn roofs, the neighbors are statistically due too. Density compounds: one job becomes three on the same street, and your crew's drive time per job falls, which quietly lifts margin on top of cutting CAC.
The storm-and-insurance angle: capture the intent without crossing the line
A huge share of expensive roofing leads are storm-driven, and storm homeowners are searching things like "will insurance pay for my roof" and "get my roof claim approved." There's real money in serving that intent — but there's a bright legal line you must not cross, and crossing it can cost you your license and invite serious penalties.
What you may do
As the contractor, you absolutely may:
- Inspect and document the roof thoroughly — photograph every slope, every hail hit, every wind-lifted shingle, with measurements and dates.
- Prepare an accurate, itemized repair estimate, ideally aligned to standard estimating formats the industry and carriers recognize (Xactimate-style line items), reflecting the real scope to repair your own work.
- State facts about your scope to the carrier — what you observed, what it takes to fix it, what materials and labor the repair requires.
- Hand the documentation and estimate to the homeowner, who files their own claim. The homeowner files; the insurer decides coverage.
What you may NOT do (the do-not-say list)
This is unlicensed public adjusting in most states, and it's worth teaching your whole sales team so nobody freelances into a violation. For a fee, you may not:
- Negotiate, adjust, or "handle" the claim on the homeowner's behalf.
- Interpret the policy or tell the homeowner what is or isn't covered.
- Promise a specific payout, a specific approval, or that the claim "will go through."
- Promise the deductible is waived, absorbed, eaten, or "gone." Offering to absorb a deductible is illegal insurance-fraud territory in many states.
- Advertise a "free roof."
- Represent the homeowner against the insurer.
The safe frame is simple: document thoroughly, write an accurate estimate, and hand it to the homeowner. You are the expert on the roof and the scope of repair. You are not the homeowner's claims representative. Marketing that captures storm intent should answer on the documentation-and-estimate side — "we'll inspect your roof, document storm damage with photos, and give you a clear written estimate you can file with your insurer" — never on the claim-handling side.
Why this lowers your cost too
Storm leads are expensive partly because everyone chases them blindly during the price spike. If you know — from per-roof storm modeling rather than ZIP-level rumor — which streets actually took damaging hail or wind, you can target documentation and inspections where there's a genuine reason for a claim, set honest expectations, and avoid burning money inspecting roofs the storm didn't touch. Honest targeting and honest framing convert better and keep you out of trouble, which is its own kind of cost saving.
Build a channel mix that doesn't depend on any single source
The roofers with the lowest, most stable CAC don't rely on one channel. They run a portfolio, because every single channel either gets more expensive, dries up, or whipsaws with the weather.
A balanced acquisition portfolio
| Channel | Relative CAC | Speed to results | Notes |
|---|---|---|---|
| Google Business Profile / local SEO | Low (long run) | Slow to build | Highest-trust inbound; compounds for years |
| Website + organic content | Low (long run) | Slow | Owned asset; answers buyer questions, builds authority |
| Referrals & past-customer reactivation | Lowest | Medium | Engineer them; highest close rate |
| Targeted canvassing (roof-age/storm data) | Medium | Fast | Great with per-address targeting; controllable |
| Targeted direct mail (enriched list) | Medium | Medium | Far better when the list is filtered to "due" roofs |
| Google/Meta paid ads | Medium-high | Fast | Powerful with good tracking & landing pages; needs management |
| Exclusive purchased leads | High | Fast | Useful fill; verify exclusivity |
| Shared aggregator leads | Highest true CAC | Fast | Use sparingly if at all; manage with extreme speed-to-lead |
The move isn't to abandon paid leads overnight — cash flow matters. It's to deliberately shift the mix over 12–24 months so the cheap, owned channels carry more of the load and the expensive rented ones become a buffer for slow weeks, not your foundation.
A 90-day reallocation plan
Days 1–30 — Measure and stop the bleeding.
- Calculate CAC by channel from six months of data (the homework above).
- Install proper conversion tracking on your site and ads so the platforms can optimize on jobs, not clicks.
- Implement speed-to-lead: real-time alerts, a 5-minute standard, a 5–8 touch cadence.
- Identify your single worst-CAC channel and cut its budget by half.
Days 31–60 — Build the owned engine.
- Fully optimize the Google Business Profile and start a relentless review-request habit.
- Launch a past-customer and dead-lead reactivation campaign.
- Stand up a referral ask at every job completion with a concrete script.
- Start targeting canvassing and mail using roof-age and storm data instead of whole-ZIP spray.
Days 61–90 — Optimize conversions.
- Run weekly sales meetings around contact, set, run, and close rates — not only "how many leads."
- Standardize the phone-to-appointment script and the on-roof documentation process.
- Add financing options at the point of sale.
- Re-pull CAC by channel and reallocate again toward the winners.
Do this and the question stops being "how do I get cheaper leads" and becomes "how many crews can I afford to add," which is a much better problem.
Common mistakes that keep CAC high
A quick gut-check list of the errors I see most:
- Judging channels on CPL instead of CAC. The whole reason you're stuck. Always trace the dollar all the way to a closed, profitable job.
- Calling leads once and quitting. You paid for the lead; one voicemail throws most of that money away.
- No after-hours response. Evenings and weekends are prime roof-search time; ceding them is ceding the best leads.
- Spraying whole ZIP codes. Paying to reach roofs that aren't due. Target the homes statistically in the market.
- Ignoring the database. The cheapest jobs you'll ever close are sitting in your CRM right now.
- Vague verbal quotes. Organized, photo-documented, itemized estimates close; "I'll text you a number" doesn't.
- No financing. Losing affordable-monthly buyers at the price reveal.
- Chasing every storm at the top of the price spike with no targeting, then wondering why storm leads "don't pay."
- Treating marketing as an expense to minimize rather than an engine to optimize. The goal isn't the smallest spend; it's the most profitable jobs per dollar.
- Crossing the claims line in storm marketing — promising approvals, waiving deductibles, advertising free roofs — which risks your license and converts worse than honest documentation framing anyway.
Putting it together: the math one more time
Let's prove the thesis with one final scenario. Take a contractor spending $12,000/month, currently:
- 60% on shared leads at $50 CPL, 40% on Google ads, blended into 11 jobs/month at a CAC of ~$1,090.
Now apply the playbook over a quarter:
- Cut shared-lead spend in half, move it to GBP optimization, targeted canvassing, and database reactivation.
- Implement speed-to-lead: contact rate rises from ~45% to ~68%.
- Standardize phone scripts: appointment-set rate rises from ~40% to ~55%.
- Improve run rate and add financing: close rate rises from ~22% to ~32%.
- Target canvassing and mail to 16+ year and storm-worn roofs instead of whole ZIPs.
Same $12,000. The number of qualified opportunities per dollar rises, every downstream rate improves, owned channels start producing low-cost jobs, and jobs/month moves from 11 toward 16–18 within two quarters. CAC falls from ~$1,090 toward ~$700, and — because the targeted and referred jobs tend to be cleaner and denser — gross margin per job often ticks up too. You didn't find a magic cheap lead. You fixed the machine the lead runs through.
That's the real answer to "my roofing lead cost is too high." The price per lead was never the disease — it was a symptom of a funnel that lost money at five different stages and a targeting strategy that paid to talk to people who weren't in the market. Fix the measurement, fix the speed, fix the targeting, fix the conversions, and mine what you already own. Do that and you'll watch competitors keep complaining about lead prices while you quietly buy fewer leads and close more roofs.
If the targeting piece is where you want to start — getting your canvassing routes and mailing lists pointed at the roofs that are actually due instead of an entire ZIP code — that's exactly what RoofPredict is built to do: a roof-age range per address from aerial imagery, storm exposure modeled per roof, and your own list enriched so the doors you knock and the homes you mail are the ones most likely to need a roof. It won't close the job for you, and it deals in ranges and odds rather than certainties — but pointed at the right streets, it turns the most expensive part of your funnel into your cheapest.
FAQ
Is cost per lead or cost per job the number I should track?
Cost per acquired job (CAC) is the number that determines whether you make money; cost per lead only measures the first step of the funnel. Two companies buying identical leads at identical prices can have a 4x difference in profitability because of contact rate, appointment rate, run rate, close rate, and job size. Always trace your marketing dollar all the way to a closed, profitable job.
Why did my roofing lead cost go up so much?
A few forces stack up: ad platforms run real-time auctions where more roofers bidding raises the floor for everyone, and a generic landing page with weak conversion tracking gets a Quality Score penalty on top. Aggregators sell the same lead to multiple contractors, which inflates your cost per acquired job even when the per-lead price looks flat. And storm cycles cause everyone to flood the same ZIPs at once, spiking prices for 60 to 120 days.
Are shared aggregator leads ever worth buying?
Sparingly, and only with extreme discipline. A shared lead is sold to several contractors, so your realistic close rate is a fraction of an exclusive lead's, and the homeowner is already price-shopping you against the others. If you use them, win on speed: call within five minutes, run a 5 to 8 touch cadence, and cover after-hours. Use them as fill for slow weeks, never as the foundation of your business.
How fast do I really need to respond to a lead?
Within five minutes during business hours, ideally faster. Lead-response research consistently shows the odds of qualifying a web lead drop sharply after the first few minutes and collapse after the first hour. For a shared lead sold to four contractors, whoever calls first usually wins. Set a posted standard, fire real-time alerts to your reps, and make multiple same-day attempts instead of one voicemail.
How does targeting roofs by age actually lower my cost?
Most roofing marketing pays to reach an entire ZIP code, including many roofs that are too new to be in the market. Filtering your canvassing routes and mailing lists to homes with roofs in the 16-plus year range or with meaningful storm exposure means you spend your hours and dollars on the homes statistically most likely to convert. That raises contact, appointment, and close rates per dollar, which is what actually drives down cost per acquired job.
What is RoofPredict and what are its limits?
RoofPredict estimates a roof-age range per individual address from aerial imagery, models storm exposure per roof rather than per ZIP, and ranks the addresses in your service area so your crews target the roofs that are aging out or storm-worn. It can also enrich your existing CRM or mailing list with those signals. It is not a lead-buying service. The honest limits: roof age comes back as a range, not a verified install date, and storm modeling gives odds, not proof of damage. Only an inspection confirms condition.
Can I help homeowners with their insurance claim to win more storm jobs?
You can inspect and document the roof thoroughly, prepare an accurate itemized repair estimate aligned to standard estimating formats, state facts about your scope to the carrier, and hand the documentation to the homeowner, who files the claim themselves. You may not, for a fee, negotiate or handle the claim, interpret what the policy covers, promise a payout or approval, waive or absorb the deductible, or advertise a free roof. Those cross into unlicensed public adjusting or insurance fraud. Document, estimate, and hand it off; the homeowner files and the insurer decides.
Which channels have the lowest cost per acquired job?
Over time, the cheapest jobs come from owned and earned sources: referrals, past-customer reactivation, an optimized Google Business Profile, and organic website content. These build trust and close at high rates with low marginal cost. Targeted canvassing and enriched direct mail are solid medium-cost channels. Paid ads are powerful with good tracking. Shared aggregator leads usually carry the highest true cost per job. Aim to shift your mix toward owned channels over 12 to 24 months.
How do I reactivate my past-customer database to get cheap jobs?
Your CRM is full of warm contacts most roofers ignore. When a verified storm hits an area where you have past customers, a targeted call or mailer to your own list converts at multiples of a cold purchased lead. Reach out to customers whose repairs you did 8 to 12 years ago who may now need full replacements, and re-touch dead leads quarterly. Layering roof-age and storm data on your own list makes the targeting nearly automatic.
What is a healthy cost per acquired job for a residential roofer?
It varies by market, job size, and channel mix, so the right benchmark is your own gross profit per job, not an industry average. A reasonable rule of thumb is that CAC should be a small fraction of the gross profit on the job it produces, leaving plenty of margin after acquisition cost. The more important habit is tracking CAC by channel and gross margin per job, then reallocating budget toward the channels with the best ratio and away from the ones quietly running underwater.
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
- Asphalt Roofing Manufacturers Association — Shingle Performance and Service Life — asphaltroofing.org
- National Roofing Contractors Association (NRCA) — nrca.net
- Insurance Institute for Business & Home Safety (IBHS) — Hail and Wind Research — ibhs.org
- NOAA National Weather Service — Storm Prediction Center — spc.noaa.gov
- NOAA National Centers for Environmental Information — Storm Events Database — ncdc.noaa.gov
- Federal Trade Commission — Advertising and Marketing Guidance for Businesses — ftc.gov
- National Association of Insurance Commissioners (NAIC) — Public Adjuster Regulation — naic.org
- Texas Department of Insurance — Public Adjusters and Roofing Claims — tdi.texas.gov
- U.S. Census Bureau — American Housing Survey (housing age data) — census.gov
- U.S. Bureau of Labor Statistics — Roofers Occupational Outlook — bls.gov
- International Code Council — International Residential Code (IRC) — iccsafe.org
- Harvard Business Review — The Short Life of Online Sales Leads (lead response time) — hbr.org
- Small Business Administration — Marketing and Sales Guidance — sba.gov
- RoofPredict — roofpredict.com
Related Articles
How to Avoid Driving to Homes That Just Got a New Roof
Wasted drive time on fresh roofs quietly eats your canvass budget. Here is how to filter them out before a rep ever turns the key.
Roofing Revenue Per Lead vs Cost Per Lead: The Only Math That Tells You Where to Spend
Most roofers chase cheap leads and lose money on them. Here is how to measure revenue per lead next to cost per lead, by source, so you spend where the jobs actually come from.
How to Get to Aging Roofs Before Competitors Knock Them
The crews that win restoration and replacement work aren't faster talkers. They get to the worn-out roofs first. Here's how to find them, rank them, and knock them before anyone else does.