n8n Scheduled Workflows & Cron Jobs: The Complete Guide to Time-Based Automation (2025)

Webhooks get all the attention, but a huge share of the most valuable automations aren't triggered by an event — they run on a clock. The daily sales digest. The hourly site-health check. The Monday-morning report. The nightly data sync. All of these are scheduled workflows, and n8n makes them straightforward once you understand the Schedule Trigger.

The Schedule Trigger node

Every time-based workflow in n8n starts with the Schedule Trigger node. It offers two modes:

  • Interval mode — "every X minutes/hours/days." Simple, good for polling and frequent checks.
  • Cron mode — full cron expressions for precise control ("every weekday at 08:00", "1st of the month at midnight").

Cron expressions, demystified

A cron expression has five (or six, with seconds) fields: minute, hour, day-of-month, month, day-of-week. A few you'll actually use:

0 8 * * 1-5    → 08:00, Monday through Friday
0 */2 * * *    → every 2 hours, on the hour
0 9 1 * *      → 09:00 on the 1st of every month
*/15 * * * *   → every 15 minutes

You rarely need to write these from memory — the node has a builder — but understanding the shape lets you read and tweak them with confidence.

Ready to automate?

See a scheduled workflow in action — a daily AI competitor-intelligence briefing, ready to import.

Get the Template on Gumroad →

The timezone trap (read this one)

The most common scheduled-workflow bug is a timezone mismatch. Your n8n instance runs in UTC by default, so "8am" fires at 8am UTC — which might be 3am for you. Set your workflow timezone explicitly in the Schedule Trigger settings, or set the instance-wide GENERIC_TIMEZONE environment variable. Always test by checking the next execution time the node shows, not by assuming.

Patterns worth knowing

Daily report

Schedule Trigger at a fixed morning time → pull yesterday's data from your sources → format → email or Slack. The classic "it's in my inbox before I start work" automation.

Polling for changes

Interval trigger → check an API or page → compare against last-known state stored in a database → act only if something changed. Use this when a service has no webhook.

Monitoring and alerting

Frequent interval → health check → alert only on failure. Keep the happy path silent; one alert per problem, not a heartbeat every run.

Batch processing on a schedule

Nightly trigger → process a queue or sync data when traffic is low and rate limits are forgiving.

Production tips

  • Don't over-poll — every-minute schedules add load and hit rate limits. Use the longest interval that meets the need.
  • Make runs idempotent — store what you've processed so a re-run doesn't double-send.
  • Add error handling — a scheduled job that fails silently at 3am is worse than no job. Route failures to an alert.
  • Watch for overlap — if a run can take longer than the interval, guard against two runs colliding.

Once you're comfortable with the Schedule Trigger, a whole class of "someone has to remember to do this every day" tasks just... stops needing a someone.


Ready to automate Competitor Intelligence Monitor — Daily AI Briefings on Autopilot?

This ready-to-import n8n workflow saves you hours of setup time. Just import, connect your accounts, and you're live.

Get the Template on Gumroad →