Agency Ops30 min read

Set-to-Sat Is the Only Solar Metric That Matters: How to Build a Confirmation-and-Rescue System in GoHighLevel

Solar campaigns don't die at the lead form. They die between the set and the sit. Here's the GoHighLevel fix.

Farhad, founder of GHL Spark
Farhad · Founder, GHL Spark
Cover illustration — four ascending teal bars on a dark green background, marked GHL Spark, Agency Ops

In short

Solar and home-improvement lead generation lives and dies on set-to-sat rate — the percentage of booked appointments where the homeowner actually sits for the consultation. Most agencies obsess over cost per lead and appointment volume, then quietly bleed thirty to forty-five percent of their booked appointments to no-shows, which doubles the true cost per sat and turns a profitable campaign into a breakeven one overnight. The fix is not more ad spend or better setters; it is a systematic GoHighLevel build combining instant speed-to-lead, hard pre-screen qualification (homeowner status, roof suitability, credit band), a three-touch confirmation cadence at booking, twenty-four hours out, and the morning of, plus a same-day no-show rescue sequence and a friction-free reschedule path. Helio Demand, a nine-person solar lead-gen agency, used exactly this structure to lift one installer client's set-to-sat from 54 percent to 79 percent without changing ad spend or creative — and turned a barely-breakeven account into the most profitable one on their roster. This post walks the entire build, field by field and message by message.

Key takeaways

  • Set-to-sat rate — the share of booked solar appointments where the homeowner actually sits — is the single metric that determines whether a solar lead-gen campaign is profitable, because every no-show doubles the effective cost of the appointment that did happen.
  • A solar no-show costs far more than a missed call, because an in-home consultation burns a closer's entire afternoon including drive time, which is why installers churn agencies over sit rate rather than lead volume.
  • Hard pre-screen qualification on homeowner status, roof suitability, and credit band should happen inside the booking flow, not after it, so unqualified leads never consume a setter's time or occupy a consultation slot.
  • A three-touch confirmation cadence at booking, twenty-four hours out, and the morning of the appointment, each requiring an active reply, is the highest-leverage automation in any solar account.
  • Helio Demand lifted a client's set-to-sat from 54 percent to 79 percent using confirmation and rescue sequences alone, with identical ad spend, creative, and setter headcount.

There's a number in your GoHighLevel account that decides whether you keep your solar client, and it probably isn't the one on the front of your monthly report.

It isn't cost per lead. It isn't appointments booked. It's the ratio between the appointments your setters put on the calendar and the appointments where a homeowner actually sat down at their kitchen table with a consultant. Set-to-sat. And in most solar accounts, that number is somewhere between 50 and 60 percent — which means that for every two appointments you proudly report, one of them was a consultant driving forty minutes to knock on a door nobody answered.

Here's why that quietly destroys campaigns. Suppose your blended cost per booked appointment is $180. Looks fine. At a 55 percent sit rate, your real cost per sat appointment is $327. If the installer closes 25 percent of sits and the average job nets them a few thousand in gross profit, that gap between $180 and $327 is the entire difference between an account that scales and an account that gets a "we're going to pause for a bit" email in ninety days.

And notice what's not in that arithmetic. You didn't change your creative. You didn't change your targeting. You didn't hire a better setter. The single largest cost driver in the campaign is what happens in the hours between the booking and the appointment — a window that, in most agencies, is completely unautomated.

This post is about closing that window. We'll go through the qualification logic that stops unbookable leads from ever occupying a slot, the exact confirmation cadence that pulls sit rate into the high seventies, the rescue sequence that recovers no-shows on the same day, the reschedule flow that stops a conflict from becoming a loss, and how to report all of it per client so the installer can see what they're paying for. We'll also look at Helio Demand, a nine-person solar lead-gen agency that took one client from 54 percent to 79 percent set-to-sat with no additional ad spend, and there's a dedicated section for solo operators running two or three installer accounts alone.

Why is set-to-sat the metric that decides a solar campaign?

Most agency dashboards are built around the metrics that are easiest to collect, not the ones that determine profitability. Ad platforms hand you cost per lead. Your CRM hands you appointments booked. Both numbers feel like progress. Neither one is what the installer is buying.

The installer is buying a consultant's afternoon, not a lead

This is the conceptual shift that changes everything about how you build the account. In most lead-gen niches, a no-show costs you a phone call. In solar and home improvement, a no-show costs a human being's entire afternoon.

Run the sequence. A consultant blocks a two-hour window for a 4pm in-home consult. They allow thirty minutes each way for drive time in Phoenix traffic. They can't realistically stack another appointment on either side, so the practical block is three to four hours. When the homeowner isn't home — or is home but "forgot" and has a friend over — that consultant has burned half a working day producing exactly zero.

Now consider that a solar installer might only have three or four consultants covering a metro. Every no-show doesn't just waste a slot; it removes capacity from a constrained resource that could have been sitting in front of a homeowner who was ready to buy. That's why installers churn agencies over sit rate rather than lead volume. Volume is your problem. Sit rate is their problem, and they feel it every single afternoon.

