A roofing contractor was spending $12,000 a month on ads and getting calls — but the economics weren't working. Leads were being sold to multiple contractors, quality was unpredictable, and the cost per job won had climbed to a point that made scaling the business feel impossible. Here's what changed when they switched to exclusive pre-qualified leads delivered on a monthly subscription.
−74%
Cost Per Job Won
30/mo
Guaranteed Exclusive Leads
60 days
Time to Full Results
The Problem
This contractor runs a roofing business serving a mid-sized metro area. Each residential roof replacement is worth $8,000–$22,000, so the math for paid advertising can make sense — if the cost per acquired job stays within reason. When they came to us, that cost had drifted well above what was sustainable.
They were running Google Ads managed by a local agency. The spend was around $12,000 per month. Call volume was reasonable — maybe 25–35 calls per month across campaigns. But the conversion rate from call to job was poor. Of those 30-odd calls, they were winning 3 or 4 jobs on a good month.
Part of the problem was lead quality. A significant portion of the calls were homeowners who weren't serious buyers — people browsing quotes without intent to proceed, addresses outside the service area that had somehow slipped through geographic targeting, or leads that had already called four other contractors from the same lead aggregator. Shared leads in home services typically contact three to five providers simultaneously. Winning a job from a shared lead requires competing on price, speed, and availability — simultaneously — and even then you lose most of the time.
The other part of the problem was visibility. The business owner had no reliable way to predict how many calls they'd get in a given month. Some months were strong. Others were quiet for no obvious reason. Planning crew capacity, managing materials purchasing, and growing the business all depend on a reasonably predictable lead flow — and they didn't have that.
"We were spending more on ads than we were netting from the jobs those ads were supposed to be generating. Something had to change — either the cost had to come down or the close rate had to go way up, and neither was happening."
The Analysis
The instinct when lead volume is low is to increase spend. More budget, more impressions, more calls. But when we reviewed the data, the problem wasn't volume — it was the quality and exclusivity of the leads that were already coming in.
The majority of leads coming through the ad campaigns were not exclusive. When a homeowner submits a quote request through a lead aggregator — or even fills out a Google Ads landing page that feeds into a shared pool — that same contact is often sold to three, four, or five other roofing contractors in the area.
The result is a race to respond. The first contractor to call, quote, and follow up tends to win — and even "winning" in that environment often means discounting to beat the competition. Margins compress, the sales cycle is chaotic, and the close rate suffers because the homeowner is treating it as a commodity transaction.
This business was experiencing exactly that dynamic. Their close rate on inbound leads was around 12–15%, which is low for a well-run roofing operation. The primary cause was competition from other contractors who had received the same lead simultaneously.
A pre-qualified lead isn't just a homeowner who expressed vague interest. In the roofing context, we screen for four things before a lead reaches the contractor: confirmed damage or replacement need (not just "thinking about it"), confirmed service area address, confirmed homeownership, and confirmed intent to proceed within 30 days.
Leads that don't clear all four criteria are discarded. What remains is a much smaller pool of contacts — but every one of them has a real job available, is geographically within range, and is ready to buy. The close rate on this type of lead is fundamentally different from what you get out of a broad ad campaign.
For this contractor, the shift meant trading 30 mediocre shared leads per month for 30 exclusive pre-qualified ones — at a lower total monthly cost than their ad spend. Volume held steady. Everything else improved.
When a homeowner calls one contractor — because they were only given one name — the conversation is fundamentally different. There's no race, no parallel pricing exercise, no pressure to discount on the spot. The contractor has space to build rapport, assess the job properly, and present a quote that reflects the actual value of the work.
This business went from a 13% average close rate on inbound leads to over 40% within the first two months. That improvement alone — holding everything else equal — means the same 30 leads per month produces three times as many won jobs.
The Solution
The contractor cancelled their Google Ads account and moved to a flat monthly subscription with Leads.cx. The transition took two weeks — time spent onboarding their service area, job type preferences (insurance claims vs. cash sales vs. new construction), and average job value so we could calibrate lead targeting.
We mapped their service area by zip code — not just a radius — and captured which job types they preferred to prioritise. This contractor had stronger close rates on insurance claim work than cash sales, so we weighted the targeting accordingly.
Job profile setup is a one-time process that takes about two weeks of back-and-forth. Once it's dialled in, it stays unless the business changes its preferences or expands its service area.
Every lead goes through our four-point qualification before it reaches the contractor: confirmed damage or need, confirmed service area, confirmed homeownership, confirmed 30-day intent. Leads that don't pass are discarded — the contractor never sees them and is never charged for them.
For this business, roughly 40% of raw leads were discarded at the qualification stage. What reached them was a smaller but significantly higher-intent group.
Each lead is delivered to a single contractor in the service area. The homeowner's contact details, damage description, and property address are sent directly — no portal, no login, no competing bids being solicited in parallel.
The contractor receives the lead by SMS and email within minutes of qualification. Response time matters in roofing — a homeowner with recent storm damage is motivated and will move quickly if someone engages them promptly.
The Results
−74%
Cost Per Acquired Job
Monthly subscription cost divided by jobs won — down 74% compared to the previous ad spend model over the same period.
41%
Lead-to-Job Close Rate
Up from 13% on shared leads. With no competing quotes being run in parallel, the sales process had room to work.
12+
Jobs Won Per Month
Up from 3–4. The same 30 leads per month produced three times as many jobs when each one was exclusive.
The situation this contractor was in — high spend, inconsistent quality, losing jobs to competitors on the same lead — is the norm in paid roofing lead generation, not the exception. Some indicators that your current model has the same problem:
You're getting calls but closing fewer than 20% of inbound leads on jobs that should be straightforward wins
Your monthly ad spend is within a factor of two or three of your average job value — the margin for error is razor thin
Homeowners you quote mention they're "getting a few other quotes" — a clear sign the lead was shared
Lead volume fluctuates significantly month to month, making crew scheduling and forward planning unreliable
You or your sales team spends significant time on calls that go nowhere — leads that were never serious buyers
You have an agency managing ads but don't have clear visibility into what each won job is actually costing you in marketing spend
Every lead goes through a qualification call before it reaches you. We confirm four things: that there's a real damage or replacement need (not speculative), that the property is within your service area, that the person we're speaking to owns the home, and that they're looking to proceed within 30 days. Leads that don't confirm all four are discarded — you never see them and are never charged for them.
You don't need to close all 30 to make the subscription profitable. At a 40% close rate, 30 leads produce 12 jobs. At $10,000 average job value, that's $120,000 in revenue from a subscription that costs a fraction of that. Even at a 25% close rate — conservative for exclusive pre-qualified leads — you're winning 7–8 jobs per month. The question isn't whether you'll close all of them; it's whether the jobs you do close cover the subscription cost many times over.
Any lead that doesn't match the qualified profile it was delivered with — wrong service area, not actually the homeowner, no real need, or clearly no 30-day intent — is replaced at no charge. The guarantee covers the qualification criteria we represented at delivery, not the outcome of your sales process. A homeowner who gets three quotes and chooses a competitor on price is a fair loss; a homeowner who shouldn't have been delivered to you in the first place gets replaced.
Yes — there's no exclusivity requirement on your end. Most contractors who switch eventually stop their ad spend once they've validated the quality of leads from the subscription, but that's a business decision you make on your own timeline. Running both simultaneously during a transition period is common and gives you the ability to compare close rates and cost per job side by side before committing fully.
Yes. We capture leads across all roofing job types: storm and hail damage, age-driven replacement, new construction, and commercial flat roof work. During onboarding you specify which job types you want prioritised, and we calibrate targeting accordingly. This contractor's preference was storm/insurance work, but the same subscription model works for contractors focused on cash-pay replacement or new builds — the qualification criteria just adjust to match the job type.
If your close rate on inbound leads is under 25%, there's a good chance the problem is exclusivity, not your sales process. Let's look at the numbers.