A high cost per click (CPC) is often the first red flag that stares at you from the Facebook Ads dashboard. You're spending $2, $3, or more per click, and you're watching your daily budget evaporate without proportional leads or calls. The instinct is to lower your bid and hope the problem fixes itself. It doesn't.
High CPC almost never stems from your bid alone. Instead, it's a signal from Facebook's algorithm that something about your creative, audience, or offer isn't resonating. The good news: the fix is predictable, repeatable, and doesn't require hiring a Facebook ads expert.
This guide walks you through the real reasons your CPC is climbing, the exact levers you can pull to bring it down, and why sometimes a high CPC is perfectly fine as long as your cost per actual booked job stays low.
What Is a Normal CPC for Your Trade?
Before you panic about high CPC, you need a baseline. Different trades have different benchmarks.
Service trades with urgent demand (emergency plumbing, HVAC in winter, locksmith) average $0.80–$2.50 per click. Home improvement (roofers, siding, window replacement) runs $1.20–$3.80 per click because the consideration window is longer—customers research for weeks. Real estate agents typically see $0.50–$1.80 per click, but conversion rates are lower. HVAC companies in-season hit $0.60–$2.40; off-season can climb to $3.50–$5.00.
If your CPC is 30% above your trade average, there's room to optimize. If it's 2x or 3x higher, you've definitely got a problem in creative, audience, or offer.
For precise benchmarks by your specific trade and region, check our cost-per-lead benchmark guide and our CPC guide for 2025.
The Root Cause: Weak Creative Is First
Facebook's algorithm ranks every ad on engagement: clicks, comments, shares, video watch time, and landing page quality. If your creative (image or video) doesn't grab attention in a 1-second scroll, the algorithm shows it to fewer people and charges you more per click to compensate.
A contractor in Denver ran a roof repair ad with a stock photo of a shingle. CPC: $2.80. He switched to a 6-second before-and-after video of an actual roof repair. CPC dropped to $1.30 in 4 days, and click volume doubled.
The fix:
- Show the problem. A roofer's ad should show a leaky ceiling or missing shingles—not a happy family on a new deck. A plumber's ad should show a backed-up drain or flooded basement. People scroll past pretty pictures; they stop for problems they recognize.
- Show the solution in 3 seconds. For video, the first 3 seconds must either identify the problem or show the transformation. By second 5, the viewer should know what you do.
- Use real work footage, not stock images. Real before-and-afters, testimonial clips, or your team on-site perform 40–60% better than generic stock photos.
- Add text overlay. "Roof leaking? Call today—free inspection" is more direct than a video with no words.
- Test one new creative every 7–10 days. Audiences suffer creative fatigue. After 10–14 days, the same ad reaches the same people and engagement drops, which pushes CPC up. Rotate 2–4 variations in-market at all times.
You don't need a production studio or professional videography. A smartphone video of a before-and-after, or a testimonial from a real customer, outperforms polished stock creative 9 times out of 10.
Stop buying leads. Generate your own in 2 minutes.
Describe your business: the AI writes the copy, designs the visual, sets the targeting, and publishes your ad. Your leads — exclusive and far cheaper than a bought one — land straight in Leadria with a phone number, ready to call.
Try Leadria free7-day free trial — no credit card — cancel anytime
If you're spending hours tweaking ads manually, you're not alone—but there's a faster way. Leadria's AI ad generator writes your copy and generates the visual in about 2 minutes. You describe your business, the AI handles the targeting and creative, and leads land directly in Leadria with a phone number. Try 7 days free, no credit card required. The time savings alone can let you test more creative variations per week, which almost always drops your CPC.
Audience Targeting: Too Broad or Too Narrow
The second culprit is audience mismatch. If you're targeting people who will never convert, Facebook's algorithm notices the lack of engagement and raises your CPC.
Too narrow: Targeting only people aged 45–55 within a 3-mile radius of your business, interested in roofing, who have visited your website, with income $75K+. You might reach 500 people, and after 3 days, you've reached all of them. The algorithm can't spend your budget efficiently, so CPC climbs.
Too broad: Targeting anyone in your state, age 25–65, interested in home improvement. You're paying to show your roof repair ad to renters in apartments, people shopping for deck furniture, and businesses 300 miles away. Low engagement, high CPC.
The sweet spot: 25-mile radius or your service area, age range that matches your historical customers (usually 35–65), and 1–2 interests directly tied to your service (e.g., "Roofing" not "Home Improvement"). Start with 50,000–200,000 people in your audience, and let Facebook expand from there.
If your local audience is very small (under 20,000 people), use geographic expansion to nearby towns instead of broadening your age or interest filters.
The Offer: Why People Scroll Past Your Ad
Your creative gets them to notice. Your offer decides whether they click.
"Get a free roof inspection" is not an offer—it's a phrase. It tells the viewer what's in it for them, but it doesn't create urgency or clear value.
Stronger offers:
- "Free roof inspection + written 5-year warranty included—call today" (specific, valuable, time-bound)
- "$500 off full roof replacement if you book this week" (concrete, urgent)
- "Leaking roof? We'll call you back in 2 hours—emergency service available now" (solves pain, removes friction)
- "90-day payment plans available—roof replacement as low as $99/month" (removes financial barrier)
Test your offer with a small budget ($10–$20 per day) for 5 days. If clicks are cheap (CPC under your baseline) but nobody fills out your lead form or calls, your offer isn't compelling enough. If CPC is high but clicks are low, your creative isn't catching eyes.
Also test lead form ads vs. traffic ads. A lead form on Facebook itself (no landing page needed) has a lower friction point and often reduces CPC by 15–25%, because users don't have to leave the platform.
Real CPC Ranges: What You Should Expect
Here's what healthy CPC looks like by industry, based on our cost research:
| Trade | Baseline CPC | Off-season or Saturation | Peak Season or High Demand |
|---|---|---|---|
| Plumbing (residential) | $0.80–$1.50 | $0.50–$1.00 | $1.80–$2.80 |
| HVAC | $0.60–$2.00 | $3.00–$5.00 (summer) | $0.50–$1.30 (winter) |
| Roofing | $1.20–$2.50 | $0.90–$1.80 | $2.20–$4.00 |
| Electrician | $1.00–$2.00 | $0.70–$1.40 | $1.80–$3.20 |
| Landscaping | $0.50–$1.50 | $0.40–$0.80 (winter) | $1.20–$2.50 (spring/summer) |
| Real Estate Agent | $0.50–$1.20 | $0.40–$0.90 | $0.80–$1.80 |
| Pest Control | $0.70–$1.80 | $0.50–$1.20 | $1.50–$2.80 |
| Painting | $0.80–$2.00 | $0.60–$1.40 | $1.40–$2.80 |
If you're 50% above your trade's baseline, investigate creative and audience first. If you're 100%+ above, you have deeper issues: account quality, targeting, or a saturated local market.
The Real Metric: Cost Per Booked Job, Not Cost Per Click
Here's the most important truth in this article: a high CPC is not a problem if your cost per close is low.
Example: You're an electrician in Austin. Your CPC is $2.50 (above average). But 1 in 4 people who click your ad fills out a lead form, and 1 in 3 of those leads books a job. That's an 8.3% conversion rate from click to booked job, or about $30 cost per booked job. If your average electrician job is $800–$1,200, your ROAS (return on ad spend) is 27–40x. You're winning.
Compare that to a plumber in the same city with a $0.80 CPC but a 2% click-to-booking rate. Their cost per booked job is $40, worse ROI on paper—but the math depends on job value.
The lever that matters most: Optimizing for phone calls or form completions instead of just clicks. Set your campaign objective to
