10kb/gohighlevel-workflows.md

workflows

GoHighLevel workflows: speed-to-lead, nurture, and the stop rule

A GoHighLevel workflow is a named job: catch the hand-raise, nurture a considered offer, route to a human, or clean up the record. It should be short enough to debug at 11pm, with stop rules when they book, buy, or unsubscribe. The Shaz Method installs core speed-to-lead in Setup ($250), then operates workflows on Core ($397/mo) and Growth ($697/mo) inside the account you own. We prefer several clear workflows over one cathedral.

The builder is not the product

“GoHighLevel workflows” is how people name the builder. The product is not the builder. The product is a lead at 9:41pm getting a useful reply, and a quiet Tuesday still getting touch four, and neither of those messages arriving after the person already paid. If your workflow cannot do those three things, it is a diagram.

This page is the builder-level companion to GoHighLevel automations. Automations is the taxonomy of jobs. Workflows is how those jobs should look inside GHL: enrollment, wait steps, if/else, goals, and what we refuse to build. All of it lives in your account, not in a custom CRM.

One job per workflow

Catch workflows enroll from a form, inbound message, or ad-lead delivery. They send SMS + email, tag source/offer, create or update the opportunity, ping a human if needed, and end. They do not also contain a 12-week newsletter. If you need nurture, that is another workflow with another enrollment and its own stops.

Nurture workflows enroll people who were caught and have not booked. They branch. They stop. Copy matches the offer. See follow-up sequences. Routing workflows assign owners and notify. Hygiene workflows handle reviews, stale cards, and compliance. Mixing these is how a stop rule in one branch accidentally silences the catch for everyone.

Name them like files: catch_form_stay, catch_missed_call, nurture_site_visit, route_round_robin, hygiene_review_request. If you cannot say the job in the name, split the workflow. “Master Automation v3” is a smell.

Enrollment, re-enrollment, and the double-text

Enrollment should be a fact: form submitted, tag added, appointment status changed, missed call. Avoid “contact changed” with a dozen filters nobody remembers. Re-enrollment is useful for a new hand-raise and dangerous for a drip that already has wait steps. Decide explicitly. Defaulting to re-enroll on every tag is how someone gets three first texts.

Filters belong at enrollment when they are stable (source, offer). Filters that depend on a human-applied tag will miss. Prefer the form or calendar to apply the tag, then enroll. CRM setup is where those tags are defined so workflows have something true to read.

Test contacts must travel the real enrollment. Cloning a contact and hitting “test” on one action is not a test of the workflow. We submit the form, we book the calendar, we unsubscribe, we book-then-cancel. If the conversation tab does not show the story, it is not shipped.

Wait steps, windows, and time zones

Wait steps are where workflows feel smart and then get stuck. A wait of four days with no goal will keep waiting even if they booked yesterday unless you also have a stop. Goals / exit criteria on booked, closed, unsubscribed, replied-with-intent are not a compliance footnote. They are how the system stays welcome. Longer note: nurture sequences that stop.

Time windows matter for hospitality and travel: a wait until 9am in the wrong zone is an afternoon text. Quiet hours are configured for the country you send in. We do not magically exempt you from carriers. If SMS is the catch, registration and a provisioned number in that sub-account are part of onboarding, not an afterthought.

If/else on custom fields should use fields that are actually filled. An if/else on an empty field is a coin flip. Shorter workflows with fewer branches beat a tree that maps every hypothetical offer you might sell in 2028.

Internal actions vs customer messages

Internal notifications, tasks, and Slack-style pings are for humans. Customer SMS is for the lead. Do not put both in one “send message” that a tired owner forwards. The owner ping should include source, offer, and a link to the contact. The customer text should not include your internal slang.

Pipeline moves belong here as facts: booked, no-show, won, lost. Humans still drag for judgment. See pipelines. Calendar workflows: confirmation, reminders, no-show — separate from catch. See calendars.

  • Named for a single job
  • Enrollment from a fact, not a mystery filter
  • Stop goals on booked / closed / unsubscribed
  • Internal ping separate from customer copy
  • A test contact with a full thread before we call it live

What we install on the ladder

Setup ships the core speed-to-lead workflow and the skeleton that Core can operate: tagging, calendar enrollment, baseline email/SMS path. It is not every workflow you will ever need. Core writes and tends nurture, broadcasts when you have something to say, health-checks wait steps that started hanging. Growth adds missed-call text-back, scoring, chat-to-workflow, ad-event tagging.