Every no-show doubles the cost of the appointment that worked

The math is unforgiving and worth internalizing precisely, because it's the argument you'll use with clients.

At a 100 percent sit rate, cost per sat equals cost per set. At a 50 percent sit rate, cost per sat is exactly double cost per set. At 55 percent it's 1.8x. At 79 percent it's 1.27x. Moving an account from 54 percent to 79 percent doesn't improve efficiency by 25 percentage points in the way people casually assume — it cuts the effective cost per sat appointment by roughly 32 percent.

Say that a different way, because it's the version that lands in a client meeting. Lifting set-to-sat from 54 to 79 percent produces the same number of sat appointments as increasing ad spend by about 46 percent. Except the confirmation sequence costs nothing to run after it's built, and the ad spend increase costs, well, 46 percent more.

There is no other lever in a solar funnel with that ratio of effort to outcome. Better creative might cut CPL by 15 percent, and it decays. Better targeting might lift lead quality modestly, and the platform will re-randomize it next quarter. A properly built confirmation and rescue system delivers a step-change in unit economics and then just keeps running.

Solar's sales cycle makes the gap wider than in other niches

Solar has structural characteristics that make the set-to-sat gap unusually large, which is exactly why the automation payoff is unusually big.

The ticket is high — $20,000 to $40,000 in most US markets — so the homeowner treats the consultation as a serious commitment, and serious commitments generate cold feet. The decision is joint; almost no homeowner signs a solar contract without a spouse or partner, so an appointment booked by one person can evaporate when the other person hears about it. The consideration cycle is long, and enthusiasm at 9pm on a Tuesday when someone filled out a form about cutting their power bill has largely evaporated by Thursday at 4pm. And there's a broad cultural awareness of solar sales pressure, which means a meaningful share of homeowners book an appointment and then quietly decide they'd rather not have someone in their living room.

None of these are lead-quality problems. They're all interval problems — things that happen in the gap between the set and the sit. And an interval problem is precisely the kind of problem a CRM is built to solve.

What actually causes solar no-shows?

Before building the fix, it's worth being specific about failure modes, because different causes need different automations and lumping them together is how agencies end up with a single generic reminder email that does nothing.

The lead went cold before the appointment

The most common cause, and the most preventable. A homeowner fills out a form at 9:15pm. A setter calls at 11am the next day. The appointment is booked for four days out because that's when the consultant has availability. By the time the appointment arrives, roughly a hundred hours have passed since the moment of actual intent, and the emotional temperature has dropped to nothing.

Two levers here. The first is speed-to-lead: contacting within seconds rather than hours preserves intent while it's still hot. The second is that the interval between booking and appointment needs content in it, not silence. Silence is where enthusiasm goes to die.

The homeowner was never qualified to begin with

A depressing share of solar no-shows are people who should never have been booked. Renters who filled out a form about lowering their electric bill without realizing the offer requires ownership. Homeowners with a north-facing roof under heavy tree cover. People whose credit won't support financing, who often figure this out themselves after the setter mentions it and then quietly ghost rather than have an awkward conversation.

These aren't no-shows in any meaningful sense — they're disqualifications that leaked through the setting process and then surfaced as absence. Every one of them consumed setter time, occupied a consultation slot another homeowner could have used, and made your sit rate look like a confirmation problem when it was actually a screening problem.

Nobody ever asked the homeowner to actively confirm

This is the one that surprises agencies most. A very large fraction of no-shows are not people who decided against the appointment. They're people who forgot, or who had something come up, or who assumed a vague "we'll see you Thursday" email was informational.

The distinction between informing and requesting a reply matters enormously. A message that says "your appointment is confirmed for Thursday at 4pm" generates no data and creates no commitment. A message that says "reply Y to confirm Thursday at 4pm" generates a binary signal you can route on, and — through simple consistency psychology — creates a small explicit commitment the homeowner is measurably more likely to honor.

If you're not asking for replies, you don't have a confirmation system. You have a notification system, and notifications don't lift sit rate.

The homeowner had a conflict and no easy way to move it

A homeowner whose Thursday plans change has two options. Option one: navigate a reschedule. Option two: do nothing and hope it goes away. If option one requires calling an office during business hours, or replying to a no-reply email address, or clicking through a portal, most people choose option two — and it registers as a no-show even though it was really a deferred appointment.

This is the cheapest recoverable loss in the entire funnel. A one-tap reschedule path built into every confirmation message converts a meaningful percentage of would-be no-shows into a slot two days later. And a rescheduled appointment sits at a higher rate than an original one, because the homeowner has now actively chosen the time.

The confirmation came from a company, not a person

Homeowners honor commitments to people. A text from "SunPath Energy" reads as marketing. A text from "Hi, this is Dani from SunPath Energy" reads as a human being who will notice if you're not home. The difference is not cosmetic — it's the difference between a message that gets swiped away and a message that gets a reply.

