Cron
The Cron trigger starts a workflow on a time-based schedule. Instead of waiting for an external event, the workflow runs automatically at the times you define — hourly, daily, weekly, monthly, or on a fully custom cron expression. It is the right trigger for any recurring, unattended job: polling a partner API for new data, generating a scheduled report, sweeping a directory, or reconciling records on a fixed cadence.
Overview
Use the Cron trigger when you need to:
- Run work on a fixed schedule - Daily status updates, weekly reports, monthly invoice runs
- Poll external systems - Periodically pull data from an API or FTP location that has no push/webhook option
- Perform housekeeping - Archive files, expire stale records, recompute aggregates
- Batch accumulated work - Process everything queued since the last run
Cron schedules are evaluated in UTC. There is no per-workflow timezone setting — when you enter 8:00, the workflow fires at 08:00 UTC. Convert your local time to UTC when configuring a schedule (for example, 8:00 AM US-Eastern during daylight time is 12:00 UTC). Because the schedule is fixed to UTC, runs do not shift with daylight-saving transitions.
Configuration
Trigger Times
A Cron trigger holds a list of one or more trigger times. Each time fires independently, so a single Cron node can run a workflow at several points in the day or week — click Add Time to add another entry.
Each entry has a Mode that controls how the rest of its fields behave:
| Mode | Fires | Fields used |
|---|---|---|
| Every Hour | Once an hour, at the chosen minute | Minute |
| Every Day (default) | Once a day, at the chosen hour and minute | Hour, Minute |
| Every Week | Once a week, on the chosen weekday at the chosen time | Weekday, Hour, Minute |
| Every Month | Once a month, on the chosen day of month at the chosen time | Day of Month, Hour, Minute |
| Custom | Whenever the cron expression matches | Cron Expression |
Fields
- Hour - Hour of the day in 24-hour format,
0–23(UTC). Hidden for Every Hour and Custom. - Minute - Minute of the hour,
0–59. Hidden for Custom. - Day of Month - Day of the month,
1–31. Shown only for Every Month. - Weekday - Day of the week. Shown only for Every Week (Monday through Sunday).
- Cron Expression - A six-field cron expression. Shown only for Custom.
Custom Cron Expressions
Choose Custom mode when the simple modes can't express your schedule (multiple times per day, specific date ranges, every N minutes, weekday-only runs, and so on). The expression uses six fields:
┌───────────── second (0 - 59)
│ ┌─────────── minute (0 - 59)
│ │ ┌───────── hour (0 - 23)
│ │ │ ┌─────── day of month (1 - 31)
│ │ │ │ ┌───── month (0 - 11, Jan - Dec)
│ │ │ │ │ ┌─── day of week (0 - 6, Sun - Sat)
│ │ │ │ │ │
* * * * * *
Note the leading seconds field. This is a six-field expression — the first field is seconds, not minutes. A standard five-field crontab expression will be off by one position if pasted directly.
Examples
| Goal | Expression |
|---|---|
| Every day at 14:30 UTC | 0 30 14 * * * |
| Every 15 minutes | 0 */15 * * * * |
| Top of every hour | 0 0 * * * * |
| Every weekday at 09:00 UTC | 0 0 9 * * 1-5 |
| First day of every month at 00:00 UTC | 0 0 0 1 * * |
| Every 30 seconds | */30 * * * * * |
Output
The Cron trigger emits a single output keyed by the trigger node's name. The trigger carries no inbound payload — there is no caller and no body — so downstream nodes use a Cron run to initiate work (query a database, call an API, list a directory) rather than to consume incoming data.
If you need the current time inside the workflow, generate it in a downstream node (for example, a Set or Code node) rather than expecting it on the trigger output.
Example Usage & Common Use Cases
Daily Operations Report
Mode: Every Day
Hour: 12 (08:00 US-Eastern in summer)
Minute: 0
[Cron] → [HTTP Request: query metrics] → [Spreadsheet: build report] → [Send Email: management]
Hourly Inventory Sync
Mode: Every Hour
Minute: 5
[Cron] → [HTTP Request: pull inventory] → [Loop: rows] → [Update system of record]
Weekly Partner File Pickup
Mode: Every Week
Weekday: Monday
Hour: 6
Minute: 0
[Cron] → [FTP: list new files] → [If: files exist] → [FTP: download] → [Process]
Every 15 Minutes (Custom)
Mode: Custom
Cron Expression: 0 */15 * * * *
[Cron] → [HTTP Request: check for new orders] → [Branch on result]
Multiple Times Per Day
Add several trigger times to one Cron node — for example, an Every Day entry at 13:00 and another at 21:00 to run the same workflow twice daily.
Best Practices
- Think in UTC - Always convert your intended local time to UTC before entering it. Remember that fixed-UTC schedules do not follow daylight-saving shifts, so a job pinned to local business hours may need a seasonal adjustment.
- Stagger heavy jobs - Avoid scheduling many workflows at exactly
00:00; spread them across the hour to smooth load on the systems you call. - Make runs idempotent - A scheduled job may occasionally overlap with a long previous run or be retried. Design downstream logic so re-processing the same window is safe.
- Poll only when there is no push option - If the source system can call a Webhook, prefer that over frequent polling; reserve Cron for sources that can't notify you.
- Pick the simplest mode that works - Use Every Day / Every Week / Every Month for human-readable schedules and reserve Custom cron expressions for schedules the simple modes can't express.
Troubleshooting
Common Issues
- Workflow ran an hour earlier/later than expected - The schedule is UTC, not local time. Re-derive the UTC equivalent of your intended time; check whether daylight saving has shifted your local offset relative to the fixed UTC schedule.
- Custom expression never fires (or fires constantly) - Confirm you accounted for the leading seconds field. A five-field crontab pattern is misaligned in this six-field format.
- Nothing runs at all - Confirm the workflow is active. Inactive workflows are not scheduled.
- Job fired more than once - Verify there is only one trigger time configured for that moment; multiple entries that resolve to the same minute will each fire.
Debugging Tips
- Start with a frequent schedule while testing - A
*/2 * * * * *-style expression (every 2 minutes) confirms the trigger works, then dial it back to the real cadence. - Check execution history - The workflow's run history shows each scheduled execution and its timestamp, which you can compare against the configured UTC time.
Related
- Webhook - Event-driven alternative for sources that can push data to Splice
- Trigger Nodes - Overview of all available workflow trigger types