
n8n Schedule Trigger: Run Cron Jobs, Recurring Reports, and Time-Based Automations (2026)
Quick Summary
- •The n8n Schedule Trigger runs workflows on cron expressions at specified intervals
- •Always specify a timezone to avoid silent offset bugs at DST boundaries
- •The node retries automatically on failure, but you must configure the retry policy explicitly
- •Use the 'Maintenance Window' pattern to safely run heavy daily summarization jobs
- •Synta connects Claude Code and Cursor to your n8n instance so you can build and test schedule triggers interactively
n8n Schedule Trigger: Run Cron Jobs, Recurring Reports, and Time-Based Automations (2026)
- The n8n Schedule Trigger runs workflows on cron expressions at specified intervals
- Always specify a timezone to avoid silent offset bugs at DST boundaries
- The node retries automatically on failure, but you must configure the retry policy explicitly
- Use the "Maintenance Window" pattern to safely run heavy daily summarization jobs
- Synta connects Claude Code and Cursor to your n8n instance so you can build and test schedule triggers interactively
What is the n8n Schedule Trigger?
The n8n Schedule Trigger is a built-in node that starts a workflow at a predefined time or interval. It uses standard cron syntax so you can express complex schedules without writing code. A cron expression is a string of five fields that defines when a job should run, based on minutes, hours, days of the month, months, and days of the week.
Unlike a manual trigger or a webhook, the Schedule Trigger runs autonomously inside n8n. Once activated, your workflow fires automatically whenever the cron expression matches the current time. This makes it ideal for recurring reports, data syncs, maintenance tasks, and scheduled alerts.
With Synta, you can connect Claude Code or Cursor directly to your n8n instance to inspect active schedules, test trigger configurations, and debug timing issues in real time.
How Do I Set Up the n8n Schedule Trigger?
Setting up the Schedule Trigger takes under a minute:
1. Add a new workflow in n8n
2. Select Schedule Trigger as the first node
3. Enter a cron expression in the Expression field (or use the visual cron builder)
4. Connect your downstream actions
5. Activate the workflow
Example: run every day at 9am UTC
0 9 * * *
Example: run every 15 minutes
*/15 * * * *
Example: run every Monday at 8:30am
30 8 * * 1
The node outputs a single trigger event with a timestamp. Downstream nodes receive this timestamp as input data, which you can use to scope the action (e.g., fetch records "since last run").
How Do I Read and Write Cron Syntax for n8n?
Cron syntax has five ordered fields:
┌───────────── minute (0-59)
│ ┌──────────── hour (0-23)
│ │ ┌──────────── day (1-31)
│ │ │ ┌──────────── month (1-12)
│ │ │ │ ┌──────────── day of week (0-7, both 0 and 7 are Sunday)
│ │ │ │ │
* * * * *
| Field | Values | Special chars |
| Minute | 0-59 | * , - / |
| Hour | 0-23 | * , - / |
| Day | 1-31 | * , - / |
| Month | 1-12 | * , - / |
| Day of week| 0-7 | * , - / |
Common special characters:
- `*` means "every" (every minute, every hour)
- `,` separates list items (e.g., `0,30` means at minute 0 and 30)
- `-` defines a range (e.g., `9-17` means 9am through 5pm)
- `/` defines a step (e.g., `*/10` means every 10 units)
Example: every weekday at 6pm
0 18 * * 1-5
Example: every 2 hours during business hours
0 9-17/2 * * *
How Do Timezone Settings Affect the n8n Schedule Trigger?
This is where most schedule failures happen. The Schedule Trigger defaults to the n8n server timezone, which is often UTC or the server's local time. If you do not explicitly set a timezone, your workflow will fire at the wrong time relative to your users' expectations.
Common Timezone Mistakes
1. Assuming server time = your local time -- UTC servers produce silent 8-hour offset bugs for Pacific users.
2. Ignoring DST transitions -- A 9am US/Eastern schedule shifts by an hour twice a year.
3. Using abbreviations -- n8n expects IANA names like `America/New_York`, not `EST` or `PST`.
How to Set the Timezone Correctly
In the Schedule Trigger node, set the Timezone field to an IANA identifier:
America/New_York
Europe/London
Asia/Tokyo
With DST active in New York, 9am EST becomes 9am EDT automatically. n8n handles the conversion when you use the IANA name.
Always validate by temporarily setting `*/5 * * * *` and comparing trigger times against your expected timezone before going live.
How Do I Handle Retries and Failures in Scheduled Workflows?
The Schedule Trigger node includes built-in retry logic, but it is not enabled by default. You must activate and configure it manually.
Configuring the Retry Policy
1. Open the Schedule Trigger node settings
2. Set On Error to "Retry"
3. Configure the retry parameters:
- Max Retries: How many times to retry (e.g., 3)
- Retry Interval: Seconds between attempts (e.g., 60 for 1 minute, 300 for 5 minutes)
- Retry Fail From: Optional - define which error codes trigger a retry
Retry Logic Summary
| Scenario | What happens |
| Non-retryable error | Workflow fails immediately |
| Retryable error | n8n retries up to Max Retries |
| All retries exhausted | Workflow marked failed, error logged |
| Retry on reactivation | Node resumes automatically at next cron time |
Do not assume retries are on by default. Always check the node settings before relying on them for critical pipelines.
How Do I Build a Daily Summary Report with n8n?
A daily summary report is one of the most common uses for a Schedule Trigger. Here is the recommended pattern:
Step 1: Schedule the Trigger
Set the cron to run once daily at a quiet time:
0 3 * * *
This runs at 3am UTC. Adjust for your timezone and your data source's quiet window.
Step 2: Fetch Data Since Last Run
Use the trigger timestamp to scope your query. If the Schedule Trigger outputs a timestamp, pass it as a query parameter:
- CRM: Fetch deals created or updated since `{{ $trigger.timestamp }}`
- Database: Run a query with `WHERE created_at > '{{ $trigger.timestamp }}'`
- API: Pass the timestamp as `since` or `start_date`
Step 3: Aggregate and Format
Use n8n's Code node or expression tools to:
- Sum totals, counts, and averages
- Format the output into a readable digest
- Attach conditional logic (only send if results meet a threshold)
Step 4: Deliver the Report
Route the output to email, Slack, or a webhook. Set a data threshold gate so you do not send empty reports or reports with anomalous spikes.
Maintenance Window Pattern
For heavy queries (full table scans, large API exports), schedule during a true maintenance window:
0 2 * * *
And add a manual confirmation step (a Wait node with a manual approval) if the job touches production data. This prevents accidental overwrites during off-hours runs.
How Do I Avoid Common Scheduling Pitfalls?
Pitfall 1: Two Fires in One Day
If you set `0 0 * * *` thinking "midnight," the behavior depends on your n8n version. **Always test with `*/1 * * * *` (every minute) before committing to a production schedule.**
Pitfall 2: Overlapping Runs
If your workflow takes longer than the interval, two executions can overlap. This causes race conditions, duplicate data writes, and corrupted reports.
Fix: Add a workflow-level mutex using a Set node that checks a flag in your database or a Redis key before proceeding. If the flag is set, skip this run and log a warning.
// Pseudocode mutex check
if (await redis.get('scheduler_lock')) {
throw new Error('SKIP: previous run still in progress');
}
await redis.set('scheduler_lock', '1', 'EX', 300);
Pitfall 3: Timezone Offset at DST Boundaries
A schedule at `9:00 America/New_York` fires at 10:00 EDT after spring forward. This is correct but surprises users who expected a fixed clock time. Document DST behavior in your workflow. If you need wall-clock consistency regardless of DST, either use a fixed UTC schedule or add a timezone correction step.
Pitfall 4: Stale Data Due to Processing Lag
If your workflow processes 24 hours of data starting at 3am, the report reflects data up to 3am, not data up to midnight. This is often fine for overnight batches, but it means your daily report is missing the last few hours of the day.
If you need end-of-day reports, schedule the trigger for early morning (e.g., 1am) to capture the prior day's full data with minimal lag.
What Are the Best Practices for n8n Schedule Automation?
1. Always set an explicit timezone. Never rely on the server default.
2. **Test with `*/5 * * * *` first.** Confirm the correct local time before committing a schedule.
3. Configure retries explicitly. Default settings are conservative -- adjust for your failure tolerance.
4. Add a mutex for long-running workflows. Prevent overlap with a Redis or database lock.
5. Log the trigger timestamp. Downstream debugging is much easier with a known fire time.
6. Set alerts for repeated failures. Three consecutive failures should trigger a Slack or email alert.
7. Use Synta to test live. Connect Claude Code or Cursor to your n8n instance via Synta and validate cron expressions interactively.
Frequently Asked Questions
Can the n8n Schedule Trigger run workflows multiple times per day?
Yes. Use a cron expression that matches multiple times per day, such as `0 9,12,18 * * *` to run at 9am, 12pm, and 6pm. Each match starts a new workflow execution.
How do I stop a scheduled workflow from running?
Deactivate the workflow in n8n. This stops the Schedule Trigger from firing while preserving the workflow configuration. You can also set the workflow to "Active: false" via the n8n REST API.
Does n8n run missed schedules when the server restarts?
n8n does not backfill missed cron triggers. If the server is down when a scheduled run is due, that execution is skipped. For critical schedules, use an external monitoring tool to alert on missed runs.
Can I use the Schedule Trigger with dynamic schedules?
Yes. In the node's Expression field, you can enter a dynamic expression that reads the schedule from a database, environment variable, or webhook payload. This lets you change the schedule without redeploying the workflow.
What happens if my n8n server timezone is different from my workflow timezone?
n8n applies the workflow-level timezone setting independently of the server timezone. As long as you set the Timezone field in the Schedule Trigger node, it overrides the server default. Always verify by testing.
Does Synta support building and testing n8n Schedule Triggers?
Yes. Synta is an MCP server that connects Claude Code and Cursor to your n8n instance. You can inspect active trigger configurations, test cron expressions interactively, and validate timing against your specified timezone from your editor.
Internal Links for Reference
- Synta MCP Server Overview -- Connect Claude Code and Cursor to your n8n instance
- n8n Schedule Trigger Node Documentation -- Official node reference and examples
- n8n Workflow Error Handling -- Retry and error handling best practices
- Cron Expression Cheat Sheet -- Quick reference for common schedules
Suggested Inline Image Descriptions
1. Screenshot: Schedule Trigger node configuration -- Show the cron expression field, timezone dropdown, and retry settings in the n8n UI. Label each field clearly.
2. Diagram: Cron syntax breakdown -- A visual table or graphic showing the five cron fields (minute, hour, day, month, day of week) with example values and color coding.
3. Screenshot: Overlapping runs warning -- Show a n8n execution log with two simultaneous runs highlighted in red, illustrating the mutex problem and a partial fix in the Code node.
Hero Image Prompt
Prompt: "A warm terracotta background (#C46A3A) with a hand-drawn sketch style illustration. Shows a stylized clock face with cron gear wheels, small automation nodes connecting like puzzle pieces, and a subtle calendar page flipping. The style is friendly and technical -- clean linework with a soft terracotta wash. No text overlays. Flat design meets hand-drawn sketch aesthetic."