How to Do GoHighLevel Automations: A Step-by-Step Workflow

Building a GoHighLevel automation means working through five stages in order: define the goal, choose the trigger, build the action sequence, add conditional logic, then test before it ever touches a real lead. Skipping the first stage — a clearly defined goal — is the single most common reason workflows end up messy and hard to maintain.

What follows is the process we actually use when building workflows for clients, not a feature tour of the builder. It applies whether you’re building your first missed-call text-back or a multi-week nurture sequence.

Step one: define the goal before opening the workflow builder

Every workflow should answer one question: what specific outcome does this produce? “Follow up with leads” is not specific enough. “Text a new lead within 60 seconds of form submission, and if there’s no reply in 10 minutes, alert the assigned rep” is specific enough to build.

Write the goal down in one sentence before touching the software. This sentence becomes the workflow’s name and its test case later — if the finished workflow doesn’t clearly satisfy that sentence, it’s not done yet, no matter how many steps are in the canvas.

Step two: choose the right trigger

The trigger has to match the exact moment you want the workflow to start. A common error is triggering on “form submitted” when the real intent is “form submitted AND it’s a specific form,” which requires filtering by form ID rather than using a generic contact-created trigger that would also catch leads from other sources.

Trigger selection checklist

  • Does this trigger fire only for the intended source (specific form, specific calendar, specific pipeline)?
  • Could this trigger fire more than once for the same contact, and if so, is that a problem?
  • Is there a cleaner trigger available, such as a tag applied by an earlier workflow, instead of duplicating filter logic?

For multi-stage funnels, it’s often cleaner to have an earlier workflow apply a tag and have the next workflow trigger off that tag, rather than every workflow re-filtering the same raw event. This keeps each workflow simple and traceable.

Step three: build the action sequence

With the trigger set, add actions in the order the contact should experience them. For a lead response workflow, that typically looks like an immediate SMS, a wait step, a conditional check for a reply, and a branch to either continue nurturing or notify a human.

A working lead-response sequence

Prefer the guided path? This is one lesson from the Go High Level Automations course — get the complete step-by-step system with every lesson and template.
Explore the course →
  • Send SMS immediately: acknowledge the inquiry and set an expectation (“We’ll call you within the hour”)
  • Create a task for the assigned rep with the lead’s details attached
  • Wait 10 minutes
  • If no reply and no call logged: send a second SMS and alert a manager
  • If replied: move the contact to a “responded” pipeline stage and pause automated messaging

Keep each action doing one job. A single action step that tries to send an SMS, update three fields, and fire a webhook is harder to debug than three separate, clearly labeled steps doing the same total work.

Step four: add conditional logic without overcomplicating it

If/else branches are where workflows either become genuinely useful or become unmanageable. The rule we hold to: branch on data you’re already collecting, not on hypothetical scenarios. If you don’t have a way to know whether a lead is residential or commercial, don’t build a branch that assumes you do — collect that data point first (via the form or a qualifying question), then branch on it.

Nested conditions more than two or three levels deep are a signal to split the workflow into two separate workflows connected by a tag, rather than one workflow trying to handle every path. This isn’t just tidiness — a workflow with deep nesting is genuinely harder to troubleshoot when something goes wrong at 11pm and a lead didn’t get a response.

Step five: test before it touches a real lead

Every workflow should run through a test contact — ideally a real phone number and inbox you control — before going live. Watch for three things: the timing matches what you intended (wait steps often behave differently than expected), the message content renders correctly with merge fields filled in (a broken merge field showing “Hi {{contact.first_name}}” in a live text is an easy way to look unprofessional), and the branch logic sends the test contact down the correct path for each scenario you can trigger.

  • Test the happy path (contact behaves as expected)
  • Test the no-response path (contact does nothing)
  • Test the edge case (contact replies with something unexpected, like “STOP” or a question)

Compliance matters here too: confirm that STOP and unsubscribe requests are actually honored by the workflow rather than assumed to be handled elsewhere. This is one of the most consequential things to get right, since ignoring opt-outs creates real legal exposure under SMS and email regulations, not just a bad customer experience.

Publishing and monitoring after launch

Once a workflow is published, the job isn’t finished — it’s just started collecting real data. Check execution history within the first 24 to 48 hours to confirm real contacts are moving through it the way test contacts did. Watch specifically for contacts getting stuck at a wait step or a condition that never resolves either true or false, which usually means the underlying field isn’t being populated the way the logic assumes.

We build a short review into the first week after every new workflow launch, specifically because live contact behavior always surfaces something the test pass didn’t — an unusual name format breaking a merge field, a time zone mismatch delaying a “business hours only” send, or a lead source that doesn’t carry the expected tag.

Iterating without breaking what already works

Once a workflow is live and producing results, changes should be made carefully. Duplicate the workflow before editing a live version so there’s a working fallback if the change introduces a problem, and change one variable at a time — a new message, a different wait time, an added branch — so it’s possible to tell what actually caused a shift in performance.

  • Duplicate before editing live workflows serving active leads
  • Change one variable per iteration
  • Track before/after response rates for at least a week before judging a change

Frequently Asked Questions

How long does it take to build a basic GHL automation?

A simple lead-response workflow with one branch can be built in under an hour once the goal is clearly defined. Multi-stage nurture sequences with several branches typically take a few hours spread across planning, building, and testing.

Should I build workflows from scratch or start from a template?

Templates are a reasonable starting point for structure, but every template needs to be rewritten for the specific business's voice, offer, and timing — a template used untouched almost always reads as generic to the lead receiving it.

What's the most common reason a workflow fails after launch?

A trigger that's slightly too broad or too narrow. Contacts either enter the workflow who shouldn't, or intended contacts never enter it at all, usually traced back to a filter condition that doesn't match real-world data formatting.

Can I test a workflow without sending real messages to my own list?

Yes — use a dedicated test contact record with your own phone number and email so you experience exactly what a lead would receive, without touching any real contacts in the account.

How do I know when a workflow is too complex?

If you can't explain the workflow's logic out loud in under a minute, or if troubleshooting a single contact's path takes more than a few minutes of tracing branches, it's a sign to split the workflow into smaller, connected pieces.

Do I need to rebuild workflows when GHL adds new features?

No, existing workflows keep running as built. New features are worth evaluating for future workflows or targeted upgrades, but there's no requirement to retrofit everything every time the platform adds a capability.

Terry Samuels
Written by Terry Samuels

Terry has 30+ years in software and SEO. He’s the founder of Salterra Digital Services and SEO Spring Training, host of the Roundtable SEO Mastermind, and lead instructor at SEO University — teaching the exact tactics his team uses on client work.

Ready to master this?

This guide is one lesson from the Go High Level Automations course. Get every lesson, framework and checklist — plus the full 38-course catalog — inside SEO University.