GoHighLevel Automation for Water Treatment Companies
One of our highest-spend water-treatment clients was sitting at $109 cost-per-lead when we took over the account. Eight weeks later they were at $15. The ad creative did about 30% of the work. The GoHighLevel rebuild did the other 70%.
Here's the exact setup.
The 5 pipelines every water-treatment GHL needs
Most dealers run one giant pipeline with 15 stages. Wrong move. You want 5 separate pipelines, each tuned for a different lead source or stage:
- Cold Lead Pipeline — fresh form fills from paid ads. Stages: New → Contacted → Booked → Showed → Closed/Lost.
- Referral Pipeline — leads from plumbers, inspectors, well drillers. Routed to a different sub-account if you have a referral partner program.
- Reactivation Pipeline — dormant leads from past 18 months. Separate pipeline because they need a totally different message.
- Post-Sale Pipeline — for upsells (UV add-on, salt delivery, annual service).
- Dead Lead Pipeline — leads that explicitly said no. Quarterly reactivation campaign hits this one.
The 3 custom fields most dealers skip
GHL ships with name, email, phone. You need three more on every lead:
water_source— City water vs. well water. Determines which sales script the rep uses. Captured in the quiz form.family_size— Solo vs. 2 vs. 3+. Determines product recommendation (whole-home vs. point-of-use).lead_source— Which campaign/landing page the lead came from. Critical for ROAS tracking. Auto-populated via UTM parameters.
These three fields alone will lift your close rate by 15-25% because reps walk into appointments already knowing how to position.
The speed-to-lead workflow
This is the workflow that makes the entire system work. Fires the moment a form is submitted:
- 0 seconds: Send confirmation SMS — "Hey [first_name], got your water test request. We'll text you in the next 60 seconds to confirm your slot."
- 10 seconds: AI WhatsApp/SMS conversation kicks in (in Spanish if the lead's phone area code maps to a Spanish-speaking market). Confirms availability from a pre-defined list of 6 time windows.
- 2 minutes: If no lead response, ping the human setter in Slack with a one-tap-to-call button.
- 5 minutes: Setter calls. If no answer, schedule a callback at the next 2-hour window.
- 2 hours: Second SMS — "Still want that water test? Reply YES for tomorrow at 10am, 2pm, or 6pm."
- 24 hours: Email with a value-add (link to a "5 things in your tap water" article).
- 72 hours: Last-touch SMS, then move to Dead Lead pipeline.
The appointment confirmation workflow
Most no-shows are not "the lead changed their mind." They're "the rep forgot to confirm." Fix it with this:
- 24h before: SMS with rep's name + photo, confirms time and address.
- 2h before: Another SMS — "Reply YES to confirm we're still on."
- 15 min before: Internal Slack alert to the rep with the lead's quiz answers + photo of the home from Street View.
Confirmed-appointment SMS sequences alone reduce no-show rate from ~35% (industry standard) to ~12% (our average).
The post-call workflow
Rep finishes the call, marks the opportunity status in GHL. The workflow branches:
- Status = Won → Move to Post-Sale pipeline, schedule 30-day check-in SMS, schedule 90-day Google review request, add to referral request list.
- Status = Lost (price) → Schedule 60-day reactivation with a financing-focused message.
- Status = Lost (timing) → Schedule 90-day reactivation with a seasonal trigger ("Now that summer's coming...").
- Status = Lost (no decision) → Schedule 14-day reactivation with a urgency offer.
This is how a $2M dealer becomes a $5M dealer without spending more on ads. The same leads, worked correctly over 12 months, double the closed revenue.
The GoHighLevel API quirks that bite
Things we learned the hard way running GHL across 13 client accounts:
- Email API requires
editorType+editorContent, nottype+html. The docs are wrong. - Pipeline stage updates don't fire workflow triggers unless you explicitly check "Re-trigger on stage change" in the workflow settings.
- Opportunity "Won" status filters by
updatedAt, notclosedAt. So if you don't move deals to "Won" promptly, they fall off your monthly report. - SMS open rates are not tracked — only delivery and reply. Don't waste time optimizing for opens.
The dashboard layer
GHL's native reporting is OK for a single account. Across multiple clients, it falls apart. We built a custom Flask dashboard that pulls live data from every client's GHL via API and surfaces the metrics that matter: pipeline velocity, CPL by source, no-show rate, won-rate by rep.
The dashboard is what catches the issues before they become $109 CPL emergencies. If a client's no-show rate drifts above 20% for 3 days in a row, we get an automated Slack alert. Same for CPL above target, pipeline stuck at "Booked", or volume drop.
What to do first if you're starting from scratch
- Spin up a GHL sub-account. $97/mo Starter plan is enough.
- Build the Cold Lead Pipeline first. Just 5 stages: New, Contacted, Booked, Showed, Won/Lost.
- Add the 3 custom fields (
water_source,family_size,lead_source). - Build the speed-to-lead workflow. Even a half-built one beats no automation.
- Connect Twilio for SMS + WhatsApp Business API.
- Embed the GHL form on your landing page as a 4-step quiz, never a flat form.
You'll have the bones of a $15 CPL system in 7 days. The optimization comes later. The discipline of running it daily is what compounds.
Want this GHL setup installed for you?
The Build package includes a full GoHighLevel pipeline build — all 5 pipelines, custom fields, every workflow above, and team training.
See the Packages →