Automation triggers
The trigger is the event that starts an automation. It’s the only step allowed at the top of the flow, and an automation without one won’t save.
There are five, grouped by subject in the Triggers tab of the palette:
| Trigger | Starts when… | Section |
|---|---|---|
| Conversation event | the conversation changes state | Conversations |
| Idle conversation | nobody replies after your team’s last message | Conversations |
| Contact tag | a tag is applied to or removed from the contact | Contacts |
| Contact added to list | a contact joins a list | Contacts |
| Audience | the scheduled date arrives, for a whole segment | Campaigns |
Don’t confuse these with channel triggers. Those are the doors conversations come in through (WhatsApp, website, Telegram). These are the events that start an automation.
Conversation event
Section titled “Conversation event”
You pick which events count, and each one fires on its own, once per conversation:

| Event | When it happens |
|---|---|
| is created | the conversation is born |
| is assigned to someone | a teammate becomes responsible |
| is transferred | the conversation changes hands |
| is handed to an agent | an AI agent takes over |
| is resolved | the conversation is closed |
| is reopened | a resolved conversation goes back to open |
| has AI turned on or off | someone toggles AI on that conversation |
Careful with “is created”. At that instant the conversation has no tags and no assignee — filters on those fields will never match there.
Idle conversation
Section titled “Idle conversation”This is the follow-up trigger. It sweeps stalled conversations and enters the ones that hit the threshold you set:

What it counts is the silence after your team’s last message. While the customer was the last one to speak, the conversation doesn’t enter — the reply is owed by you, and a bot writing over that is exactly what nobody wants.
The safeguards
Section titled “The safeguards”
- Give up after a while (maximum age of the silence) — past that limit the conversation counts as lost and the automation stops entering. At 7 days, someone who went quiet 3 days ago gets the follow-up and someone who vanished 2 weeks ago doesn’t. This is what holds back a blast into old history on the day you turn the automation on.
- Wait before entering again (cooldown) — once the automation finishes on a conversation, it can only re-enter that conversation after this period, including when it ended by cancellation. It’s what stops the same person being nudged over and over.
Both start off. On a sequence going out to many people, turning both on is almost always the right call.
Filters: which conversations get in
Section titled “Filters: which conversations get in”Both Conversation event and Idle conversation accept filters, and they read as a written-out condition. Click Add filter and pick the criterion:

| Criterion | What it narrows |
|---|---|
| Inbox | the inbox the conversation is in |
| Conversation owner | who owns it right now — a teammate or an AI agent. “Nobody” catches what’s in the queue |
| Conversation tag | the tags on that exchange |
| Contact tag | the tags on the person’s record |
| Channel | how the conversation came in |
| Conversation AI | whether AI is answering, or a human is |
Once chosen, the criterion turns into a sentence with the right verb for that subject — “has” / “doesn’t have” for tags, “came in via” / “didn’t come in via” for channel:

Two rules apply to all of them:
- Filters add up. The conversation has to match all of them at once. With no filters, it applies to any conversation.
- A condition with no value won’t save. A filter with a criterion and no value filters nothing, and SquadOS refuses to save it rather than letting it slip by silently.
Contact tag
Section titled “Contact tag”
Fires when a tag goes on or off the person’s record. You choose which of the two (Added or Removed) and, if you want, restrict it to specific tags — leaving it empty means any tag.
A tag applied by another automation counts too. The Apply tag step fires this trigger exactly like someone tagging on screen. That’s how you chain automations — and how you create a loop by accident, if two automations tag each other’s trigger.
Contact added to list
Section titled “Contact added to list”
Fires when someone joins a contact list, however they got there: import, form or the public lists API. Someone already subscribed doesn’t fire it again.
It’s the only trigger that hands incoming data to the flow: the list name, its identifier and the consent source are available as variables (see Variables).
Audience
Section titled “Audience”
This is the campaign trigger: instead of reacting to an event, it walks an entire list on the scheduled date and makes each contact enter once.
- The list is required. Without it the campaign would go out to every contact in the organization, and SquadOS refuses to save.
- Tags are an optional narrowing inside the list.
- The list is read at send time — whoever is in it at that moment takes part, not whoever was in it when the campaign was created.
Scheduling lives in the When it sends band:

It can be once, at a set date and time, or recurring (daily or weekly, at a given hour). In recurring mode the next round schedules itself when the current one finishes. The time is always read in your organization’s time zone.
A time in the past won’t save. Saving a campaign set to a moment that already passed would fire the whole list immediately — SquadOS treats that as an error, not a shortcut.
More than one trigger in the same automation
Section titled “More than one trigger in the same automation”An automation can have several triggers leading into the same flow — for example, starting both on “conversation resolved” and on “post-sale tag applied”.
Two things change when you do that:
- Triggers can’t overlap. If two of them answer to exactly the same events, the automation would run twice for one event — SquadOS asks you to narrow one of them (by inbox, tag or list) or remove one.
- Steps only see what every path delivers. Contact tag identifies a contact but not a conversation; Conversation event delivers both. Wired into the same step, what’s left is the contact — and a conversation variable stops being valid there. The fix is to give one of the triggers its own path, or to use the Get the contact’s conversation step first. This is covered in Variables.