HVAC lead generation is less about finding more leads and more about answering the ones you already get before a competitor does. The company that replies first, by text within a minute and with a call right after, usually books the job, so work on response speed before you spend more on ads.

This guide covers where HVAC leads come from, why the first reply matters, how to set up text-first follow-up on web forms, how to run tune-up campaigns to past customers, and when to pick up the phone. We make Ready, so the worked examples use Ready's pricing. We also say where other tools are a reasonable choice.

Where HVAC leads actually come from

Most residential HVAC shops get leads from the same handful of places. Each one comes with different consent, so each one gets handled differently.

  • Your website form and "request service" button. These are your best leads. The homeowner came to you. If the form includes a clear checkbox or disclosure for texts, you can text them right away.
  • Google Business Profile calls and messages. These are high intent and come in mostly by phone. Missed calls here cost you the most.
  • Local Services Ads and paid search. The volume is good, but you pay for every lead, which makes a slow response expensive.
  • Lead marketplaces and aggregator sites. These leads are often shared with several contractors at once. Read the consent wording carefully. A homeowner who agreed to be contacted by "partners" may not have agreed to texts from your business in particular. If you aren't sure, call first, and text only after they answer or reply.
  • Past customers. This list is the cheapest one to work and the one most shops ignore. People who already paid you for a repair or install are the right audience for tune-up and maintenance-plan offers.
  • Referrals and yard signs. These are slow, but they close at a high rate.

Our general rule: cold contact goes by phone and mail. Texts go to people who opted in or who replied to you. That rule keeps your 10DLC registration healthy and keeps you out of TCPA trouble.

Why speed of response decides who wins the job

Picture a homeowner whose AC quit at 4 PM in July. They don't fill out one form and wait. They contact a few companies, often two or three as a rough pattern, and book whoever gives them a real answer first. Price and reviews matter, but on a no-cooling call the deciding question is often "who can come today?"

That changes how you measure your lead sources. A shop that answers every form in two hours is effectively paying for leads that someone else books. Before you raise your ad budget, find out how long your current response takes:

  1. Submit your own web form on a weekday afternoon and on a Saturday.
  2. Note how long it takes to get any reply, and how long it takes to reach a person.
  3. Call your main number after hours and see what happens.

If any of those take longer than a few minutes, fixing them will probably book more jobs than any new lead source would.

Text-first follow-up on web forms

The best fix is a text that goes out automatically the moment a form is submitted, followed by a person calling soon after. Texting first works for two reasons. Homeowners read texts even when they don't pick up calls from unknown numbers. And a reply tells you how they want to be reached.

A template that fits in one segment (no emoji, under 160 characters):

Hi Dana, this is Northside Heating & Air. We got your AC request. Can we call you in 5 min, or is text easier? Reply STOP to opt out.

That message is about 135 GSM-7 characters, which is one segment. Add a snowflake emoji and the limit drops to 70 characters per segment, so the same text becomes 2 to 3 segments. Leave emoji out of follow-up texts. They don't make anyone more likely to reply, and they raise the cost of every message.

How to wire it

  • On GoHighLevel: connect Ready through OAuth so inbound and outbound texts sync to the right GHL location. Then trigger the text from a form-submitted workflow. Our GHL setup guide walks through it.
  • On your own site or software: have your developer call POST /v1/messages with the lead's number, the body and "consent_attested": true (your promise that the form collected consent). Send an Idempotency-Key header so a retried request never sends twice. Docs: docs.tryready.com/api/messages.
  • In the Ready app: use templates and automations so the office isn't typing the same text 30 times a day.

Replies land in the Inbox (and in GHL for connected accounts). Note that replies are billed like sent texts: $0.0075/segment plus the $0.0045 carrier fee. A person reads the reply and responds, which is what you want on a $9,000 system replacement anyway.

Plan for quiet hours. A text sent through POST /v1/messages during the recipient's quiet hours is held only when permitted local hours start within about 6 hours. A form submitted at 11 PM gets a 409 QUIET_HOURS_BLOCK answer with next_allowed_at, and nothing is sent or charged, so have your code resend it then. A text sent by a Ready automation is held and goes out when the window opens, charged only when it sends.

Calling the hottest leads with the Ready Dialer

A text gets the conversation started, but a call usually books the job. A "no cooling" or "furnace won't light" lead deserves a call within the first five minutes. The Ready Dialer handles that from the dial pad in the dashboard or inside GoHighLevel:

  • Click-to-call from the dial pad, so the tech or CSR doesn't need to grab a personal cell
  • Consented call recording and transcripts, so you can check what was quoted
  • Inbound calls that ring the open pad, plus a Missed call card in the Inbox thread for each call you miss

It's manual dialing. There's no auto dialing, no voicemail drop and no call transfer. For a shop handling a few dozen hot leads a day, that's usually enough: the text fires automatically, and a person makes the call.

