30 HVAC leads at $59 CPL: Here's how I built the campaign from start to finish

Highlights
Videos
The problem
A Fresno-based general contractor came to me needing a consistent way to generate full HVAC system replacement leads. They were doing solid work, but their lead flow depended entirely on referrals and word of mouth.
They had no paid acquisition channel, no system for capturing demand, and no automated follow up. This meant that seasonal demand—hot leads in the summer, cold leads in the winter—was a pattern they had become uncomfortably used to.
My solution
I built a complete Meta-to-CRM pipeline that qualifies leads at the form level and triggers immediate automated follow-up, so every lead captured has a defined path to a booked appointment.
I chose Meta for because the creative-first format matched the angles I wanted to run. Urgency-based and financial pain messaging works better in a scroll environment than in search intent platforms like Google Ads.
Developing the assets
After researching our competitors in the Fresno HVAC market and having conversations with leadership, I settled on three angles:
Video creative
3 step funnel (winning angle)
Survey page

"Thank you" page

HVAC survey + lead form

Automations
Inside GoHighLevel, I built automations that triggered the moment a lead submitted the form.
Messages:
Internal "New lead" notification to the sales team
Internal "New lead" notification to myself
SMS to lead: "Hey [name], just got your request — we received it and will be in touch shortly." (paraphrased)
Nurture: A 5-day SMS sequence that followed up with the lead every 24 hours. Each message reinforced the offer, addressed a common objection, or created soft urgency around scheduling before slots filled up.
Tagging: An automated tagging system tracked lead source and buyer journey stage. Notifications went to the sales team and myself to make sure no lead sat untouched past a reasonable response window.
GoHighLevel workflow diagram
Down-funnel impact
The system booked 7 out of 30 leads for on-site consultations — a 23.33% booked rate. Of those 7, 6 showed up: an 85.71% show rate. A show rate above 80% tells you the messaging set accurate expectations. People who commit to an appointment and keep it are serious about replacing their system.
Mid-campaign improvements
To ensure that our campaign continued to perform, I focused on a few key aspects.
Ad Cadence: New creatives every few weeks. Cut what wasn't producing quality leads.
Message control: Doubled down on the "$1k for your old AC" angle since it outperformed the other two on booked rate and lead quality.
Funnel protection: Kept form tight enough to filter low-intent, without adding too much friction.
Three key lessons
Financial incentives work well when paired with creative twists. The "$1k for your old AC" angle immediately positions the offer as a replacement opportunity.
Real people on camera outperforms AI voiceovers. Authenticity affects performance, creating a gap between AI generated versus real content.
Show rate is a stronger quality signal than booked rate. Anyone can say yes to an appointment. A high show rate means that messaging is aligned with expectations.
What I'd do differently
Disqualify leads if credit is poor: Several leads dropped off post-appointment after financial eligibility checks, taking up sales team time.
Incorporate more b-roll into video creative: Real talking head still worked, but the creative was thin in some places. More project b-roll would improve trust.
Test a longer nurture window: The 5-day sequence was promising, but HVAC is a considered purchase. A 10-14 day follow-up window could have been implemented to recover cold leads.
Tech Stack
More Case Studies
How I generated solar + roof leads at 63% lower cost than average
$885 spent, 23 leads, and $38 CPL in 4 weeks with Meta Ads.

43 roofing leads at $76 CPL: What a full campaign actually looks like
A full system built from scratch for a local contractor.

Working on a similar challenge? Let's talk.
If you want to see more work samples, discuss a role, or ask any questions, feel free to reach out.












