Triggers
A trigger is the node that starts a workflow run. It decides when the workflow runs and what data the run starts with.
This section covers each built-in trigger and the connector event triggers in detail. For a short categorised list, see Nodes → Triggers.
Pages in this section
| Trigger | When to use |
|---|---|
| Manual & test runs | Development, ad-hoc runs, and runs started from your own code through the Flero API |
| Webhook trigger | An external system sends an HTTP request to Flero |
| Schedule trigger | Time-based runs: every N minutes, or on a cron expression |
| Form trigger | A person fills in a hosted form |
| Chat trigger | Typing messages to a workflow from a chat panel in the editor |
| Connector event triggers | Something happens in a connected service: a Granola note, a Slack message, a new Databricks job run |
Choosing a trigger
| Question | Trigger |
|---|---|
| "An external system needs to push events to me." | Webhook, or a connector event trigger if the service has one |
| "I want this to run on a schedule." | Schedule |
| "A person starts it by filling in a form." | Form |
| "I call it from code I control." | Manual / API |
| "An LLM agent calls it as a tool." | MCP trigger |
| "I want to chat with an AI workflow while I build it." | Chat |
| "React to runs or metrics in my own Flero workspace." | Platform triggers (admins only) |
Turning a trigger on
Webhook, schedule, form and connector triggers only fire for active workflows.
- Save the workflow.
- In the editor toolbar, open the version menu and set the workflow to Active.
- Triggers now run the active version of the workflow.
When you edit an active workflow, your edits are saved as a new version. Set that version active when you want triggers to use it. Setting the workflow to Inactive stops its webhook, schedule, form and connector triggers.
Manual runs from the editor work in any state. See Running a workflow.
What a trigger passes to the workflow
Every run has trigger data, available as $trigger in expressions. Its shape depends on the trigger:
| Started by | Useful fields |
|---|---|
| Webhook | $trigger.payload (the body), $trigger.headers, $trigger.query, $trigger.method, $trigger.path |
| Schedule | $trigger.triggeredBy (scheduler), $trigger.triggerTime, plus every key of the trigger's Payload setting |
| Form | $trigger.payload (the submitted values) |
| Connector push trigger | Read the trigger node's output, for example {{ $node["Granola Trigger"].output.note_id }} |
| Connector polling trigger | Read the trigger node's output. $trigger.pollTime and $trigger.itemCount describe the poll |
When a run has no trigger data, $trigger is empty. See Referencing data.
Related
- Core concepts → Workflows
- Nodes → Triggers: short reference
- Credentials & connectors
Found something out of date? This page lives in the Flero docs content set.