n8n Scheduled Tasks: Cron Done Right Without Dropped Runs
Master n8n scheduled tasks and cron with a working recurring digest, the overlap fix that stops dropped runs, and why the old Cron node breaks 2023 tutorials.
Every cron tutorial teaches the syntax. 0 9 * * 1-5 runs weekdays at nine. Great. None of them tell you what happens when that 9 a.m. report workflow takes eleven minutes to finish but you've scheduled it every five. Or that the Cron node they're showing you was deprecated, so the copy-pasted 2023 setup quietly does nothing on a current instance.
This guide covers n8n scheduled tasks cron the way it actually behaves in production: anchored to a real recurring digest you'd ship, with the overlap problem that silently drops runs solved, and the deprecated-node trap flagged. Syntax is the easy part. Scheduling that doesn't lose runs is the part worth your time.
What scheduled workflows are good for
Cron in n8n earns its place on recurring jobs that should never depend on someone remembering:
- A daily or weekly digest pulling from a Sheet, CRM, or analytics source
- Scheduled report generation and delivery (email, Slack, Telegram)
- Periodic data syncs and backups on a fixed cadence
- Polling an API that has no webhook, on a sensible interval
- Cleanup jobs (archiving old rows, expiring stale records)
- Health checks and uptime pings at a steady rhythm
The common thread: work that's time-driven, not event-driven. If an external event should kick it off, you want a webhook, not a schedule.
Use the Schedule Trigger, not the Cron node
Here's the take that'll save someone an afternoon. The standalone Cron node is deprecated. If a tutorial from 2022 or 2023 has you dragging in a node literally called "Cron," stop. The current node is the Schedule Trigger, which absorbed cron functionality and added fixed intervals, time-of-day scheduling, and per-workflow timezone handling. A workflow built on the old Cron node may import and look fine, then never fire on a modern instance, with no loud error to tell you why.
This matters because cron tutorials age badly and people copy them wholesale. When a scheduled workflow "just doesn't run," the deprecated trigger is one of the first things to rule out. Rebuild it on the Schedule Trigger and the mystery usually evaporates.
The scheduled digest pipeline
Schedule Trigger (cron: 0 8 * * 1) ← Monday 08:00, configured timezone
│
▼
Lock check: did the previous run finish? (skip if still running)
│
▼
Pull data (Google Sheets / CRM / analytics)
│
▼
Summarize (OpenAI) → digest body
│
▼
Deliver (Slack / Gmail) + log run timestamp
Anchoring cron to a shipped digest is the point. A schedule in the abstract teaches nothing; a Monday-morning summary that reads your strategy tracker and writes the week's status is a thing you'd actually keep running.
1. Set the trigger and timezone
Add the Schedule Trigger. For a weekly Monday digest, a cron expression of 0 8 * * 1 fires at 08:00. The piece tutorials skip: that 08:00 is in the workflow's configured timezone, not UTC by default. If your instance runs UTC and your team is in New York, the digest lands at 3 a.m. their time. Set the workflow timezone deliberately in workflow settings before trusting the time.
For simple cadences, prefer the Schedule Trigger's interval and time-of-day modes over raw cron. They're harder to get subtly wrong than a five-field expression.
2. Prevent overlap
This is the failure mode the syntax tutorials never mention.
A Schedule Trigger set to a short interval will fire again while the previous execution is still in flight. On a workflow that sometimes runs longer than its interval (a digest that pulls a slow API, say), n8n can silently drop the new run rather than queue it, so your "every 5 minutes" job actually runs every 11 when things are slow. Two fixes: lengthen the interval so a run always finishes with room to spare, or add a lock, a flag in a Sheet or a static-data check that the previous run sets on start and clears on finish, and an If node that skips when the lock is held. Don't schedule a job more frequently than its worst-case runtime.
For most digests this is moot because you run them daily or weekly. For high-frequency polls, it's the bug that quietly eats data.
3. Pull the data
A Google Sheets, CRM, or HTTP Request node fetches what the digest reports on. Keep this idempotent: reading is safe to repeat, so if a run is retried, no harm done. Save the destructive work (archiving, deleting) for after a successful read.
4. Summarize and deliver
An OpenAI node turns the raw rows into a readable digest, then a Slack or Gmail node sends it. Parse the model output with a Code node before delivery. Same discipline as every AI workflow: the model returns text, the delivery node wants clean fields, so add the parse step.
5. Log the run
Append a row recording when the run fired and what it sent. This is how you confirm the schedule is actually working, and it doubles as the lock signal from step 2. A scheduled workflow with no run log is a workflow you're trusting blind.
Implementation patterns
Pattern 1 — Interval sized to runtime. The simplest overlap fix is arithmetic. If the workflow's slow runs take eleven minutes, don't schedule it every five.
Schedule Trigger (every 30 min) ← comfortably > worst-case runtime
→ [workflow body]
→ Log run timestamp
Pattern 2 — Lock guard for short intervals. When you genuinely need frequent runs, gate on a lock.
Schedule Trigger (every 5 min)
→ Read lock (Sheet / workflow static data)
→ If: lock not held?
true → set lock → [body] → clear lock
false → skip (previous run still going)
The lock turns a silent drop into a deliberate skip you can see in the log. That visibility is the whole win.
n8n nodes you'll use most
| Node | Purpose |
|---|---|
| Schedule Trigger | Fires on interval, time of day, or cron (replaces the Cron node) |
| If | Implements the lock guard against overlapping runs |
| Google Sheets / HTTP Request | Pulls the data the digest reports on |
| OpenAI | Summarizes raw data into a readable digest |
| Code | Parses model output; manages the lock flag |
| Slack / Gmail | Delivers the scheduled digest |
Getting started
- Add a Schedule Trigger and choose interval, time-of-day, or a cron expression for the cadence you need.
- Set the workflow timezone explicitly so the time fires when you expect, not in UTC.
- Confirm you're on the Schedule Trigger, not the deprecated Cron node, if you imported an old workflow.
- Size the interval above the workflow's worst-case runtime to avoid overlapping runs.
- For genuinely frequent jobs, add a lock guard with an
Ifnode so overlaps skip instead of dropping silently. - Build the body: pull data, summarize with OpenAI plus a
Codeparse, deliver via Slack or Gmail. - Append a run-timestamp log row so you can verify the schedule fires and catch a stalled job early.
The Decision-Maker's Weekly Dashboard ships a working scheduled digest: a Schedule Trigger reads a Google Sheet strategy tracker, scores every initiative, and has GPT-4o-mini write the Monday-morning summary, so you inherit the cron-to-digest pattern instead of wiring it from scratch. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to the whole catalog (plus every template added later) if you run more than one of these automations.
Scheduling underpins most recurring automations, so it's worth seeing it in context. The automated data reporting guide builds the report a digest delivers, and the n8n webhook automation guide covers the event-driven alternative for the jobs that shouldn't be on a timer at all. You can also browse the catalog for scheduled-report templates.
Cron syntax takes five minutes to learn and the overlap trap takes one bad week to discover. Skip the bad week: size the interval, set the timezone, log every run. Scheduled workflows are supposed to be the ones you forget about, in the good way.
Browse the n8n template catalog →Common questions
How do you schedule a workflow in n8n?
Why does my n8n scheduled workflow skip runs?
Does the n8n Schedule Trigger handle timezones?
Get the workflow templates this guide is built on
Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.
Get 3 tested n8n templates, free
The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Built through the same live-instance release process as everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.
- 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
- 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
- 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14
More automation guides

Automate SEO Internal Linking Across Your Site with n8n
Internal linking is one of the highest-ROI on-page SEO levers, and it's the one that rots fastest. Every new post should link to relevant older ones and earn links back, but nobody remembers the forty…

Build a Self-Filling Content Calendar with n8n
Most content calendars die the same way: the planning sheet looks great in January, then a busy week leaves three empty slots, then a busier week leaves ten, and by March nobody trusts it. The fix isn…

Automate Content Translation and Localization with n8n
A blog that ranks in English is leaving traffic on the table in five other markets. The fix sounds simple, translate the posts, and the popular n8n template does exactly the naive version: title in, b…