Why cost per lead swings so hard from one trade to the next
Cost per lead is not a Google setting. It is the output of an auction, and the auction is different in every trade because the economics behind it are different. Three things set the price of your lead, and all three move by trade.
First, ticket size. A roof replacement is a five-figure job. A drain snake is a couple hundred dollars. Google's auction does not know or care about your margin, but your competitors do, and the shops selling five-figure jobs will bid a click up to a level a low-ticket trade would never touch. High average ticket pulls cost per lead up because everyone in that trade can afford to chase the same call.
Second, urgency. When a homeowner has no AC in August or water coming through the ceiling, the intent is total and immediate. That buyer is not comparison shopping for a week, they are calling the first credible shop. Emergency intent is the most expensive intent in local search, and the trades built on it (HVAC, roofing, plumbing, restoration) pay for it.
Third, competition density. In a metro with forty roofers all running paid, the auction is a knife fight and every click costs more. In a rural market with two, clicks are cheap. Same trade, different price, purely because of who else is bidding next to you.
Put those together and you get real spread. Two shops in different trades, both running clean campaigns, can post cost-per-lead numbers three or four times apart, and neither one is doing anything wrong. That is why a benchmark you read on some agency blog is close to useless until it is broken down by trade and grounded in your actual market. A single national average hides everything that matters.
There is a fourth factor that quietly moves the price, and it is seasonality. Storm season pulls roofing and tree work up hard for a few weeks; the first heat wave spikes HVAC; the first freeze spikes plumbing and no-heat calls. Your cost per lead in your trade's peak week is a different animal from your cost per lead in a slow month, and comparing the two as if they were the same number is how owners talk themselves into cutting a campaign that was fine. Read your CPL across a full season, not a single week, before you decide the channel is broken.
2026 cost-per-lead ranges by trade
Here is an honest read on where common home-service trades land on Google Search Ads in 2026, as a lead comes in (a real form or call, not a click). These are ranges, not promises: your metro, your seasonality, and how well the campaign is built can push you to either end. Treat this as a map, not a quote.
| Trade | Typical cost per lead | What pushes it up or down |
|---|---|---|
| Roofing | $75 to $250+ | Storm season, insurance work, and metro density push it high |
| HVAC | $60 to $200 | Peak summer/winter emergencies spike it; maintenance leads are cheaper |
| Plumbing | $50 to $180 | Emergency drain/leak calls cost most; scheduled work costs less |
| Water/fire restoration | $100 to $300+ | Highest urgency and ticket in the mix; auction is brutal |
| Electrical | $45 to $150 | Panel and emergency work priced above small fixture jobs |
| Tree service | $40 to $120 | Storm-driven removals spike; routine trimming stays lower |
| Remodeling | $60 to $200 | High ticket, long sales cycle; leads are pricey but rare and rich |
| Landscaping/lawn | $25 to $90 | Lower urgency and ticket keep it near the floor |
| Painting | $30 to $100 | Seasonal, competitive, mid-ticket |
| Junk removal | $20 to $70 | Low ticket, high volume, one of the cheaper trades |
Notice the pattern down that middle column: the trades built on emergencies and big tickets (restoration, roofing, HVAC) sit at the top, and the trades built on planned, lower-ticket work (lawn, junk removal) sit near the bottom. That is not an accident, it is the auction pricing urgency and margin exactly the way you would expect if you thought about it for a minute.
One caution. A high cost per lead is not automatically a bad deal. A restoration lead at $200 that closes a $12,000 job is a bargain. A landscaping lead at $30 that closes a $400 job might be tight once you count the ones that do not close. The trade with the scariest CPL is often the one where paid pays back the hardest, because the math is run per job, not per lead.
Cost per lead is a vanity number: cost per booked job is the real one
Every contractor asks what a lead costs. Almost none ask what a booked job costs, and that second number is the only one that touches your bank account. A lead is a phone call or a form. A booked job is money. The gap between them is where most paid budgets quietly leak.
Run the math. Say your cost per lead is $80. If half your leads turn into quotes and half of those close, you booked one job for every four leads, so your real cost per booked job is $320, not $80. Now say your CSR misses two of those four calls at 5pm on a Friday. Your cost per booked job just doubled to $640, and Google did not change a thing. You did.
This is the part generic agencies never put on the dashboard, because the leaks are on your side of the fence and they would rather show you cheap clicks. But the clicks are not the job. The job is the click plus a phone that gets answered plus a CSR who books plus a truck that shows up.
- Answer rate. A missed call in an emergency trade is a lost job, full stop. That buyer dials the next shop before your voicemail finishes.
- Speed to lead. Call a web lead back in five minutes and it is warm. Call it back in an hour and someone else already closed it.
- Close rate. Two shops with identical CPL and different close rates have wildly different cost per booked job. The better closer wins the channel.
So before you decide your cost per lead is too high, check whether your cost per booked job is too high for a different reason. Very often the ad spend is fine and the leak is a phone nobody answers after 4pm. We build call-only and call-extension campaigns around dispatch reality for exactly this: getting the ring to a human when the intent is hottest, so the leads you already paid for actually turn into work.
What actually moves your number inside a trade
Your trade sets the neighborhood your cost per lead lives in. How the campaign is built decides which house on the street. Two roofers in the same city can post cost-per-lead numbers twice apart, same auction, same season, purely because one campaign is built and one is just switched on.
The levers that matter most, in rough order of impact:
- Negative keywords. The fastest money most contractor accounts waste is paying for clicks that were never a job: "how to," "DIY," "jobs," "salary," "free," "cheapest." A tight negative list cuts junk clicks and drops cost per lead without touching your bid.
- Match type and intent. Broad match with no guardrails spends your budget on tangents. Tighter targeting aimed at buying intent ("emergency," "repair near me," "replace," "quote") buys leads, not curiosity.
- Landing page. Sending paid clicks to your homepage burns money. A dedicated page for that ad, that trade, that service area, with the phone number huge and one clear action, converts more of the clicks you already bought, which pulls cost per lead down.
- Ad copy that pre-qualifies. Say your service area, your specialty, and your terms in the ad. Copy that filters out the wrong caller is copy that lowers cost per booked job, even if it slightly raises cost per click.
- Local Services Ads alongside Search. Where LSA (the Google Guaranteed pack at the very top) is available for your trade, it often delivers a cheaper cost per lead than Search because you pay per lead, not per click, and you only pay for leads that fit. It is not a fit for every trade, but where it fits it is usually the first thing to turn on.
None of these is exotic. They are the difference between an account that a generic agency set up once and forgot, and an account that is actually managed against your cost per booked job every week. The trade is the floor. The build decides how far above it you sit.
Where Local Services Ads change the math
For a lot of home-service trades, the cheapest lead on Google is not a Search Ad at all. It is a Local Services Ad, the Google Guaranteed pack that sits above everything else on the page, and it changes the cost-per-lead conversation entirely because you pay per lead, not per click.
The difference is real. On Search Ads you pay every time someone clicks, whether they call, bounce, or were never going to buy. On LSA you pay only when a qualified lead comes through, and Google lets you dispute leads that were plainly out of area or the wrong service. For trades where LSA is available (plumbing, HVAC, electrical, roofing, and a growing list), that per-lead model often beats Search on raw cost per lead, and the badge earns trust that lifts your answer rate on top of it.
The catch is that LSA is not open to every trade or every market, and getting the Google Guaranteed badge means passing background and license screening before you can run. That screening is paid, gated setup work, which is why it lives in the same lane as the rest of your paid acquisition. It is also why a lot of contractors give up on it halfway: the screening is fiddly and the payoff is not obvious until the badge is live.
The right play for most established shops is not LSA or Search, it is the stack: LSA at the top capturing the cheapest, highest-trust leads, and Search Ads underneath catching the specific, high-intent queries LSA does not serve. Run together, the two channels lower your blended cost per lead below what either does alone. We set up the badge, handle the screening, and build the Search layer to fill the gaps, so the top of the page is working for you instead of the shop across town. Where LSA is not available for your trade yet, a well-built Search campaign carries the load until it is.
Setting a cost-per-lead target you can actually live with
The honest way to judge your cost per lead is not against a national average, it is against your own math. You do not need a benchmark to know if paid works for you. You need three numbers, and you already have them.
Start with your average job value, your close rate on quoted leads, and the margin you keep. Work backward from the job to the lead you can afford:
- Average booked-job value: what a closed job is worth to you, not the biggest one you ever landed.
- Lead-to-job rate: of the leads that come in, what share become paying jobs after your CSR and your close rate have their say.
- What you will spend to win a job: a comfortable slice of the margin, so paid is buying profit, not renting it.
Run it through: if a booked job is worth $6,000 at 40% margin, and you are willing to spend, say, 10% of that job's value to win it, you can afford up to about $240 to book it. If your lead-to-job rate is one in four, that means you can pay up to roughly $60 per lead and still be ahead. Now compare that ceiling to the trade ranges above. If your trade's typical cost per lead sits under your ceiling, paid is a machine you should be feeding. If it sits above, either the campaign build needs work to pull the number down, or your close rate does, or the channel is genuinely wrong for that service and you should say so.
That is the whole discipline: set a cost-per-lead ceiling from your own job economics, then manage the account down toward it instead of chasing whatever number a blog told you was normal. A shop that knows its ceiling never panics about a headline CPL, because it is measuring the only thing that matters, which is whether each dollar of ad spend comes back with a friend. We build accounts against that ceiling, not against vanity clicks, and we will tell you straight if the math does not close.