GoHighLevel Workflows: The 7 Triggers You'll Use Most (And How to Configure Them Right)
A practical guide to the GoHighLevel workflow triggers that power 90% of production automations — what each one does, when to use it, and the configuration gotchas most people miss.
Haroon Mohamed
AI Automation & Lead Generation
Most GoHighLevel users under-use the trigger library
GoHighLevel has 40+ workflow triggers. Most users discover 5 of them, build everything on those 5, and hit walls they don't realize exist.
The seven triggers below power the majority of production automation in solar, real estate, B2B, and local business deployments. Learning these well will let you build workflows that most operators can't.
1. Contact Created
What it does: Fires when a new contact enters GoHighLevel from any source.
Best for: The universal "welcome" entry point for any lead.
Configuration gotchas:
- You usually want to filter by source (which form/campaign created the contact) — otherwise every contact triggers every workflow
- If you're importing leads via CSV, this trigger fires for each row — which can spam automated welcome messages to old contacts
- Always add a filter condition: e.g., "Tag is X" or "Source is Y" to scope the trigger
Practical pattern: Use this trigger once per campaign type, with clear source filtering. E.g., one workflow for solar campaign, one for roofing, etc.
2. Form Submitted
What it does: Fires when a specific GHL form (or funnel form) is submitted.
Best for: Immediate post-submission actions — confirmation email, SMS auto-reply, internal notification, CRM lead-source tagging.
Configuration gotchas:
- Works only for native GHL forms. Third-party forms (Typeform, Gravity Forms, JotForm) need to POST via webhook instead.
- If the same form appears on multiple funnels, you can filter by funnel to route differently.
- "Quick Form" submissions (the minimalist GHL embed) behave slightly differently — verify before relying on the trigger.
Practical pattern: Use Form Submitted instead of Contact Created when you want one specific form's submissions to trigger a unique sequence — more precise targeting, less filter logic needed.
3. Pipeline Stage Changed
What it does: Fires when a lead moves from one pipeline stage to another.
Best for: Stage-specific automations — send different follow-up sequences depending on where a lead is in your sales process.
Configuration gotchas:
- You can scope to specific pipelines and stages, or leave it broad. Broad is almost always the wrong choice.
- The trigger fires on ANY stage change, including backward moves. If you're sending welcomes, filter by direction (entering a specific stage) not by the event itself.
- If automations move the lead between stages, you can create infinite loops. Always test carefully.
Practical pattern: One workflow per meaningful stage transition. "Lead enters Qualified" has different logic than "Lead enters Proposal Sent." Don't combine into one mega-workflow.
4. Appointment Booked / Confirmed / Cancelled
What it does: Fires on calendar events — when an appointment is created, confirmed, or cancelled.
Best for: Pre-appointment nurture, confirmation messages, no-show recovery.
Configuration gotchas:
- Each event (booked, confirmed, cancelled) is a separate trigger. If you want workflows for all three, build three workflows.
- If you're using an external calendar (Calendly connected), GoHighLevel still fires these triggers via the integration, but there's a 1–3 minute delay.
- Rescheduled appointments fire Cancelled then Booked in rapid succession. Your workflows need to handle this — otherwise you'll spam "cancellation" messages to leads who just rescheduled.
Practical pattern: Build a 3-message pre-appointment sequence: 24hr reminder, 2hr reminder, 30min reminder. All triggered by "Appointment Booked" with delays.
5. Tag Added / Removed
What it does: Fires when a specific tag is applied to or removed from a contact.
Best for: Cross-workflow handoffs, manual triggers by your sales team, conditional routing.
Configuration gotchas:
- Tag name case matters in some older GHL builds. Always use consistent naming.
- Removing a tag fires a different trigger than adding one. Don't confuse them.
- Tags are the best way to build a "state machine" across multiple workflows. Use liberally.
Practical pattern: Use tags as the connective tissue between workflows. Workflow A completes → applies tag "hot-lead" → Workflow B starts. This is cleaner than monolithic workflows.
6. SMS / Email Reply Received
What it does: Fires when a contact replies to an SMS or email from your system.
Best for: Pausing sequences, escalating to human team, detecting intent.
Configuration gotchas:
- "Reply Received" fires on ANY inbound message from a contact, including STOP requests, voice messages, and unrelated messages.
- You'll want a sub-filter: parse the reply for specific keywords ("yes", "stop", "call me") to branch accordingly.
- STOP/UNSUBSCRIBE is handled automatically by GHL — you don't need to build unsubscribe logic. But you DO need to make sure your workflow stops if someone replies with context beyond STOP ("please stop calling me").
Practical pattern: Every outbound sequence should include a "Reply Received → Pause Sequence → Alert Human" branch. Prevents your AI sequence from talking over a human who's trying to engage.
7. Inbound Webhook
What it does: Fires when an external system POSTs data to a GHL-generated URL.
Best for: Integrating any external tool that GHL doesn't natively support. VAPI call events. Custom form builders. Stripe events. Calendar integrations.
Configuration gotchas:
- The webhook URL is specific to the workflow. Copy it from the trigger config, paste into your external system.
- GHL parses the incoming JSON and makes fields available to downstream actions. Test with real data before going live — the field names matter.
- Security: GHL webhook URLs aren't signed. Anyone with the URL can POST to your workflow. Keep these URLs secret, and validate expected fields in the workflow to reject garbage.
Practical pattern: This is the trigger that unlocks everything. Any SaaS tool with outbound webhooks can drive a GHL workflow — making GHL the orchestrator of a much bigger automation stack than its native integrations suggest.
Combining triggers for real-world workflows
Most production workflows use these triggers in combination:
Example: Solar lead nurture
- Form Submitted (specific form) → welcome SMS + email
- Contact Created (with solar tag) → added to AI calling campaign
- Inbound Webhook (from VAPI) → move to Stage 4 or Stage 8 based on call outcome
- Pipeline Stage Changed (entering "Appointment Booked") → confirmation + pre-appointment sequence
- Reply Received → pause all sequences, alert sales team
That's five triggers cooperating across the lead's journey — each handling a specific moment.
The triggers most people over-use
Contact Updated — fires on any field change. Very noisy. Only use when you need to react to a specific field change, and always filter aggressively.
Opportunity Stage Changed — redundant with Pipeline Stage Changed. Pick one and use it consistently.
Note Added — rarely what you actually want. Usually overkill.
The triggers most people under-use
Call Status — fires when a call's outcome is set (answered, voicemail, no-answer). Essential for AI calling integration but often overlooked.
Payment Received — for businesses that sell directly, this should fire a full onboarding workflow. Many operators fail to build this.
Task Created — if you're managing a sales team via tasks, this can drive internal notifications and accountability.
Best practices across all triggers
-
Always add a filter condition. Even if it's just "Tag is X" — this keeps workflows scoped and prevents cross-contamination.
-
Test with a real contact before going live. Create a test contact, run it through the workflow, verify every step.
-
Name workflows clearly. "Solar — Post-Form Welcome + AI Call Handoff" beats "Workflow 47."
-
Document in the workflow description. Explain what the workflow does. Six months from now, you'll thank yourself.
-
Set goals on workflows. A workflow goal stops the workflow when a condition is met (e.g., contact books an appointment). Without goals, you'll send messages to leads who already converted.
-
Use the test simulator. GHL lets you step through a workflow with a sample contact. Use it.
Sources
All trigger descriptions are based on GoHighLevel's current workflow builder as of April 2026 (gohighlevel.com documentation + in-product trigger list). GHL ships feature updates frequently — verify specific triggers exist in your tier before planning around them.
Want help architecting a multi-workflow system for your operation? Let's talk — most operators benefit from a workflow audit before adding more.
Need This Built?
Ready to implement this for your business?
Everything in this article reflects real systems I've built and operated. Let's talk about yours.
Haroon Mohamed
Full-stack automation, AI, and lead generation specialist. 2+ years running 13+ concurrent client campaigns using GoHighLevel, multiple AI voice providers, Zapier, APIs, and custom data pipelines. Founder of HMX Zone.
Related articles
Team Capacity Automation: How to Auto-Assign Tasks Based on Workload
In small teams, task assignment is informal. The manager knows who's busy and who isn't. New tasks go to whoever has bandwidth. Things mostly balance. This stops working around 6-10 people. The manag…
Subscription Cancellation Automation: The Win-Back Sequences That Save Revenue
When a customer cancels, most operators treat it as a transactional event: process the cancellation, refund if needed, move on. The customer disappears from active rolls. Done. This is leaving substa…