How should you qualify a solar lead before you ever book it?

Qualification is the first half of the set-to-sat fix, and it's the half most agencies skip because it feels like it suppresses volume. It does suppress volume. It suppresses exactly the volume that was going to waste a consultant's afternoon.

The principle: screen before the slot, not after. A disqualified lead should never reach a calendar. And the screening should happen inside the booking flow, in GoHighLevel, in a way that's consistent whether the lead self-books or a setter books them.

The four screening questions that actually matter

Resist the urge to build a fifteen-question intake. Every additional question costs you completion rate, and only a handful genuinely predict whether an appointment will sit and convert.

Homeowner status. Non-negotiable and always first. "Do you own the home?" as a required yes/no on the form or as the setter's opening question. Renters route straight out of the booking path. There is no version of a solar consultation that works with a renter, and every renter who reaches a calendar is a pure loss.

Decision-maker presence. "Is there anyone else involved in the decision?" and, if yes, "Will they be able to join us?" This one question moves sit rate more than almost any other, because a solo-booked appointment where the spouse is unaware is one of the highest-risk appointment types that exists. Capture the second decision-maker's name in a custom field and use it in the confirmation messages — a text that references both names by name is dramatically harder to no-show on.

Roof suitability. A short proxy screen rather than an engineering survey. Roof age band, approximate shading, and roof type. You're not trying to determine feasibility — the consultant does that. You're trying to filter out the obvious non-starters: a roof needing full replacement within a year, or heavy full-day shade. Capture it, don't over-interrogate it.

Credit band, softly. The one everyone dreads asking. Don't ask for a score, and never ask for anything resembling a full credit application at the setting stage. Ask a soft self-reported band question framed around financing options: something like "Which range best describes your credit — excellent, good, fair, or not sure?" Self-reported bands are imperfect but strongly directional, and the answer lets you route "fair" and "not sure" leads to a different treatment rather than sending a consultant on a drive that ends in a declined application. Be mindful that credit-related questioning carries genuine regulatory sensitivity in the US, UK, and Australia — keep it self-reported, keep it optional, and let the installer's own compliance process own how financing is discussed. GHL Spark builds the field; your client's process owns the policy.

Add a fifth if the installer wants it: monthly electricity bill band. It's a decent proxy for system size and deal value, and it costs almost nothing to collect since homeowners are usually happy to complain about it.

How to build the screen inside GoHighLevel

The mechanics are straightforward and worth getting exactly right, because the same structure gets reused for every installer client.

Build the screen as a multi-step Survey rather than a single-page Form. Surveys support conditional logic, so a "no" on homeowner status can jump straight to a disqualification page rather than making the person answer four more questions before rejecting them. Multi-step also improves completion rate on mobile, which is where the overwhelming majority of solar paid-social traffic lives.

Map every answer to a named custom field on the contact — homeowner_status, decision_maker_second, roof_age_band, shading_level, credit_band, bill_band. Named fields are what make the confirmation messages personal and the reporting possible later. Merge them into messages using GHL's merge-field syntax, so a confirmation text can reference the homeowner's first name and the second decision-maker's name pulled from contact.decision_maker_second.

Then gate the calendar. In the survey flow, only route to the booking step when the qualifying conditions are met. Everything else routes to a disqualification path. This is the structural thing most accounts get wrong — they let everyone reach the calendar and then try to clean up afterward, which never happens.

Where disqualified leads should actually go

Deleting a disqualified lead is throwing away money you already spent. Every disqualification path should end in a tag and a destination.

Renters get tagged dq-renter and enter a low-frequency future-move nurture. People rent until they don't. A quarterly touch costs nothing and a small percentage of that list becomes homeowners within two years. If the installer has a community-solar partner, this is also a referral revenue line.

Unsuitable roof gets tagged with the specific reason — dq-roof-age, dq-shading — and enters a re-check campaign. A roof that's too old today is a roof that gets replaced in three years, and an installer who touched that homeowner first has an enormous advantage. If the installer also does roofing (many home-improvement clients do), this is a direct cross-sell, not a dead end.

Credit-band concerns are the most delicate. Tag as dq-credit-hold and route into a longer nurture focused on lease and PPA options where the installer offers them, and on general education otherwise. Do not build anything that looks like an adverse decision — you're routing marketing content, not making a lending determination. The installer decides what financing paths exist; you build the routing.

Not-now leads — qualified but not ready — get tagged nurture-longcycle and go into the long-cycle sequence covered later in this post. This is often the single most valuable segment in the entire database and the one most agencies neglect entirely.

The rule that makes all of this work: no lead leaves the system untagged. Untagged leads are unreportable, unreusable, and invisible. Tagged leads are an asset that appreciates.

What does a confirmation cadence that actually works look like?

Here it is — the core of the whole thing. Three touches, each requiring an active reply, each doing a distinct job.

Touch one — immediately at booking

Fires within sixty seconds of the appointment being created, triggered from the Appointment Booked event in a GoHighLevel workflow.

