Triggers: start conversations, not just reply to them
Fire a first message when a contact hits a specific event — new contact, tag added, etc. Edit, test-fire, delay by days/hours/minutes.
Updated June 26, 2026
Triggers let the agent start conversations, not just respond to them.
They listen for events in your CRM and kick off an outbound message.
Event types
- New contact created — someone just hit your CRM for the first time.
- Tag added — a specific tag got applied to a contact. Much safer
More event types are on the roadmap (opportunity stage changed, form
submitted, etc.) — flag what you need.
Tag picker
When you pick the Tag added event, the tag filter field becomes a
searchable picker sourced from your GHL location's tags. Type to filter,
pick one from the dropdown, or type a new name and hit Enter / click
"Create" to create it in GHL on the spot. Requires thelocations/tags.readonly + locations/tags.write scopes on your
GHL connection — reconnect from Integrations if the picker shows
"missing scope."
Channel
Each trigger picks which channel the agent opens on — SMS, WhatsApp,
Email, etc. The channel must be enabled on the Channels
tab or the message won't send.
Message modes
Fixed message — a pre-written template. Supports merge
fields so you can personalise:
Hi {{contact.first_name|there}}, thanks for reaching out about
{{custom.service_interest|our services}}! {{user.first_name|I}} will
be in touch shortly.
Good for: consistent openers, compliance-sensitive industries, simple
nurture sequences.
AI-generated message — the agent generates the first message using
the system prompt + optional extra instructions:
Greet the new lead warmly, mention that you saw they filled out the form,
and ask what they're looking for. Don't quote prices.
Good for: higher-value leads where a personalised open matters; scenarios
where you want the agent to pull from knowledge + persona (especially
on Advanced agents where the LLM
also has the contact's opportunities in view).
Delay before sending
The delay picker is four separate fields — days, hours, minutes,
seconds — so you can express human-friendly waits without doing
mental math. delaySeconds is stored under the hood; the existing
trigger list renders the total back as something readable like2d 4h on the card.
Useful for:
- Lead form follow-up — wait 2 minutes so it feels human, not bot-fast
- Tag-added nurture — wait 1 hour so humans have first dibs
- Overnight capture — wait 8h so form submissions at 11pm don't
text at 11:02pm
Working hours still apply on top — if the scheduled send-time lands
outside your window, it bumps to the next open slot.
Editing a trigger
Every trigger card has Edit, Test fire, and Delete buttons.
Clicking Edit loads the trigger's values into the same form you created
it with — change the event, swap the channel, rewrite the message,
adjust the delay — then Save Changes. Nothing else about the agent
changes; edits are atomic to that one trigger.
Test-firing a trigger
The Test fire button on each card opens a mini panel where you can
paste a contact ID, phone, or email and fire the trigger against that
specific contact. The message actually sends — use a contact you own.
The test fire path skips the 60-second per-contact dedupe so you can
re-fire repeatedly while QA'ing.
Use this to verify:
- Fixed-mode merge fields render the way you expect
- AI mode produces a sensible opener
- Tag filters actually match (test a contact with and without the tag)
- Delay handling — test-fire triggers bypass working hours, so a
weekend test still fires
Working hours + triggers
Real triggers respect working hours — if
the trigger fires outside your window, it's held until the window
opens. Inbound replies ignore working hours; triggers are outbound
and DO respect them. Test-fire is the exception — it fires now
regardless.
GoHighLevel webhook subscription
Triggers listen for webhook events from your connected GHL marketplace
app. If Test Fire works but real-event triggers don't, the most common
cause is that the marketplace app isn't subscribed to the matching
event. You need both ContactCreate AND ContactTagUpdate in the
subscribed events list.
Design tips
- One trigger per distinct outbound scenario. Don't try to make one
- Prefer Tag added over New Contact Created. Unless you really do
- Start fixed, upgrade to AI-generated. Fixed openers are predictable
- Watch for trigger storms. If you mass-upload 5000 contacts with a