GoHighLevel Triggers Explained: Which One to Use in Each Situation

Intermediate7 min readUpdated on 08/03/2026

Triggers are the starting point of every workflow in GoHighLevel. Choosing the wrong one is one of the most common reasons automations fail silently — the workflow exists, but nothing ever fires. This guide breaks down the most important trigger types available in the platform, explains how each one works, and helps you decide which to use based on your actual use case.

What Is a Trigger in GoHighLevel?

In GoHighLevel, a trigger is the event that tells a workflow to start. Without a valid trigger condition being met, no action inside the workflow will ever execute — regardless of how well the rest of the automation is built.

Triggers are configured inside Automation → Workflows, at the top of each workflow builder. You click Add New Trigger, select a trigger type, and then configure filters to narrow down when it should fire.

Each trigger belongs to a category (Contact, Appointment, Opportunity, Form, etc.), and many of them share similar names but behave differently depending on context. Understanding these differences saves significant debugging time.

The Most Common Trigger Types and When to Use Them

Contact-Based Triggers

These are the most frequently used triggers and are appropriate when the automation should respond to something happening at the contact level.

  • Contact Created: Fires when a new contact is added to the CRM — whether manually, via import, or through an integration. Use this when you want to start an onboarding sequence for every new lead, regardless of source.
  • Contact Tag Added: Fires when a specific tag is applied to a contact. This is one of the most flexible triggers in the platform because tags can be added by other workflows, manually by users, or via Zapier/API. Use it to chain automations together or to segment follow-up sequences.
  • Contact Tag Removed: The inverse of the above. Useful for stopping sequences or switching a contact to a different funnel stage.
  • Contact DND (Do Not Disturb) Status Changed: Fires when a contact's DND status is updated. Use this for compliance workflows or to pause messaging sequences automatically.

Form and Survey Triggers

  • Form Submitted: Fires when a contact submits a GoHighLevel-native form. Note that this trigger only works with forms built inside GoHighLevel. If you're using an external form tool (Typeform, Gravity Forms, etc.), you'll need a different approach — typically a webhook or a Zapier integration — and this trigger will not fire.
  • Survey Submitted: Same behavior, but for native GoHighLevel surveys.

If your team relies heavily on third-party form tools, GoHighLevel's native form triggers may not be the right fit for your stack.

Appointment Triggers

  • Appointment Status: Fires when an appointment's status changes (e.g., confirmed, cancelled, showed, no-showed). Use this to send reminder sequences, post-appointment follow-ups, or no-show re-booking campaigns.
  • Appointment Created: Fires at the moment a booking is made. This is the right trigger for immediate confirmation messages.

A common confusion: Appointment Created and Appointment Status with a "Confirmed" filter can both seem equivalent, but they are not. A confirmed status may be set automatically or manually at different points in time — test your specific calendar setup before relying on either.

Opportunity Triggers

  • Opportunity Status Changed: Fires when an opportunity moves to a different stage or status (won, lost, open). Use for deal-closing sequences, churn prevention, or sales team notifications.
  • Opportunity Created: Fires when a new opportunity is created in the pipeline. Useful for kicking off sales follow-up sequences automatically.
  • Opportunity Stage Changed: Fires when an opportunity moves between pipeline stages specifically. Use this when your automations are tightly coupled to your sales pipeline stages.

Inbound Message and Communication Triggers

  • Inbound Message: Fires when a contact sends a message via SMS, email, Facebook Messenger, Instagram DM, or other connected channels. Use this to trigger keyword-based responses or to notify team members of new inbound messages.
  • Email Events (Opened, Clicked, Unsubscribed): Fires based on email engagement. These are useful for lead scoring or re-engagement sequences, but deliverability data is not always 100% reliable — open rates in particular are affected by Apple Mail Privacy Protection and similar features.

Webhook and API Triggers

  • Inbound Webhook: Fires when an external system sends a POST request to a unique GoHighLevel webhook URL. This is the most powerful and flexible trigger if you're integrating with tools outside the GoHighLevel ecosystem. The trigger can receive custom data and map it to contact fields or workflow actions.

If you're connecting GoHighLevel to tools like Stripe, Calendly, or custom apps, the Inbound Webhook trigger is usually the correct choice.

How to Configure Trigger Filters Correctly

Most triggers support filters — conditions that must be true for the workflow to execute. Filters are critical for preventing workflows from firing on every contact in your account.

  1. After selecting a trigger type, look for the Add Filters option below the trigger card.
  2. Choose a filter attribute (e.g., Tag, Pipeline, Contact Source).
  3. Set the operator (equals, contains, is not, etc.) and the value.
  4. If you add multiple filters, confirm whether they use AND or OR logic — this varies by trigger type and affects behavior significantly.
  5. Save the trigger and test it using a real or duplicate contact before activating the workflow.

Always test in a draft or controlled environment. GoHighLevel does not provide a native sandbox mode on most plans, so use test contacts with placeholder information.

Common Errors and Troubleshooting

Workflow never fires after setup The most common cause is that the trigger condition is never actually met. Check whether the event you expect (tag added, form submitted, etc.) is happening at all by reviewing the contact's activity log or the workflow's Execution Logs.

Duplicate workflow executions This happens when a trigger fires multiple times for the same contact (e.g., a tag is added and removed repeatedly). Use the Allow Re-entry setting carefully — disable it if the workflow should only run once per contact.

Form Submitted trigger not firing Almost always caused by using an external form instead of a native GoHighLevel form. Verify the form is built inside Sites → Forms and embedded using the GoHighLevel embed code, not an iframe from another tool.

Appointment trigger fires at the wrong time Calendar and appointment trigger timing depends on your calendar settings (auto-confirm vs. manual confirm). Review your Calendar Settings inside each calendar configuration and match your trigger logic accordingly.

Contact Created trigger fires for existing contacts If you are re-importing contacts or updating them via API without checking for duplicates, GoHighLevel may create new contact records, firing the trigger unintentionally. Use the deduplication settings in your import process.

Choosing the Right Trigger: A Quick Reference

| Situation | Recommended Trigger | |---|---| | New lead from any source | Contact Created | | Lead submits a GoHighLevel form | Form Submitted | | Lead submits an external form | Inbound Webhook | | Appointment booked | Appointment Created | | No-show follow-up | Appointment Status (no-show filter) | | Pipeline stage changes | Opportunity Stage Changed | | Keyword reply from contact | Inbound Message | | Trigger from another workflow | Contact Tag Added | | External system event | Inbound Webhook |

Understanding triggers at this level will prevent the majority of automation failures in GoHighLevel. When in doubt, start with the Execution Logs — they show exactly when a workflow fired, why it did or did not continue, and what data was passed through the trigger.

Still stuck?

If this walkthrough did not solve your case, describe your exact scenario. Every question we receive becomes a new tutorial here.

Send my question