The job of this message is anchoring. The homeowner has just committed and their intent is at its peak. You want the appointment written into their brain and their calendar while that's still true.

Content: the consultant's first name, the exact date and time, the approximate duration, what will actually happen ("we'll look at your roof on satellite, go through your last twelve months of usage, and give you real numbers — no obligation"), and a calendar file or link. Then the ask: reply Y to confirm.

The duration statement matters more than people expect. A homeowner who thinks a solar consult is a thirty-minute chat and later hears it's ninety minutes will find a reason not to be home. Setting the expectation at booking, when they're enthusiastic, prevents the surprise from becoming a cancellation.

Send both SMS and email here. SMS gets read; email carries the calendar attachment and the credibility markers — licence numbers, reviews, a photo of the consultant. That photo is worth more than it sounds. It converts an abstract appointment into a specific person arriving at your house.

Touch two — twenty-four hours out

Fires on the appointment's relative timing, twenty-four hours before the scheduled start.

The job of this message is the decision point. This is where the homeowner either recommits or discovers a conflict — and you want them to discover the conflict now, when it can be rescheduled, rather than at 4:05pm tomorrow when a consultant is standing on the porch.

Content: short, personal, and explicitly two-optioned. Confirm the time, name the consultant, and give two clear paths — reply Y to confirm, or tap the reschedule link if the time no longer works.

The reschedule link is not a concession. It's the highest-ROI element of the entire sequence. You are actively inviting people to move the appointment because a moved appointment is worth far more than a no-show, and a homeowner who reschedules has re-chosen the time and now sits at a higher rate than the original booking would have.

If a second decision-maker was captured, name them here. "Hi Marcus — just confirming Dani will be out tomorrow at 4pm. Will Priya be able to join?" That question does two jobs at once: it confirms the appointment and it surfaces the single biggest cause of a wasted consult, which is a spouse who wasn't in the loop.

Touch three — the morning of

Fires between 8am and 9am local on the day of the appointment.

The job of this message is logistics and finality. The decision is made; now you're removing the last practical frictions.

Content: today's time, the consultant's name and ideally photo, a note about arrival ("Dani will text when she's about fifteen minutes out"), a reminder of anything the homeowner should have handy — most usefully a recent electricity bill — and a final one-tap confirm.

Asking for the bill is a quiet sit-rate lever nobody talks about. A homeowner who goes and finds their bill has invested effort, and invested effort creates follow-through. It also makes the consultation itself dramatically better, which the installer will notice and attribute to you.

The two rules that make all three touches work

Every message asks for a reply. Not "your appointment is confirmed" — "reply Y to confirm." One character. The friction has to be near zero and the ask has to be explicit.

Silence is a signal, not a confirmation. This is where most builds fall over. If a contact hasn't replied Y by the morning-of touch, they should be tagged unconfirmed-risk and surfaced on a dashboard the setter reviews at 9am. That's a live call in the highest-contact-rate window of the day, targeted at exactly the appointments most likely to fail. Roughly a third of those get saved, either by confirming or by rescheduling — and either outcome beats a wasted drive.

Set your workflow to fire these on relative timing driven by the appointment's start time, never on hard-coded schedules, and set the sequence to remove the contact from the cadence when they cancel. Nothing damages trust with an installer faster than a confirmation text going to a homeowner who cancelled two days ago.

How do you rescue a no-show on the same day?

Some appointments will still fail. What separates a good account from a great one is what happens in the four hours afterward.

Most agencies do nothing. The consultant marks it no-show, the contact sits in the pipeline, and if anyone follows up it's three days later with a generic email. By then the homeowner has resolved whatever caused the miss and has moved on emotionally.

The rescue window is hours, not days.

The rescue sequence, timed precisely

Trigger from the appointment status changing to No Show. Most installers won't mark it reliably, so build a fallback: if the appointment end time has passed and the status is still Confirmed, treat it as a no-show and require the consultant to actively mark it Showed. Making "showed" the affirmative action rather than the default is the single most important data-hygiene decision in the entire build, because your set-to-sat number is only as good as this field.

Fifteen minutes after the scheduled start. SMS from the consultant, in the moment, no blame at all. Something close to: "Hi Marcus — Dani here, I'm outside. Did something come up? Happy to wait a few minutes or find another time." This catches the homeowner who's stuck in traffic or in the back garden, and it recovers a genuinely surprising number of appointments while the consultant is still physically there.

Two hours after. SMS acknowledging the miss without guilt and offering the easiest possible next step: a one-tap reschedule link. Tone is everything. "Totally understand — days get away from us" recovers appointments; "you missed your appointment" does not. Nobody rebooks with a company that made them feel bad.

The next morning. Email with genuine value attached — the satellite roof analysis the consultant would have shown, or a ballpark savings estimate based on the bill band they gave you. This reframes the follow-up from "you owe us a meeting" to "here's something useful," and gives a fresh reason to re-engage.

Day three. A short call task assigned to the setter, with all context visible in the conversation thread so they're not starting cold.

