Schedule trigger
Fires a workflow on a time-based schedule, every N minutes, on a cron expression, or at a specific datetime.
๐ธ Screenshot needed:
triggers__schedule-cron-builder.png, Schedule Trigger inspector with the schedule type dropdown set to "Cron", the cron expression field, a human-readable interpretation below it (e.g. "Every day at 09:00 (UTC)"), and a "Next 5 runs" list.
When to use it
- Hourly / daily / weekly syncs.
- Batch reports.
- Polling APIs that don't offer webhooks.
- Anything time-based.
Configuration
| Field | Notes |
|---|---|
| Schedule type | Interval, Cron, Once |
| Interval | For Interval type. E.g. every 5 minutes. |
| Cron expression | For Cron type. Standard 5-field cron: <minute> <hour> <day-of-month> <month> <day-of-week>. |
| Run once at | For Once type. ISO 8601 datetime. |
| Time zone | Defaults to the workspace timezone. |
| Active window | Optional. Only fires within the listed days/hours (e.g. weekdays 09:00โ17:00). |
| Custom payload | A JSON object passed as $trigger.payload to the workflow. Useful for parameterising the run. |
Cron quick reference
* * * * *
โ โ โ โ โ
โ โ โ โ โโโ day of week (0-6, Sunday=0)
โ โ โ โโโโโ month (1-12)
โ โ โโโโโโโ day of month (1-31)
โ โโโโโโโโโ hour (0-23)
โโโโโโโโโโโ minute (0-59)Common patterns:
| Cron | Meaning |
|---|---|
0 9 * * * |
Every day at 09:00 |
*/5 * * * * |
Every 5 minutes |
0 0 * * 0 |
Every Sunday at midnight |
0 9-17 * * 1-5 |
Every hour, 09:00 to 17:00, weekdays only |
0 0 1 * * |
First day of each month at midnight |
30 14 * * 3 |
Every Wednesday at 14:30 |
Flero's inspector shows a human-readable interpretation of your cron and previews the next 5 fire times, sanity-check there before going live.
Trigger payload
The $trigger object varies slightly by schedule type:
Interval
{
"scheduledTime": "2026-05-15T10:00:00Z",
"interval": 300000,
"previousScheduledTime": "2026-05-15T09:55:00Z",
"payload": { /* your custom payload, if set */ }
}Cron
{
"scheduledTime": "2026-05-15T09:00:00Z",
"cronExpression": "0 9 * * *",
"previousScheduledTime": "2026-05-14T09:00:00Z",
"payload": { /* your custom payload, if set */ }
}Once
{
"scheduledTime": "2026-05-15T09:00:00Z",
"payload": { /* your custom payload, if set */ }
}The previousScheduledTime field is great for "fetch records modified since last run" patterns.
Activating the schedule
- Save the workflow.
- Set workflow status to Active.
- The schedule arms; first fire happens at the next scheduled moment.
The schedule is paused when the workflow is draft or inactive. Inactive workflows don't fire, even if their scheduled time passes.
Catching up on missed runs
If a worker is down when a scheduled fire should happen, Flero misses it. By default, missed runs are not caught up, the next scheduled fire happens normally.
To enable catch-up, toggle Workflow settings โ Schedule โ Catch up missed runs. Flero will replay missed fires in order when the worker recovers. Use cautiously, a 4-hour outage on a 5-minute schedule means 48 catch-up runs all at once.
Time zones
Default is the workspace time zone (set in Settings โ Workspace). You can override per trigger.
Watch out for DST, a cron of 0 2 * * * in a DST-observing timezone will skip the 2:00 AM hour on spring-forward day and fire twice on fall-back day. If exact-cadence matters, use UTC.
Best practices
- Use
$trigger.previousScheduledTimefor "fetch since last run" patterns. Don't rely on wall-clock time inside the workflow, schedules can drift slightly. - Don't schedule sub-second intervals. The minimum useful interval is around 1 minute.
- Mind concurrency. A workflow that runs every minute but takes 90 seconds to complete will pile up. Set workflow concurrency to 1, or speed up the workflow.
- Stagger heavy schedules. A hundred workflows all scheduled at
0 0 * * *causes a thundering herd. Use1 0 * * *,2 0 * * *, โฆ to spread them.
Tips & gotchas
- Active windows are applied first. If the cron fires at 18:00 but the active window ends at 17:00, the run is skipped (not deferred).
- Time zones are sticky. Renaming the workspace timezone doesn't retroactively change scheduled triggers, you must update each trigger.
- Cron
*/5doesn't mean "every 5 minutes starting from now", it means every minute that's divisible by 5 (00, 05, 10, โฆ). For "now + every 5 minutes", use theIntervaltype instead.
Related
- Webhook trigger, for event-driven, not time-driven
- Recipe 02: Scheduled data sync
Found something out of date? This page lives in the Flero docs content set.