What Drives Facebook Ad Cost Per Lead for a Contractor
Meta prices your ad the same way it prices everyone's: an auction. You're not just bidding against other contractors, you're bidding against every advertiser trying to reach the same person in the same feed at the same moment. That auction, plus a handful of variables specific to home-service trades, is what sets your number.
- Ticket size and job type. A full roof replacement lead can justify a higher cost per lead than a gutter cleaning lead, because the backend value is different. Meta's algorithm also learns this: campaigns optimized for "leads" versus "purchases" versus "calls" behave differently in the auction.
- Service radius. A contractor targeting a 40-mile radius around Orlando is bidding against every other advertiser in that footprint, home service or not. Tight radius targeting inside a dense metro often costs more per impression than a wide rural radius, but converts better because the leads are actually in range.
- Creative quality and freshness. Stock photos and generic stock text get penalized by the algorithm over time (ad fatigue). Real job-site photos and short vertical video of actual work consistently outperform stock creative in home services, and that shows up directly as lower cost per lead.
- Lead form vs. landing page. Meta's native lead forms (the ones that stay inside the app) usually produce a lower cost per lead than sending clicks to your website, because there's zero friction, the person never leaves Facebook or Instagram. The tradeoff: those leads are typically lower intent and need faster, more aggressive follow-up.
- Season and competition. Storm season for roofers, spring for landscapers, summer for HVAC: everyone in the trade is bidding at once, and cost per lead climbs. Off-season, the auction is quieter and cheaper, but volume drops too.
None of these are things a generic social media package accounts for. A calendar of boosted posts is not a lead-ad campaign, and treating them the same is where most contractors' ad budgets go to die.
Typical Cost Per Lead by Trade (2026 Ranges)
These are the ranges commonly reported across the home-service advertising world for Meta lead ads, not a guarantee for any specific account. Your actual number depends on your radius, your creative, and how tight your targeting is, and two contractors in the same trade and same metro can post different numbers based on how well the account is actually run.
| Trade | Typical Cost Per Lead | Why |
|---|---|---|
| Roofing (replacement) | $45 - $95 | High ticket, storm-driven demand spikes, heavy competition for insurance-related searches and clicks |
| Remodeling / additions | $50 - $100+ | Long consideration window, high-value job, competing with design-build firms and franchises |
| HVAC (install/replace) | $35 - $75 | Seasonal spikes, competitive metros, mix of install and service intent |
| Plumbing | $25 - $60 | Mix of emergency and planned work pulls the average down versus pure big-ticket trades |
| Electrical (panel/EV/rewire) | $30 - $70 | Growing category (EV chargers, panel upgrades) with less saturated ad competition in most metros |
| Landscaping / lawn care | $15 - $40 | Lower ticket, recurring revenue model, high volume tolerance |
| Fencing / decking | $25 - $55 | Visual trade that performs well with photo/video creative, moderate competition |
| Cleaning / pest / smaller recurring trades | $10 - $30 | Lowest ticket, highest volume, most price-sensitive category |
Notice the spread inside each row. A roofer at the bottom of the $45-$95 range and a roofer at the top are often running the exact same trade in similar-sized metros, with the difference coming down to creative, targeting discipline, and how fast the account has been optimized. That spread is the whole story: trade sets the ballpark, execution sets where you land inside it.
If you're paying materially above these ranges, the problem is rarely "Facebook is expensive." It's almost always targeting that's too broad, creative that's gone stale, or a campaign objective mismatched to what you actually want (traffic instead of leads, engagement instead of conversions). It's worth pulling your own numbers monthly and checking where you sit against the table above before assuming the platform itself is the issue.
Cost Per Lead Is Not Cost Per Job: Do the Real Math
A $40 lead sounds cheap until you find out three out of ten are fake numbers, out-of-area homeowners, or people who filled out a form for a $50 gift card promotion they saw somewhere else and don't remember requesting a quote. This is the number that actually matters, and it's the one most ad reps never walk a contractor through, because it makes their cost-per-lead number look worse, not better.
Take your monthly ad spend, divide by leads generated, and you get cost per lead. Then apply your real close rate (the percentage of leads that become paying jobs) and you get cost per acquired customer. A roofer paying $70 per lead who closes one in five is paying $350 to land a customer. If that customer's average job is $12,000, that's a fine trade. If the same roofer is only closing one in fifteen because the leads are junk, the math falls apart even at a cheap cost per lead. The platform isn't the variable that broke; the lead quality is.
This is also where speed to contact matters more than most contractors expect. A lead that fills out a form and doesn't hear back for six hours has usually already called two competitors. Cost per lead can look identical on two accounts and still produce wildly different close rates purely because one shop answers the phone in five minutes and the other answers the next morning.
- Track lead quality, not just lead count. Set up a simple tag in your CRM or even a spreadsheet: good lead, bad lead, no-show, closed. Review it monthly against ad spend.
- Ask what "lead" means in any quote. A form-fill is not the same as a phone call, and a phone call is not the same as a booked estimate. Some agencies count all three as "leads" to make their cost-per-lead number look better.
- Weight it against your ticket size. A $90 lead for a $25,000 kitchen remodel is a different conversation than a $90 lead for a $300 gutter cleaning.
- Track time-to-first-contact. If your team isn't calling new leads within minutes, fix that before touching the ad account. It's usually the cheaper fix and the bigger lever.
This is the filter that separates a Facebook ad account that's actually working from one that's just burning a monthly budget on vanity numbers.
Boosted Posts vs. Real Lead Ad Campaigns
This is the single most common way established contractors waste money on Facebook: they hit the blue "Boost Post" button under a job-site photo and call it advertising. It isn't, not in any way that produces a predictable, measurable cost per lead.
Boosting a post pushes it to more of your existing followers and lookalikes with almost no targeting control, no lead form, no conversion tracking, and no way to measure cost per lead at all beyond "likes" and "reach." It's built to be easy, not effective, and Meta designed the Boost button that way on purpose: it's the fastest path from a post to a payment, not the fastest path to a qualified lead. A real lead campaign, built in Meta Ads Manager with a Leads or Conversions objective, gives you audience targeting by radius and interest, a native lead form or landing page destination, budget control by day or lifetime, exclusion targeting to filter out audiences you don't want, and a Pixel or Conversions API connection back to your website so Meta's algorithm can actually learn who converts and optimize toward more of them.
The cost difference on paper looks similar (both let you "spend $20 a day"), but the outcome isn't close. A boosted post might get you likes and comments from people who will never hire a contractor, plus a handful of coincidental form-fills you can't attribute or measure. A properly built lead campaign is built from day one to answer one question: what did this cost per qualified lead, and it reports that number back to you in the ad manager without guesswork.
There's a middle ground worth naming too: some contractors run both, using organic posts to build trust and proof of work over time, then layering a real ad campaign with a Leads objective on top once there's enough job-site content in the feed to draw from. That's a legitimate strategy. Boosting that same organic content and calling it your ad program is not.
If your current "Facebook ads" are boosted posts from your regular content calendar, you don't have a paid lead channel yet. You have a reach tactic wearing a lead-gen costume, and the monthly spend you're calling "ads" isn't producing a real cost-per-lead number you can act on.
What a Contractor-Specific Ad Setup Looks Like
Generic social agencies build the same campaign structure for a dentist, a boutique, and a roofer, then wonder why the roofer's cost per lead is double what a trade-specific setup would produce. Home-service ad accounts that actually hold a low, stable cost per lead share a few things in common, and none of them are secret tricks.
- Job-site creative, not stock photography. Real tear-offs, real trucks, real crews. Homeowners scroll past stock images without registering them; they stop on a photo that looks like it was taken on a roof three streets over. This is the same job-site content this silo builds for organic posting, reused as ad creative.
- A form or page built for one job, not a menu. A lead form asking "what service do you need" with fifteen checkboxes converts worse than a form built around one specific offer: a free roof inspection, a same-week HVAC tune-up, a fencing estimate. One clear ask beats a menu every time.
- Radius matched to actual service area, not a default 25-mile circle. Wasted impressions outside your real coverage area are pure cost with zero possible conversion. A crew that only runs jobs within 20 minutes of the shop shouldn't be paying to reach homeowners 40 miles out.
- Retargeting built in. Someone who watched 75% of a job-site video but didn't fill out the form is a warmer audience than a cold lookalike. Layering a retargeting campaign on top of cold prospecting usually lowers blended cost per lead over time, because that second touch is cheaper than the first.
- A follow-up system that calls fast. Meta lead-form leads go cold within minutes. A campaign with a great cost per lead and a slow callback still loses the job to whoever answers the phone first.
- Creative rotation on a schedule. The same three photos running for six months will fatigue and quietly push cost per lead up even if nothing else about the account changes. Fresh job-site content needs to feed the ad account on a cadence, not just when someone remembers.
This is where trade-specific management earns its fee: not by promising a magic low number, but by building the account so the number you're already paying actually turns into booked work instead of leaking out through weak creative, a bad radius, or a slow callback.
How to Budget for Facebook Ads as a Contractor
There's no universal "right" monthly budget, but there is a floor below which Meta's algorithm can't gather enough data to optimize well. As a rule of thumb, most contractor accounts need enough monthly spend to generate at least 15-20 leads a month per active campaign before you can judge whether the targeting and creative are actually working. Below that, you're looking at noise, not a trend, and any conclusion drawn from five leads in a month is really just a guess dressed up as data.
A simple way to set a first budget: pick a monthly lead target based on your crew's real capacity to handle new work, multiply by the typical cost-per-lead range for your trade from the table above, and add 15-20% as a testing buffer for the first two months while creative and targeting get dialed in. A roofer wanting 20 leads a month at a $65 average would budget roughly $1,300-$1,500 to start, understanding the first month is partly paying for data, not just leads. A landscaper wanting the same 20 leads at a $25 average is looking at closer to $500-$600, a very different conversation with the crew about what's affordable to test.
Expect a real adjustment period. Meta's algorithm needs volume and time (generally a few weeks of consistent spend) to exit its learning phase and start optimizing efficiently. Pulling a campaign after four days because the first few leads looked soft is the most common way contractors talk themselves out of a channel that would have worked with a little more patience. The learning phase is genuinely part of the cost of running the channel, not a sign something is broken.
One more budgeting reality worth naming plainly: this guide covers paid Meta advertising specifically. It doesn't cover what organic posting or full social management should cost as a monthly retainer, and it doesn't cover Google Ads, Local Services Ads, or search PPC, which run on a completely different auction with different mechanics. If the question is what a full social media management program costs on top of ad spend, that's a separate breakdown.