Day seven. If still no re-book, drop into the long-cycle nurture rather than continuing to chase. Persistence past a week converts almost nobody and burns goodwill.

A well-tuned rescue sequence recovers somewhere between 20 and 30 percent of no-shows into a rebooked appointment. On an account doing 120 appointments a month at a 25 percent no-show rate, that's roughly seven recovered appointments monthly from automation that runs itself.

Make rescheduling absurdly easy

Every message in the confirmation and rescue sequences carries a reschedule link. Not a phone number, not an email — a link that opens the calendar, shows real availability, and rebooks in two taps.

When a reschedule happens, the contact moves back to the appropriate pipeline stage and the entire confirmation cadence re-arms against the new appointment time. Because the cadence is built on relative timing, this happens automatically. That's the payoff for building on relative timing rather than fixed dates.

Track rescheduled appointments as a distinct category in reporting. They typically sit at a notably higher rate than originals, and being able to show an installer that your reschedule flow produced eleven additional sat appointments last month is exactly the kind of concrete attribution that makes a retainer feel cheap.

How do you keep the "not right now" leads alive?

In solar, "not right now" is not a rejection. It's a timing statement. Homeowners who say it in March genuinely might buy in September, when the summer bills have arrived and the panels went up next door.

Almost every solar agency lets this segment rot. The lead was expensive to acquire, the intent was real, and then a workflow drops them because they didn't book within fourteen days.

The structure of long-cycle nurture

Build it as a low-frequency, high-value sequence measured in months rather than days. Roughly every two to three weeks, alternating email and SMS, running six to twelve months.

Content that works, in rough order of effectiveness: local case studies with real numbers ("a home in Chandler, similar size, now paying $31 a month"), seasonal bill-shock timing (July and August in Phoenix, January in the UK), equipment and efficiency updates, financing and rate changes, and neighbourhood proof — nothing converts a hesitant homeowner like knowing three houses on their street went solar.

The re-engagement trigger matters as much as the content. Any click, any reply, any site revisit should tag the contact nurture-warm and generate a task for the setter. The nurture isn't there to convert on its own; it's there to keep the lead warm and raise its hand at the right moment.

Incentive and rebate deadlines are the strongest urgency you'll ever get

Solar has something almost no other niche has: real, externally imposed, verifiable deadlines. Federal tax credit step-downs. State rebate programs with fixed budgets. Utility net-metering policy changes. Regional feed-in tariff adjustments in the UK and Australia. Local rebate windows that close on a specific date.

These are the only genuine urgency in the solar sale, and most agencies never automate around them — usually because tracking them per market is tedious. That tedium is exactly why it's a moat.

Build a rebate-deadline campaign as a reusable structure with the deadline stored as a date field per sub-account. Then run a fixed cadence off relative timing: sixty days out (education — here's what changes and what it's worth), thirty days out (what it means for your specific bill band), fourteen days out (the practical timeline, since installation queues mean the real deadline for booking is earlier than the policy deadline), seven days out, and final days.

That fourteen-day message is the sharpest one, because it's true and homeowners rarely know it. If permitting and installation take ten weeks, the effective deadline to capture an incentive is ten weeks before the policy date. Being the agency that tells homeowners this clearly is both genuinely useful and highly persuasive.

Maintain a simple deadline register per client and per market. When a program changes, you update the date field and every downstream message recalculates. Do not hard-code dates into copy — that way lies a rewrite every quarter across every account.

How do you route leads and appointments across setters?

Speed-to-lead and fair distribution are both routing problems, and GoHighLevel handles them well if you build it deliberately.

Speed-to-lead in seconds, not minutes

The contact-rate decay curve in solar is brutal. Contact attempted inside five minutes converts at multiples of an attempt at thirty minutes. Most agencies know this and still run twenty-minute average response times because response depends on a human noticing.

Build it so it doesn't. On form submission, fire an immediate SMS from the assigned setter's number and simultaneously create a call task with a live notification. The automated SMS buys you the critical first ninety seconds while the setter picks up the phone. The message should be short, human, and question-shaped — a question invites a reply, a statement doesn't.

Then build a call cadence into the workflow: attempt at zero minutes, five minutes, thirty minutes, two hours, next morning, day two, day four, day seven. Seven or eight attempts across a week. Most agencies stop at three, which is where the majority of contactable leads are being abandoned.

Round-robin that respects reality

GoHighLevel's round-robin distribution works, but naive round-robin creates problems in a solar operation. Setters have different working hours, different territories, and different capacity.

Configure round-robin with availability windows so leads don't route to an off-shift setter and sit for eight hours. Segment by territory where the installer operates multiple metros, so the setter who knows Scottsdale utility rates gets Scottsdale leads. Build an unclaimed-lead escalation: if the assigned setter hasn't attempted contact within a defined window, reassign and notify. And handle after-hours explicitly — leads arriving at 10pm should get an immediate automated response acknowledging the enquiry and setting an expectation for the morning, then route into the queue at start of business.

