SOLAR AND ROOFING
A sales lifecycle on paper, now running inside GHL.
A home-services company selling solar, roofing and battery backup, with GHL calendars nobody used, bookings going through a separate tool, and a pipeline that only moved when a rep dragged a card.
The problem
What was going wrong
Website bookings went through Calendly while the GHL calendars sat unused, so appointments lived in two places. No reminders went out. Reps moved deals across the pipeline by hand with no exit rules, the AI assistant had barely been trained, and there were no funnels.
The company already knew how it wanted leads handled. It had a detailed internal blueprint covering company-generated and self-generated leads, nurture timing, appointment steps and catch-all re-engagement. None of it existed in the account.
What I built
The system, piece by piece
An audit, then a blueprint a second builder could follow
The website and GHL account were audited first and the gaps written up in a report. The client's internal blueprint was then decoded into a flow diagram and a plain-English build checklist, so a colleague could build inside the account without needing the logic explained live.
Around nineteen numbered workflows
Lead intake for both company and self-generated leads, with one multi-rep form and a dropdown instead of a separate form per rep. A no-reply nurture with send-time rules so texts never go out late in the evening. Confirmations and reminders, including a tentative path for same-day and next-day bookings that an admin confirms by hand. No-show recovery.
A post-appointment survey that can stop the machine
After each appointment the homeowner is surveyed. A good result continues the journey. A bad result halts every automation on that contact and alerts a manager. Time-based routing moves older leads into two catch-all pipelines, a global router handles opt-outs, purchases hand off to operations, and review alerts flag positive and negative feedback.
An SMS AI assistant with hard limits
The assistant collects roof age and type, homeownership, shading and average utility bill, and never discusses pricing or quotes a figure. Upset customers, insurance questions and anyone asking for a person are handed straight to the team.
Reasoning
Why it was built this way
Why appointment status lives in one place only
It is tempting to track appointment state in custom fields as well as in GHL's native appointment status. Two sources of truth drift apart, and workflows then fire on the wrong one. Status stays native, and a helper workflow keeps the pipeline in sync when reps drag cards on the board.
Why reminders are timed from the appointment, not the clock
A fixed-time "morning of" reminder can fire after a same-day appointment has already happened. Waits are measured relative to the appointment instead. Workflow conditions in GHL also follow the account timezone rather than the contact's, so the account timezone was set deliberately and every rule written against it.
What changed
The result
The lead lifecycle the company had on paper now runs from one GHL account: bookings, reminders, follow-up and re-engagement follow its own rules, and a bad appointment stops automation and brings in a person instead of sending another text.
Described in terms of what the system does. No performance figures are published here, because none have been independently verified.
Next Step
Recognise any of this in your setup?
Every project starts with an audit of what you already have, sent to you in writing before any building starts.