Triggers: what starts a flow
The five ways a flow starts — by hand, on an event in a Monfri service or another app, on a webhook, on a schedule, or by checking an app for new records — with how to set each one up and the data it hands to the steps.
Every flow has exactly one trigger, at the top. Click it, then pick the Trigger Type; the step library's Triggers section does the same.
Manual
The flow runs only when someone clicks Run or Run now. Good for flows you start yourself, and for trying a flow out. Manual triggers start when you click Run.
App event (CRM, Push, …)
The flow starts when something happens in an app. Pick the App, then the Event. Publishing the flow subscribes it — there is no address to copy.
| App | Events |
|---|---|
| CRM | contact, company, deal, lead, task, activity, sequence and invoice events — for example Contact Created, Deal Won, Deal Lost, Deal Stage Changed, Lead Qualified, Task Completed, Invoice Paid, Invoice Sent |
| CDP | Event Received — an event from your site, such as an order; Profile Entered Segment |
| Push Platform | Notification Event, Subscriber Event |
| Monfri Pages | Page Published, Database Row Created, Comment Added |
| Telegram | New Message to your bot |
| GitHub, Linear, Trello | new issues and pull requests; issues created or updated; cards created |
The event's data is available to the steps under {{trigger.body.…}} — open the variables panel { } to pick from it: The flow editor. An app from outside Monfri needs a connection first: Connections.
Webhook
Another system starts the flow by sending it data.
- Choose Webhook and Publish the flow — until then the panel says Publish this flow to get a webhook URL.
- Copy the Webhook URL and the Secret.
- The other system sends a POST to the URL, with the secret in the
X-Webhook-Secretheader (orAuthorization: Bearer <secret>). Systems that sign their requests can send an HMAC-SHA256 signature of the body inX-Signature: sha256=…instead, withX-Webhook-Timestampif they have one — then a request older than five minutes is refused.
Never put the secret in the URL: it would land in every log the request passes. A request without the secret is refused. A signed request sent twice runs the flow once. The data sent is in {{trigger.body.…}}; the headers and the query string are in {{trigger.headers.…}} and {{trigger.query.…}}.
Scheduled
The flow runs on a timetable.
- Presets — Every minute, Every 5 minutes, Every hour, Every day at midnight, Every day at 9 AM, Weekdays at 9 AM, Every Sunday, First of month.
- Cron Expression — for anything else, in the usual five fields: minute, hour, day of month, month, day of week.
30 8 * * 1is Mondays at 08:30. - Timezone — UTC unless you change it. Pick Eastern Europe (Sofia) for Bulgarian time; in UTC, 9 AM is noon in Sofia in summer.
The steps get {{trigger.scheduledAt}} — the moment it fired, in UTC — and {{trigger.scheduledDate}}, the day in the schedule's timezone, as 10.10.2026.
Polling
The flow checks an app for new records at an interval and runs once for each new one. Pick the Connector, the Trigger, the Connection and the Poll Interval (one minute at the least; five by default).
| App | Checks for |
|---|---|
| CDP | New Profiles |
| Push Platform | New Subscribers |
| CloudCart | New Order, Abandoned Cart |
| GitHub | New Issues (Polling) |
When the app keeps failing, the checks slow down — up to once an hour — until it answers again.
If something doesn't work
The flow does not start on the event
It is not published, or it is switched off in Flows. For a webhook, check that the request carries the secret; for an app outside Monfri, that its connection is Active.
The other system gets 403
The secret is missing or wrong, or a signed request is more than five minutes old. Copy the Secret again from the trigger and send it in the X-Webhook-Secret header.
The schedule runs at the wrong hour
The Timezone is UTC. Set it to yours and publish again.