Track set rate and set-to-sat rate per setter, not just in aggregate. Aggregate numbers hide the specific problem worth fixing. If one setter books at 40 percent but sits at 55 percent while another books at 30 percent and sits at 82 percent, the second setter is producing more sat appointments per lead — and you'd never see that without segmented reporting.

What should the pipeline and reporting actually look like?

If the pipeline stages don't map to the metric, the metric can't be measured.

Pipeline stages

A clean solar appointment pipeline runs roughly: New Lead, Contact Attempted, Contacted, Qualified, Appointment Set, Appointment Confirmed, Sat, Proposal Delivered, Closed Won, plus branch stages for No Show, Rescheduled, Disqualified, and Long-Cycle Nurture.

The critical stage is Appointment Confirmed as distinct from Appointment Set. Set means booked. Confirmed means the homeowner actively replied. Splitting these gives you real-time visibility into which appointments are at risk while there's still time to intervene, and it's the foundation of the unconfirmed-risk dashboard.

Sat must be an affirmative action taken by the consultant, never a default. Automate the prompt — a task or SMS to the consultant an hour after the appointment window asking them to mark it — but never let the system assume.

The metrics that go on the client report

Lead-to-set rate, by source and by setter. Set-to-sat rate, headline number, trended monthly. Confirmation-reply rate, which is your leading indicator — it moves before sit rate does. No-show recovery rate. Reschedule rate and reschedule sit rate. Cost per sat appointment, which is the number that makes the argument. Disqualification breakdown by reason, which tells the installer something useful about the leads and tells you where to tighten targeting. And sat-to-close where the installer will share it.

Build this as a GoHighLevel dashboard the installer can log into, and send a monthly summary. The move that changes the relationship is putting cost per sat appointment at the top rather than cost per lead. It reframes the conversation from "your leads are expensive" to "here's what a homeowner sitting at a kitchen table actually costs you, and here's how much we've reduced it."

Case study — how did Helio Demand go from 54 percent to 79 percent?

Helio Demand is a nine-person solar lead-gen agency running paid social and search for residential installers across Phoenix, Tucson, and two Southern California markets. Six people on delivery, two setters shared across accounts, one founder still selling.

Their problem arrived as a retention problem. A Phoenix installer on a $6,500 monthly retainer plus managed ad spend was three months in and unhappy. Helio Demand was hitting the appointment target — 110 to 130 booked appointments a month, comfortably inside the agreed range — but the installer's sales manager kept saying the same thing: "half these appointments aren't real."

When they finally measured it properly, set-to-sat was 54 percent. Of 118 appointments in the prior month, 64 sat. The installer's three consultants had collectively burned something like 180 hours driving to empty houses.

The account was barely breakeven for the installer and about to be cancelled.

What they found

Three things, none of them about lead quality.

First, nothing happened between the set and the sit. One confirmation email fired at booking. That was the entire system. No SMS, no reminder, no reply mechanism. Appointments were routinely booked four to six days out because of consultant availability, meaning a homeowner might hear nothing for most of a week after committing.

Second, qualification was inconsistent. Setters asked about homeownership "usually." Nobody asked about a second decision-maker. Roof questions were ad hoc. Reviewing thirty no-shows, they found four renters, six with an uninvolved spouse, and three who'd told the setter their roof was "pretty old" and were booked anyway.

Third, no-shows went nowhere. Marked no-show, left in the pipeline, occasionally called days later. No sequence at all.

What they built

Two weeks of work in GoHighLevel, no changes to ads, budget, creative, or headcount.

They rebuilt the intake as a four-question multi-step survey with hard gating on homeowner status. Renters routed to a disqualification page and a future-move tag. They added second-decision-maker capture as a required field for setter-booked appointments.

They built the three-touch confirmation cadence — immediate, twenty-four hours, morning-of — each asking for a one-character reply, each carrying a reschedule link, each sent from the setter's name plus the installer's brand. The morning-of message included the consultant's photo and asked the homeowner to have a recent bill handy.

They added the unconfirmed-risk dashboard. Any appointment without a Y reply by 9am on the day surfaced for a live setter call.

They built the same-day rescue sequence: fifteen minutes, two hours, next morning with the satellite roof analysis attached, day three call task, day seven into nurture.

And they made "Sat" an affirmative action, with an automated prompt to the consultant an hour after each appointment window.

What happened

Month one: set-to-sat moved to 68 percent. The confirmation cadence alone did most of that. Confirmation-reply rate landed at 61 percent, and the unconfirmed-risk calls saved fourteen appointments that month.

Month two: 74 percent. The rescue sequence had a full month to run and recovered nine appointments. Qualification gating removed roughly eight unbookable leads from the calendar, which slightly reduced booked volume and materially increased sat volume.

Month three: 79 percent, and holding. Booked appointments actually dropped slightly, to about 112, because the qualification gate was doing its job. Sat appointments went from 64 to 88.

Same ad spend. Same creative. Same two setters. Thirty-eight percent more homeowners at kitchen tables.

