Skip to content

Affiliate disclosure

We earn a commission if you sign up through links on this page, at no extra cost to you. It does not change our verdict.

beginner 22 min read

Build Your First GoHighLevel Workflow Automation

Build a real GoHighLevel workflow: triggers, actions, waits, if/else branches, and the speed-to-lead automation every local business should run on day one.

By ·

The steps

  1. Map the loop on paper before you open the builder

    Write the sequence in plain English: what starts it, what happens, what stops it. Five lines maximum. Workflows built without this step become sprawling, undebuggable messes within a month.

  2. Create the workflow and choose one trigger

    In a sub-account go to Automation > Workflows > Create Workflow > Start from Scratch. Add one trigger — Form Submitted is the right first choice. Filter it to a specific form so it does not fire on everything you own.

  3. Send the SMS first, inside 60 seconds

    Add a Send SMS action as the first step, with no wait before it. Write it like a human texting, not a brand broadcasting, and use the {{contact.first_name}} merge field. Speed is the entire point.

  4. Add a Wait step, then an email fallback

    Add Wait > 10 minutes, then Send Email with the same call to action. The wait prevents the text and email landing simultaneously, which reads as automated and kills replies.

  5. Branch on the outcome with If/Else

    Add an If/Else condition checking whether an appointment was booked or the contact replied. If yes, exit the workflow. If no, continue to a second follow-up 24 hours later. Never keep messaging someone who already converted.

  6. Update the pipeline and notify a human

    Add Create/Update Opportunity to move the card into your pipeline, plus an internal notification or task so a person follows up if automation does not close the loop.

  7. Set removal conditions so people can exit

    In workflow settings, configure removal conditions (for example, contact replies or books) and decide whether contacts can re-enter. Skipping this is how businesses end up texting a paying customer a 'still interested?' message.

  8. Publish, test with your own phone, then watch the history

    Toggle from Draft to Publish — an unpublished workflow silently does nothing. Submit your own form with a real number, then open the Execution History tab to watch each step fire and debug what did not.

The workflow builder is the best thing in GoHighLevel. It is also where people build the messes they later abandon the platform over.

The difference between those two outcomes is almost entirely about restraint. This tutorial builds one workflow — the speed-to-lead loop — properly, with the exit conditions and the testing that most tutorials skip.

Step 1: Write it in English first

Open a text file, not the builder. Write the loop:

A lead submits the contact form. Text them within a minute. If they haven’t replied in ten minutes, email them. If they still haven’t booked in 24 hours, text once more. The moment they book or reply, stop everything and tell a human.

Five lines. That is the whole system. If you cannot express your automation in five plain lines, it is too complicated to debug in six months when it misfires and you have forgotten how it works.

This sounds like a formality. It is not. Nearly every unmaintainable workflow started as someone improvising directly in the canvas.

Step 2: One trigger, filtered properly

Automation → Workflows → Create Workflow → Start from Scratch.

Add a trigger: Form Submitted. Then — importantly — filter it to a specific form. An unfiltered trigger fires on every form in the sub-account, which means your roofing lead-magnet workflow will also fire when someone submits your careers application. This is a rite of passage and you should skip it.

Other triggers worth knowing early: Inbound Call (for missed-call text-back), Tag Added (handy for moving people between workflows manually), Appointment Status Changed, and Opportunity Stage Changed.

Step 3: SMS first, and no wait before it

Add Send SMS as the very first action, with nothing in front of it.

Write it like a person:

Hi {{contact.first_name}}, it’s Dana at Northside Dental — saw you just reached out. Were you looking to get booked in this week?

Not like a brand:

Thank you for your inquiry. A representative will contact you shortly.

The first gets replies. The second gets ignored, because it is transparently a robot and it asks for nothing.

Two mechanical notes. Use the {{contact.first_name}} merge field, and confirm it renders — a text that opens with “Hi ,” is worse than no text at all. And keep it short: SMS bills per segment (roughly 160 characters), so a rambling message costs you double and converts worse. Emojis can silently push a message into a second segment by changing its encoding.

Step 4: Wait, then email

Add Wait → 10 minutes, then Send Email.

The wait matters. If the text and the email arrive in the same second, the prospect instantly recognises an automated sequence, and the reply rate drops. Ten minutes reads like a person following up through a second channel.

The email should make the same single ask as the text — book a time — and carry your calendar link. One ask per message.