Automations rot. A form field renamed, a provider change, a dead thank-you page. Monthly operate is the anti-rot job. If you do not want that job done by us, do not buy a retainer. Keep the workflows; they live in your GHL. Setup is priced to survive a breakup.

What we will not build

A 40-step cathedral that also assigns leads, also runs a 27-email course, also requests reviews, also syncs a spreadsheet. Impressive in a Loom. Undebuggable in production.

Fake-intelligent loops that refuse to connect a person. The first text should be useful and short. It should not interrogate. If a human must speak, say when.

Workflows whose only enrollment is “we will remember to add the tag.” That is human memory with extra clicks. If it is not in a workflow with a stop rule, it is optional, and optional follow-up is no follow-up. That line is the whole method. Follow-up without memory is the essay version.

A worked catch-plus-nurture pair

Form “site-visit” submits. Workflow catch_form_site_visit enrolls. It tags source and offer, sets the opportunity to “hand-raise,” sends SMS (“we got this — pick a time or reply with two days that work”), sends a short email with the same calendar, notifies the owner’s phone, and ends. If they already have a booked appointment, a goal stops it before the SMS. That is the whole catch. Ten actions, not forty.

Workflow nurture_site_visit enrolls when the catch finishes and they are not booked. Day 0 is already handled. Day 1 email: what the visit is, how long, what to have ready. Day 3 SMS: calendar link again. Day 7 email: a real objection you hear (access, price, timing) in your voice. Day 14: owner task if still dark. Stops: booked, closed, unsubscribed, “not now” tag. If they book on day 2, none of the rest should send. If you cannot show that in a test contact, it is not shipped.

That pair is what Setup plus Core is for. Setup gets catch_form live. Core writes and tends nurture_site_visit, and notices when a renamed form field stopped enrollment. Growth points ad leads at the same pair so you do not maintain a third drip called “facebook special.” If you sell stays and visits, you get two pairs, not one cathedral with an if/else for every mood.

Triggers we use, and triggers we avoid

Use: form submitted, inbound webhook from a lead form, appointment status, missed call, tag added by a form or another workflow, payment received when that event is true. Avoid: “contact changed” with a pile of filters, “birthday” as a catch, random date timers that were meant to be a campaign. Birthday and anniversary drips can exist later as hygiene. They are not the catch.

GHL will let you chain wait-until-window, if/else, and custom-code-style steps until the builder looks like a prize. Every extra step is a place to fail silently. Prefer an extra named workflow over an extra nested branch. When we operate monthly, we open the enrollment log, not the screenshot of the canvas. If nobody can explain a step in one sentence, we delete it. If a wait step exists to “feel premium,” it is delay, not craft. Delay is how a five-minute catch becomes an hour.

How to get a workflow install without a tour

Diagnose how a lead moves today. Architect stages and calendars around the real close. Automate catch then nurture. Connect sources. Operate. That order is method.js. Apply for the diagnostic. shaz@shazmethod.com if you already know which workflow is dead and you want it said plainly.

FAQ

What is the first GoHighLevel workflow you build?

Catch: on form or ad-lead delivery, SMS + email from the contact, tags, pipeline, owner ping, stop if they already booked. Nurture is second. Cathedrals are not on the menu.

Can one workflow do catch and nurture together?

We advise against it. Different jobs, different stops, different debug paths. Split them and name them.

Do you use GHL if/else and wait steps?

Yes, sparingly, on fields that are actually filled, with exit criteria. A wait without a stop is how you text people who already paid.

Who owns the workflows if I cancel Core?

You do. They sit in your GoHighLevel account. We are not a black-box login.

How do you keep workflows from rotting?

Core and Growth include a monthly health check and a plain report. Setup alone is the install, not a year of babysitting.

Related: the spec, the leak, why GoHighLevel, pricing, Setup $250, Core, Growth, apply.

apply.sh
$ ./diagnose --business=yours --commitment=none

See where your leads are leaking, before we build anything.

A 20-minute call. I will walk through your current funnel and follow-up — and whether GoHighLevel is already in the house — and tell you honestly whether the Shaz Method is the right fit. We install in GHL. We do not sell a custom CRM.