Cost per sat appointment fell by roughly a third. The installer's sales manager stopped complaining about lead quality, which is what happens when consultants stop wasting afternoons. The account went from cancellation risk to Helio Demand's most profitable client, and the installer expanded into a second metro two months later.

Helio Demand then did the obvious thing: they saved the whole build as a snapshot and made "the set-to-sat system" the centre of their pitch. Their close rate on new installer prospects went up noticeably, because "we lift the percentage of appointments that actually sit" is a far better offer than "we generate solar leads." Every installer has heard the second one. Almost none have heard the first.

What if you're a solo operator running this alone?

Most of the above assumes a team. Plenty of solar operators are one person with two or three installer clients, doing the media buying, the setting, the reporting, and the client calls. This section is for you, because the set-to-sat lever is more valuable at your scale, not less.

Why it matters more when you're solo

You have no capacity buffer. An agency with six delivery people can absorb inefficiency. You cannot. Every hour you spend chasing a no-show is an hour not spent on the media buying that generates the pipeline.

You also have concentration risk. With three clients, losing one is losing a third of your revenue. Sit rate is the metric most likely to get you fired, which makes it the metric most worth systematising.

And you are almost certainly doing the setting yourself. Which means every no-show is your wasted time in the most literal sense.

Build it in this order

Don't build everything. Build in strict order of return.

Week one — the three confirmation touches. This is 70 percent of the total gain and it's roughly a day of work. Immediate, twenty-four hours, morning-of. Each asking for a reply. Each with a reschedule link. Nothing else.

Week two — homeowner gating and the reschedule link. One required question that stops renters reaching your calendar, and a calendar link in every message. Both are quick.

Week three — the same-day rescue sequence. Fifteen minutes, two hours, next morning. Three messages.

Week four — the unconfirmed dashboard and Sat tracking. A smart list of appointments today without a confirmation reply, and an affirmative Sat field.

Later, when there's room — long-cycle nurture, rebate campaigns, per-setter reporting. Real value, but they don't move the needle the way the first four weeks do.

Snapshot it immediately

The single highest-leverage thing a solo operator can do is save the build as a snapshot the moment client one is working. Not later, not when it's perfect. Now.

The second installer should take an hour to onboard, not a week. That hour-versus-week difference is precisely what determines whether you can grow past three clients without hiring, and it's the difference between running an agency and running yourself into the ground.

Parameterise everything client-specific into custom fields — company name, consultant names, service area, calendar links, incentive deadlines, brand colours — so onboarding is a matter of filling fields, not editing workflows. Every hard-coded value in a workflow is a future hour of your life.

Price on the metric, not the leads

Solo operators consistently undercharge because they sell leads, and leads are a commodity every competitor in Phoenix is also selling.

Sell sat appointments. Lead with the metric. "Most solar campaigns lose 35 to 45 percent of booked appointments to no-shows, which doubles your real cost per consultation. I build the system that gets that into the high seventies." That's a specific, credible, differentiated offer, and it justifies a retainer that a lead-volume pitch never will.

Report on cost per sat appointment monthly. It's the number the installer's finance side actually cares about, and it makes your invoice look like an investment rather than a cost.

What does GHL Spark actually build for solar clients?

We build and manage the GoHighLevel system underneath solar and home-improvement lead-gen agencies. Not the ads, not the setting — the machine that turns leads into sat appointments and turns your account structure into something you can replicate.

The setup, from roughly $1k

A complete, reusable solar snapshot: the multi-step qualification survey with hard gating and full field mapping; the instant speed-to-lead SMS and call cadence; the appointment pipeline with Set, Confirmed, and Sat as distinct stages; the three-touch confirmation cadence with reply capture and reschedule links; the unconfirmed-risk dashboard; the same-day no-show rescue sequence; the reschedule flow with automatic re-arming; disqualification routing with tagged destinations for renters, roof issues, and credit holds; the long-cycle nurture; the rebate and incentive deadline campaign structure with per-market date fields; setter round-robin with availability windows and unclaimed-lead escalation; and the per-client reporting dashboard headlined by set-to-sat and cost per sat.

Two to three weeks from kickoff. Most of it spent on qualification logic and message copy, because that's where the outcome lives.

The retainer, $400 to $1,000 a month

Ongoing management: monitoring set-to-sat and confirmation-reply rates across accounts and flagging drift before the client notices; loading the snapshot into new installer sub-accounts and configuring them, typically an hour each; iterating on confirmation copy and cadence based on actual reply data; maintaining the rebate-deadline register as programs change; adding new sequences as the installer expands services; and handling the ongoing account hygiene that quietly decays when nobody owns it.

You keep the client relationship, the media buying, and the strategy. We keep the build working.

Where should you start?

If you're running solar or home-improvement lead gen on GoHighLevel and you don't currently know your set-to-sat rate to within a couple of points, that's the starting point. Not a new build — a measurement.

