Master Cron Expressions in n8n: Schedule Trigger Tutorial for 2026
If you have searched for how to automate recurring tasks in n8n, you have likely landed on the Schedule Trigger node documentation and wondered what a cron expression actually is. The Schedule Trigger is the most widely used trigger in n8n for running workflows at fixed intervals, yet the five-field cron syntax trips up nearly every new user. This tutorial explains exactly how cron expressions work in n8n, how to build them from scratch, and how to debug them when your workflow does not fire at the expected time. By the end, you will be able to schedule any n8n workflow — hourly reports, daily database syncs, weekly Slack digests — without guessing whether your cron string is correct.
What Is a Cron Expression in n8n
A cron expression is a string of five fields that define when a scheduled job should run. In n8n, the Schedule Trigger node accepts a standard five-field cron expression (no year field). Each field controls a different unit of time:
- Minute (0–59) — the minute of the hour.
- Hour (0–23) — the hour of the day.
- Day of month (1–31) — the day of the month.
- Month (1–12) — the month of the year.
- Day of week (0–7) — Sunday is 0 or 7, Monday is 1, and so on.
Each field can contain a single value, a comma-separated list, a range, a step value, or a wildcard asterisk. For example, the expression 30 9 * * 1-5 means "at 09:30, Monday through Friday." The wildcard asterisk means "every possible value," so * in the day-of-month field means "every day."
When you configure the Schedule Trigger in n8n, you can either enter a raw cron expression or use the dropdown presets for common intervals such as "Every Hour" or "Every Day at Midnight." The custom cron field is where you gain full control.
Tip: Always check your cron expression against a preview tool before saving. A single misplaced asterisk can make a workflow run every minute instead of every hour.
Building Common Cron Expressions for n8n Workflows
Most automation use cases fall into a handful of schedule patterns. Below are the cron expressions that cover the majority of real-world n8n workflows, along with when you would use each one.
Every N Minutes
The most common pattern for polling workflows is "every 5 minutes." The cron expression uses a step value in the minute field:
*/5 * * * *
This runs every 5 minutes, every hour, every day. Replace the 5 with any number up to 59. For every 15 minutes, use */15 * * * *. For every hour at the top of the hour, use 0 * * * *.
Daily at a Specific Time
A daily data sync or morning email report typically runs at a fixed time. The expression for "every day at 8:00 AM" is:
0 8 * * *
This uses a 24-hour clock, so 8:00 PM would be 0 20 * * *. If you need the workflow to run only on weekdays, add a day-of-week constraint:
0 8 * * 1-5
That reads as "at 08:00, Monday through Friday."
Weekly on a Specific Day
A weekly Slack digest or Monday morning report uses the day-of-week field. To run every Monday at 9:00 AM:
0 9 * * 1
Sunday is 0, Monday is 1, Tuesday is 2, and so on through Saturday (6). For "first day of every month at midnight," use:
0 0 1 * *
This is a common pattern for monthly invoice generation or subscription reconciliation workflows in n8n.
Multiple Times Per Day
If your workflow needs to run at multiple specific times, use comma-separated values in the hour field:
0 9,13,17 * * *
This runs at 9:00 AM, 1:00 PM, and 5:00 PM every day. You can extend this pattern to any combination of hours and minutes.
Tip: Use crontab.guru to translate your cron expression into plain English before pasting it into n8n. This catches about 90 percent of errors before your workflow ever runs.
How to Configure the Schedule Trigger Node in n8n
Setting up the Schedule Trigger in n8n is straightforward, but a few configuration details are easy to overlook. Here is the exact process:
- Add the Schedule Trigger node — Drag the Schedule Trigger from the trigger nodes panel onto your workflow canvas. It appears as a clock icon.
- Choose the trigger mode — The node offers two modes: "Interval" and "Cron Expression." Interval mode gives you presets (Every Hour, Every Day, Every Week, Custom Interval). Cron Expression mode accepts the five-field string you built above.
- Enter your cron expression — Switch to Cron Expression mode and paste your expression. For example, enter
0 8 * * 1-5for "every weekday at 8:00 AM." - Set the time zone — n8n uses the server time zone by default. If your instance is hosted on a server in UTC but you need the workflow to run at 8:00 AM Eastern Time, set the time zone to
America/New_Yorkin the node parameters. This is the single most common cause of "wrong time" bugs. - Execute the workflow — Save and activate the workflow. The Schedule Trigger node shows the next five execution times in the node output panel so you can verify the schedule before waiting for the first run.
That is all it takes. The Schedule Trigger runs on the n8n server process, which means it does not depend on the browser tab being open — as long as your n8n instance is running, scheduled workflows execute reliably.
Debugging Schedule Trigger Issues in n8n
Even with a valid cron expression, scheduled workflows sometimes fail to execute. The n8n community forums are full of threads about triggers that fire early, late, or not at all. Here are the most common problems and how to fix them.
Wrong Time Zone
If your workflow fires at the wrong hour, the time zone is almost always the culprit. By default, n8n uses the server's local time. If your server is in UTC but you want the workflow to run at 8:00 AM Pacific, the expression 0 8 * * * runs at 8:00 AM UTC — which is 1:00 AM Pacific. Always set the time zone explicitly in the Schedule Trigger node's configuration.
Cron Expression Validation Errors
n8n validates cron expressions before saving. Common mistakes include using seven-field syntax (n8n only accepts five fields), putting letters where numbers belong, or using invalid ranges like 0-61 in the minute field. If you see a validation error, paste your expression into crontab.guru to check the formatting.
Workflow Inactive or Paused
A scheduled trigger must be activated (the toggle in the top-right of the workflow editor must be green). If you imported a workflow or deactivated it while editing, the trigger does not fire until you reactivate it.
Server Resources Exhausted
If you self-host n8n and your server runs out of memory or disk space, the scheduler process stops working silently. This is a common issue with low-cost VPS setups. The n8n instance may appear to be running, but scheduled tasks never execute. A managed, dedicated instance — like the ones on n8nautomation.cloud — avoids this entirely because resources are dedicated to your instance and monitored around the clock.
Real Example: Automating a Daily Database Sync with Cron
Let us walk through a complete example that ties everything together. You have a PostgreSQL database that needs to sync with a Google Sheet every weekday morning before your team starts work. Here is the n8n workflow:
- Add a Schedule Trigger node with the cron expression
0 6 * * 1-5. Set the time zone to your office time zone, for exampleAmerica/Chicago. - Add a PostgreSQL node to run a SELECT query on your source table. Configure the node with your database credentials (stored securely in n8n's credential vault).
- Add a Google Sheets node configured to append the returned data to your target sheet. Map the columns from the database output to the sheet columns.
- Add an error handler — attach a Slack node to the error output of the PostgreSQL node so your team gets notified if the database query fails.
- Add a success notification — attach a second Slack node to the Google Sheets output that sends a confirmation message saying "Daily sync completed at {{ $now }}."
Activate the workflow. The Schedule Trigger fires at 6:00 AM Chicago time Monday through Friday. Each run queries the database, writes the data to Google Sheets, and sends a Slack message confirming the sync. If a step fails, the error handler sends a different Slack notification with the error message. This same pattern works for any data source n8n supports — MySQL, MongoDB, Airtable, REST APIs, or even flat files on an S3 bucket.
Cron Expression Best Practices for n8n
After building dozens of scheduled workflows, certain patterns consistently cause less trouble than others. Follow these guidelines to keep your schedules reliable:
- Always set the time zone explicitly. Even if you think your server is in your local time zone, define it in the Schedule Trigger parameters. This makes the workflow portable if you ever migrate instances.
- Stagger high-frequency jobs. If you have multiple workflows that run every 5 minutes, offset their start times. Use
*/5 * * * *for one,1-59/5 * * * *for the next (runs at minute 1, 6, 11…), and so on. This prevents all of them from hitting your database or API at exactly the same second. - Avoid running on the minute for high-volume tasks. Instead of
0 * * * *, try7 * * * *so the workflow runs at 7 minutes past each hour. This avoids the "top of the hour" burst that hits many other automated systems simultaneously. - Test with a short interval first. Before deploying a new schedule, run it every 5 minutes for an hour to confirm the workflow executes correctly. Then change the cron expression to your target schedule.
- Use the n8n logs viewer for troubleshooting. If you host your instance on n8nautomation.cloud, the built-in logs viewer shows every execution attempt, including skipped or failed schedule ticks, making it much easier to debug trigger problems without digging through server logs.
When Cron Is Not Enough: Alternatives to the Schedule Trigger
The Schedule Trigger with cron expressions covers most regular scheduling needs, but some scenarios require different approaches.
Event-driven scheduling — If your workflow needs to run in response to an external event rather than a fixed clock time, use a Webhook trigger instead. A webhook fires immediately when the event happens, which is better than polling every N minutes. For example, a Stripe payment notification should use a webhook, not a cron-based poller.
Interval-based execution with dynamic timing — If the interval between runs depends on data (for example, "check every 15 minutes during business hours but every 2 hours at night"), you cannot express this in a single cron expression. Instead, build a parent workflow that calculates the next interval and activates a sub-workflow dynamically using the Schedule Trigger's "Activate Workflow" option.
Human-in-the-loop approvals — Cron triggers work great for scheduled data processing, but if a step requires manual approval, combine the Schedule Trigger with the n8n Wait node or the Form Trigger to pause execution until a person responds.
Each of these patterns builds on the cron foundation covered in this guide. Once you understand the Schedule Trigger, combining it with webhooks, waits, and sub-workflows opens up virtually every scheduling scenario you will encounter in production.