Step 5: Branch, so you stop talking to people who already said yes

Add an If/Else condition:

  • Condition: appointment booked, or contact replied?
  • Yes → exit the workflow (and optionally add a booked tag).
  • No → Wait 24 hours → send one more SMS → then stop.

This is the step that separates a professional setup from an amateur one. Nothing destroys trust faster than a business that texts “Still interested?” to a customer who booked an appointment yesterday and is sitting in the waiting room.

Also: know when to stop. Two follow-ups and out. A seven-message drip to a cold lead generates unsubscribes, spam complaints, and carrier filtering that damages deliverability for every other message you send.

Step 6: Move the pipeline and tell a human

Add Create/Update Opportunity to drop the lead into your pipeline at “New Lead”, and move it to “Contacted” once the first message goes out.

Then add an internal notification or a task for the owner. Automation is there to handle speed and consistency, not to replace judgement. The highest-converting setups are almost always automation for the first sixty seconds, then a human as soon as one is available.

Step 7: Removal conditions — the setting everyone forgets

Open the workflow Settings tab.

  • Removal conditions: pull the contact out when they reply, book, or get a specific tag.
  • Allow re-entry: decide deliberately. For a lead-magnet workflow, usually no — you do not want the same person running the sequence four times because they downloaded four PDFs.
  • Stop on response: enable it for conversational sequences.

A contact can be in several workflows at once. Without removal conditions, they can receive three messages from three sequences on the same morning, and you will look chaotic.

Step 8: Publish. Then actually test it.

Two things.

Publish it. The toggle at the top says Draft or Publish. An unpublished workflow does absolutely nothing, silently, forever. This is the single most common “why isn’t it working” answer.

Test as a real lead. Submit your own form from your phone with a real number. Then open the Execution History tab — it shows every contact that entered, every step, and exactly where each one stopped. This is your debugger, and it is genuinely good. When something misfires, come here first rather than staring at the canvas.

Check: SMS arrived fast, email landed outside spam, opportunity card created, notification received, and — after you reply to the text — the workflow exited you cleanly.

Where people go wrong after this

Once the first workflow clicks, the temptation is to automate everything at once. Resist it. The agencies that get real value build a small number of workflows they fully understand and maintain. The ones that churn build forty overlapping sequences with no removal conditions, lose track of which one is texting whom, and conclude the platform is chaotic.

Sensible next builds, in order:

  1. Missed-call text-back — the highest-ROI automation available to any business with a phone.
  2. Appointment reminders — 24 hours and 1 hour before, cutting no-shows.
  3. Review requests — fire after an appointment is marked as showed.

Then package the whole set as a snapshot so the next client takes an hour, not a week — see how to install a snapshot.

For what all this messaging actually costs once SMS, email and AI usage stack on top of the subscription, see the pricing breakdown; for a candid take on where the platform frustrates people, the review.

Frequently asked questions

What is the difference between a trigger and an action in GoHighLevel?
A trigger is the event that starts the workflow — a form submission, an inbound call, a tag being added, a pipeline stage change. An action is what the workflow does once it is running — send an SMS, send an email, wait, add a tag, move an opportunity, notify a user. One workflow starts with one or more triggers and then runs a sequence of actions.
Why is my GoHighLevel workflow not firing?
Four usual suspects, in order. One: the workflow is still in Draft and was never published. Two: the trigger filter is too narrow and does not match the contact. Three: A2P 10DLC is not approved, so the SMS action fails even though the workflow ran. Four: a removal condition or an earlier If/Else branch exited the contact before your step. Open Execution History — it shows you exactly which step ran and which did not.
How fast should the first SMS go out?
Immediately — no wait step before it. The value of speed-to-lead decays sharply within minutes, because the prospect is still on your website with their phone in their hand. A text that arrives in 45 seconds while they are still browsing dramatically outperforms the same text an hour later, when they have already filled in two competitors' forms.
Can a contact get stuck in multiple GoHighLevel workflows at once?
Yes, and it is one of the most common ways to embarrass yourself. A contact can sit in several workflows simultaneously and receive overlapping messages. Prevent it with removal conditions, tags that gate entry, and an If/Else check early in each workflow that exits anyone who has already booked or replied.

Try GoHighLevel free for 14 days

Full access to every tool on the plan you pick. No commitment — cancel inside the trial and you are not billed.

Start your free trial

Affiliate link. We earn a commission at no extra cost to you.