Go into your appointment pipeline, take last month, and count how many booked appointments were actually sat. If your data can't answer that cleanly, that's your first finding, and it's a common one. Then work out cost per sat rather than cost per set. For most agencies that number is roughly double what they've been reporting, and seeing it is usually the moment the priorities rearrange themselves.

Then build the three confirmation touches. Just those. One day of work, most of the available gain, and you'll see movement inside two weeks.

If you'd rather not build it yourself — or you want it built once, properly, as a snapshot that loads into every installer account in an hour — that's exactly what we do. A build audit call gets you a clear picture of where your set-to-sat is leaking and what a reusable solar snapshot would include for your specific client mix. If it's a fit, we build it. If not, you'll leave with the map anyway.

Setting the appointment was never the hard part. Getting the homeowner to sit is the whole business.

Book your build audit call →


GHL Spark builds and manages GoHighLevel systems for agencies serving solar installers and home-improvement contractors. We build the system; your clients own their sales process, financing policy, and compliance obligations. This article is informational and is not legal, financial, or regulatory advice.

Frequently asked questions

What is a realistic set-to-sat rate for a solar campaign?
For cold paid-social solar leads booked by a setter, anything in the 50 to 60 percent range is common and painful. A well-built confirmation and rescue system reliably pushes that into the 72 to 82 percent band. Above 85 percent usually means either an unusually warm lead source, a heavy qualification filter that is suppressing volume, or a reporting definition that is quietly excluding reschedules. Whatever your number, the important thing is that you measure it consistently and per client, per setter, and per lead source — the aggregate number hides the problems worth fixing.
Why not just book more appointments instead of chasing sit rate?
Because booking more appointments costs money and lifting sit rate does not. Going from 54 percent to 79 percent set-to-sat is mathematically identical to increasing your appointment volume by roughly 46 percent — except the confirmation sequence is a one-time build that runs for free forever, while the extra appointments require proportionally more ad spend and more setter hours. Sit rate is the only lever in the funnel that improves your unit economics instead of just scaling them.
Should confirmation messages come from the agency, the installer, or the setter?
From a named human associated with the installer, not from the agency and not from a generic brand handle. Homeowners confirm appointments with people, not companies. The pattern that works is the setter's first name plus the installer's company name, sent from a dedicated number provisioned in the sub-account, with replies routed to a conversation the setter actually watches. If the installer has a designated consultant assigned to the appointment, naming that person in the morning-of message adds another measurable few points.
How aggressive can SMS confirmation cadence be before it hurts?
Three confirmation touches before the appointment is the sweet spot — immediately at booking, roughly twenty-four hours out, and the morning of. A fourth touch adds almost nothing and begins generating opt-outs. What matters far more than frequency is that each message asks for an active reply rather than simply informing. A message that says the appointment is confirmed produces silence; a message that asks the homeowner to reply with a single character to confirm produces data you can route on.
What should happen when a homeowner does not reply to any confirmation message?
Treat silence as a risk signal, not as a confirmation. Non-responders should be flagged before the appointment, not after, so the setter can place a live call during the highest contact-rate window rather than discovering the problem when a consultant is parked outside an empty driveway. In practice, tagging unconfirmed appointments and surfacing them on a dedicated dashboard the morning of the consult recovers a meaningful share of appointments that would otherwise have quietly evaporated.
How do you handle leads who are renters or have unsuitable roofs?
Disqualify them inside the booking flow, before a slot is reserved, and route them somewhere useful rather than deleting them. Renters can be tagged and held for a future-move campaign or referred to a community-solar partner if the installer has one. Unsuitable-roof leads are often good candidates for the installer's other services or a re-check campaign timed to a future re-roof. The rule is simple — never let a disqualified lead occupy a consultation slot, and never let a disqualified lead leave your database without a tag.
Does this work for home improvement generally, or only solar?
The structure transfers directly to roofing, windows, HVAC, and bath remodels — any offer with a high ticket, a long consideration cycle, and an in-home consultation where the installer sends a person to a house. The qualification questions change, the confirmation cadence does not. Roofing swaps credit band for insurance-claim status, HVAC swaps roof suitability for system age. Everything about the confirmation, rescue, and reschedule architecture stays identical.
How long does it take GHL Spark to build this in an account?
A first full solar build typically takes two to three weeks from kickoff, most of which is spent on qualification logic and message copy rather than on the mechanics. Once the snapshot exists, loading it into a new installer sub-account and configuring it for that client's service area, calendar, consultant roster, and incentive deadlines takes about an hour. The setup runs from roughly $1k, and ongoing management is $400 to $1,000 per month depending on account count and volume.

About the author

Farhad, founder of GHL Spark

Farhad

Founder, GHL Spark

Farhad is the founder of GHL Spark, where he builds and white-labels GoHighLevel SaaS platforms for agencies and SaaS operators. He writes about the parts of GoHighLevel that actually break in production — A2P registration, onboarding, support load and automation.

Want this handled for you?

We set up, configure and white-label your GoHighLevel SaaS — so you can sell it instead of building it.

Fixed quote · No lock-in · Launch-ready in ~7 days