Cost-per-connect example (assumptions labelled): your CSR reaches 40 hot leads in a week, and each connected call averages 3 minutes 20 seconds. Each started minute is billed as a full minute, so every call bills as 4 minutes:

  • 40 calls × 4 min × $0.025/min = $4.00 for the week

There are no seat plans, and every minute bills at the same $0.025/min rate. You pay only for the time you use.

Seasonal tune-up campaigns to past customers

Spring AC tune-ups and fall furnace checks are steady revenue, and your past-customer list is where they come from. This is a marketing campaign, so it has to go out on a registered 10DLC campaign whose use case matches it. See matching your use case to what you actually send before you register.

A one-segment example:

Northside Heating & Air: spring AC tune-ups are open. Book before May 15 and we'll check refrigerant at no charge. Reply YES for times. STOP to opt out.

Worked math on Standard (2,000 past customers, one GSM-7 segment, no emoji):

ItemCalculationCost
Send2,000 × $0.0075$15.00
Carrier fee2,000 × $0.0045itemized on the bill
Replies (assume 15% reply once)300 × $0.0075$2.25 + carrier fee
Optional DNC/litigator scrub (if switched on)2,000 × $0.003$6.00
Optional landline validation (if switched on)2,000 × $0.003$6.00

Old customer lists are full of landlines, so validation is worth switching on for this send. Known landlines are refused up front and not charged.

Now add one emoji and stretch the message to 175 characters. That's 3 unicode segments, so the same campaign becomes 6,000 × ($0.0075 + $0.0045), roughly triple the cost. Every character you cut saves money.

Ready's all-in prices per segment include the carrier fee but not screening: Scrub lists and Number validation, the two switches in Settings under Compliance, each add $0.003 per segment when switched on, shown as screening on your bill, and both are off by default. Unless you turn the opt-out footer off, the first text to each contact, and one again from time to time, also gets "Reply STOP to opt out" and your business name if the message does not already have them, so a text close to the segment limit can bill one more segment.

For timing, send on a weekday mid-morning or early evening. Our best time to send post covers this by industry. Once someone books, an appointment reminder text the day before cuts down on no-shows.

Compliance without the drama

Here's what HVAC shops actually need:

  • 10DLC registration. $25/mo for registration, plus $2 per number. The charge at submit is the first month, $25, and there's no setup fee. Most approvals take 2 to 7 days. Unregistered traffic gets filtered by carriers. Before registering, an account can send up to 500 texts a month at the normal rate.
  • STOP handling. It's automatic, and an opt-out applies across all your campaigns.
  • Scrubbing. Old lists pick up DNC complainers and serial TCPA litigators over time. A standalone scrub is $0.005 per contact. TCPA exposure runs $500 to $1,500 per text, and the math on one lawsuit vs scrubbing is lopsided.
  • Consent records. Ready records your attestation for each bulk send and each API send that sets consent_attested (who sent, to how many, when). The record of each homeowner's opt-in lives with you: keep the form wording, timestamp and page URL.

None of this makes you lawsuit-proof. Compliance is ultimately the sender's responsibility, and these tools lower the risk.

When Ready is and isn't the right fit

Twilio (~$0.0083/segment) and GoHighLevel's LC Phone (~$0.0083/msg, ~$0.0128 all-in) cost less per message. If you have a developer and only need a raw texting pipe, or LC Phone already works for you, staying put is reasonable.

What you get with Ready is self-serve registration, the compliance stack above, a unified inbox, automations and the Ready Dialer on one bill. Local presence (texting from your number closest to the homeowner's area code, listed at $0.0015 for each segment of a delivered text) helps shops covering a metro with several area codes.

The practical takeaway

Measure your response time. Send an automatic text the moment a form comes in, and call the hottest leads within minutes. Work your past-customer list twice a year with short, emoji-free tune-up texts. Use your 20 free one-to-one texts to test your follow-up flow before you register. To send, you add a card and get a number, which is $2 a month with the first month charged when you get it. Then sign up or check pricing.

FAQ

What is the fastest way to improve HVAC lead generation? Speed up your response before buying more leads. An automatic text within a minute of a form submission, plus a call within five minutes, usually books more jobs than a bigger ad budget.

Can I text leads from lead marketplaces? Only if the consent covers texts from your business. If the wording is vague, call first, and text only after the homeowner answers or replies.

How much does a 2,000-customer tune-up text cost? For a one-segment message on Standard: 2,000 × $0.0075 = $15, plus 2,000 × $0.0045 in carrier fees. Replies are billed the same way, and the optional scrub and landline validation are $0.003 per segment each.

Does the dialer call leads automatically? No. It's click-to-call from a dial pad, with recording, transcripts, inbound calls and a Missed call card in the Inbox thread for each missed call. It's billed at $0.025/min, and each started minute counts as a full minute.

How long does 10DLC registration take? Most approvals take 2 to 7 days. Until you register, you can send up to 500 texts a month at the normal rate.