Back to Templates
Reads every workflow on your n8n instance every 30 minutes, extracts their schedule triggers, and keeps a matching recurring event on Google Calendar — one event per workflow, forever in sync.
Schedule Trigger (30 min)
→ GET /api/v1/workflows — fetch all workflows
→ Code: parsing — extract scheduleTrigger / cron nodes
→ Sheets: Lookup — read saved state (schedule, On Calendar, EventID)
→ Code: detect changes — create / update / skip
├─ create → build RRULE payload → Create event → write EventID to Sheets
└─ update → delete old event (parallel) + create new event → write to Sheets
State is stored in a Google Sheets tab (n8n Scheduling). The sheet acts as the single source of truth between runs.
| Schedule type | Result |
|---|---|
| Daily | DAILY recurring event |
| Weekly (with or without specific days) | WEEKLY recurring event |
| Monthly | MONTHLY recurring event |
| Hourly | 1 DAILY event at 00:MM (not 24 — avoids GCal rate limit) |
| Cron / minutely | Skipped — not supported by Google Calendar RRULE |
| This workflow itself | Always skipped |
| n8n credential type | Used for |
|---|---|
| n8n API | Reading the workflow list |
| Google Calendar OAuth2 API | Creating / deleting Calendar events |
| Google Service Account | Reading and writing the Sheets state store |
⚠️ The Google Calendar OAuth2 credential expires. Reconnect it from Settings → Credentials when Calendar nodes start failing.
Full step-by-step setup in documentation.md.
ogni ora :MM)