My Schedule Trigger on n8n Cloud has stopped firing automatically — no scheduled executions appear in the Execution log at all — but manually running the workflow works perfectly every time

Describe the problem/error/question

My workflow has a Schedule Trigger set to run every 2 days at 8:01 AM. It used to work reliably but has stopped firing automatically. When I check the Executions log, there is only one entry — a manual execution I triggered myself. There are no failed or timed-out scheduled executions in the log at all, meaning the scheduler never attempted to run.
When I manually execute the workflow from the canvas it works perfectly end to end. My suspicion is that n8n Cloud may have auto-deactivated the workflow for some reason?

What is the error message (if any)?

No error message. The workflow simply never appears in the Executions log for scheduled runs.

Please share your workflow

 {                                                                                                                                                                                            
    "nodes": [                                                                                                                                                                               
      {                                                                                                                                                                                        
        "parameters": {                                                                                                                                                                        
          "rule": {
            "interval": [
              {
                "daysInterval": 2,
                "triggerAtHour": 8,
                "triggerAtMinute": 1
              }
            ]
          }
        },
        "type": "n8n-nodes-base.scheduleTrigger",
        "typeVersion": 1.2,
        "position": [-304, 880],
        "id": "9babc5bc-3873-4389-b051-cbfee14183fb",
        "name": "Schedule Trigger"
      },
      {
        "parameters": {
          "assignments": {
            "assignments": [
              {
                "id": "f2b57bde-1878-4f3d-91da-2a3b4afc384f",
                "name": "config",
                "value": "{\n  \"markets\": [\n    {\n      \"name\": \"NYC\",\n      \"feeds\": [\n        \"https://www.bisnow.com/rss-feed/new-york\",\n
  \"https://feeds.feedblitz.com/globest/new-york\"\n      ]\n    }\n  ],\n  \"national\": {\n    \"feeds\": [\n      \"https://www.bisnow.com/rss-feed/home\",\n
  \"https://www.connectcre.com/feed/\",\n      \"https://feeds.content.dowjones.io/public/rss/latestnewsrealestate\",\n      \"https://rss.nytimes.com/services/xml/rss/nyt/RealEstate.xml\"\n
     ]\n  }\n}\n",
                "type": "string"
              }
            ]
          },
          "options": {}
        },
        "type": "n8n-nodes-base.set",
        "typeVersion": 3.4,
        "position": [-80, 880],
        "id": "9ad315b7-2bab-4e00-837f-3e2aff87aef5",
        "name": "Edit Fields"
      },
      {
        "parameters": {
          "sendTo": "[email protected], [email protected], [email protected]",
          "subject": "Noah and Anthony's Daily CRE News",
          "message": "={{$json.html}}",
          "options": {}
        },
        "type": "n8n-nodes-base.gmail",
        "typeVersion": 2.1,
        "position": [1392, 880],
        "id": "dd221490-bbcb-4158-86e9-7aeacbfd76de",
        "name": "Send a message",
        "webhookId": "f0ab1b5f-a658-4da1-9d06-88865d53adba",
        "credentials": {
          "gmailOAuth2": {
            "id": "8Chz7Sdotp4ZwUlE",
            "name": "Gmail account 3"
          }
        }
      },
      {
        "parameters": {
          "jsCode": "// Combine NYC + National RSS outputs, keep only last 24 hours, dedupe, then build the prompt\nconst inputs = $input.all();\nconst cutoffMs = Date.now() - 24 * 60 * 60 *
  1000; // last 24h\n\nconst seen = new Set();\nconst articles = [];\n\nfunction addItem(a) {\n  const title = a.title || '';\n  const link = a.link || '';\n  const dateStr = a.isoDate ||
  a.pubDate || a.pubdate || '';\n  const ts = dateStr ? new Date(dateStr).getTime() : NaN;\n\n  if (!title || !link) return;\n  if (!Number.isFinite(ts)) return;\n  if (ts < cutoffMs)
  return;\n\n  const key = `${link}|${title}`.toLowerCase();\n  if (seen.has(key)) return;\n  seen.add(key);\n\n  articles.push({ title, link, ts });\n}\n\nfor (const it of inputs) {\n  const
   j = it.json;\n  if (Array.isArray(j.items)) {\n    for (const a of j.items) addItem(a);\n  } else {\n    addItem(j);\n  }\n}\n\narticles.sort((a, b) => b.ts - a.ts);\n\nconst lines =
  articles.map(a => `- ${a.title}: ${a.link}`);\nreturn [{\n  json: {\n    prompt: lines.join('\\n'),\n    articleCount: articles.length,\n    filteredSince: new
  Date(cutoffMs).toISOString()\n  }\n}];\n"
        },
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [592, 880],
        "id": "da8578a8-5e3d-4dea-9bee-9c5dff5de7cb",
        "name": "Code in JavaScript"
      },
      {
        "parameters": {
          "promptType": "define",
          "text": "={{ $json.prompt }}",
          "hasOutputParser": true,
          "messages": {
            "messageValues": [
              {
                "message": "=You are a commercial real estate analyst. From the raw headlines provided (each line is \"- title: url\"), produce ONLY valid JSON with this exact shape:\n\n{\n
  \"title\": \"CRE Moves – NYC + National\",\n  \"nyc\": {\n    \"summary\": \"One concise paragraph (60–120 words) in plain English, specific to the NYC market.\",\n    \"headlines\": [ {
  \"title\": \"string\", \"url\": \"string\" } ],\n    \"takeaways\": [ \"insight 1\", \"insight 2\", \"insight 3\" ]\n  },\n  \"national\": {\n    \"summary\": \"One concise paragraph
  (60–120 words) in plain English, US-wide context.\",\n    \"headlines\": [ { \"title\": \"string\", \"url\": \"string\" } ],\n    \"takeaways\": [ \"insight 1\", \"insight 2\", \"insight
  3\" ]\n  }\n}\n\nRules:\n- Always fill BOTH sections (NYC and National).\n- If headlines are few, still write a useful paragraph.\n- Headlines must be concise and link to the provided
  URL.\n- Do not invent facts beyond what headlines reasonably imply.\n- Output JSON only. No extra text.\n"
              }
            ]
          },
          "batching": {}
        },
        "type": "@n8n/n8n-nodes-langchain.chainLlm",
        "typeVersion": 1.7,
        "position": [816, 880],
        "id": "d9d0d7e2-c1f8-4e78-a3a0-730584e85006",
        "name": "Basic LLM Chain"
      },
      {
        "parameters": {
          "model": {
            "__rl": true,
            "value": "gpt-4.1",
            "mode": "list",
            "cachedResultName": "gpt-4.1"
          },
          "options": {}
        },
        "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
        "typeVersion": 1.2,
        "position": [896, 1104],
        "id": "e8eca235-c556-4661-baf2-4c1654f1b3ba",
        "name": "OpenAI Chat Model",
        "credentials": {
          "openAiApi": {
            "id": "BjNmOckigh38zrxG",
            "name": "OpenAi account"
          }
        }
      },
      {
        "parameters": {
          "jsCode": "// --- Helpers ---\nfunction tryParseJSON(maybe) {\n  if (!maybe) return null;\n  if (typeof maybe === 'object') return maybe;\n  try { return JSON.parse(maybe); } catch
  { return null; }\n}\n\nfunction pickLLMJson($json) {\n  return (\n    tryParseJSON($json.text) ||\n    tryParseJSON($json.result) ||\n    tryParseJSON($json.data) ||\n
  tryParseJSON($json.output) ||\n    tryParseJSON($json[\"choices\"]?.[0]?.message?.content) ||\n    tryParseJSON($json) ||\n    {}\n  );\n}\n\nfunction esc(s='') {\n  return String(s)\n
  .replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')\n    .replace(/\"/g,'&quot;').replace(/'/g,'&#39;');\n}\n\nfunction linkItem(h) {\n  const t = esc(h.title || '');\n  const
  u = esc(h.url || '#');\n  return `<li><a href=\"${u}\" style=\"color:#0b5fff;text-decoration:none;\">${t}</a></li>`;\n}\n\nfunction renderSection(label, sec) {\n  const summary =
  esc(sec?.summary || 'Light news day.');\n  const headlines = Array.isArray(sec?.headlines) ? sec.headlines : [];\n  const takes = Array.isArray(sec?.takeaways) ? sec.takeaways : [];\n\n
  return `\n  <section style=\"margin:18px 0;\">\n    <h3 style=\"margin:0 0 6px;font-size:16px;color:#111;\">${label}</h3>\n    <p style=\"margin:8px 0 10px;color:#222;\">${summary}</p>\n
   ${headlines.length ? `\n      <div style=\"margin:8px 0 4px;font-weight:600;color:#333;\">Top headlines</div>\n      <ul style=\"margin:6px 0 12px;padding-left:18px;\">\n
  ${headlines.map(linkItem).join('')}\n      </ul>` : ''}\n    ${takes.length ? `\n      <div style=\"margin:8px 0 4px;font-weight:600;color:#333;\">Key takeaways</div>\n      <ul
  style=\"margin:6px 0;padding-left:18px;\">\n        ${takes.map(t => `<li>${esc(t)}</li>`).join('')}\n      </ul>` : ''}\n  </section>`;\n}\n\nconst data = pickLLMJson($json);\nconst title
  = data.title || 'CRE Moves – NYC + National';\nconst nyc = data.nyc || {};\nconst nat = data.national || {};\nconst nowStr = new Date().toLocaleString('en-US', { timeZone:
  'America/New_York' });\n\nconst html = `\n<div style=\"font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial;line-height:1.6;color:#111;max-width:740px;\">\n  <h2 style=\"margin:0 0
  8px;\">${esc(title)}\n    <span style=\"font-size:12px;color:#666;\">(${esc(nowStr)} ET)</span>\n  </h2>\n  ${renderSection('NYC Market', nyc)}\n  <hr style=\"border:none;border-top:1px
  solid #eee;margin:14px 0;\">\n  ${renderSection('National Market', nat)}\n  <hr style=\"border:none;border-top:1px solid #eee;margin:16px 0;\">\n  <div
  style=\"font-size:12px;color:#777;\">Automated via n8n</div>\n</div>\n`;\n\nconst subject = `${title} — ${nowStr} ET`;\nreturn [{ json: { subject, html } }];\n"
        },
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [1168, 880],
        "id": "fb9249c1-9916-477a-b45d-8befedf9b541",
        "name": "Code in JavaScript1"
      },
      {
        "parameters": { "url": "https://www.bisnow.com/rss-feed/home", "options": {} },
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.2,
        "position": [144, 400],
        "id": "b1231a9c-8827-46ce-b3ad-ae732bb13688",
        "name": "Bisnow National"
      },
      {
        "parameters": { "url": "https://www.bisnow.com/rss-feed/new-york", "options": {} },
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.2,
        "position": [144, 592],
        "id": "610ddbf9-298f-4252-86ca-e337cd69ca6e",
        "name": "Bisnow NYC"
      },
      {
        "parameters": { "numberInputs": 6 },
        "type": "n8n-nodes-base.merge",
        "typeVersion": 3.2,
        "position": [368, 816],
        "id": "6e2c1624-138b-47be-83c3-a3695050b65b",
        "name": "Merge1"
      },
      {
        "parameters": { "url": "https://feeds.content.dowjones.io/public/rss/latestnewsrealestate", "options": {} },
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.2,
        "position": [144, 784],
        "id": "7e4d5af5-f4a3-4532-9e21-8e70e2481366",
        "name": "WSJ National RE"
      },
      {
        "parameters": { "url": "https://feeds.feedblitz.com/globest/new-york", "options": {} },
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.2,
        "position": [144, 976],
        "id": "942cb509-0992-4a3d-b224-98a41c3141ef",
        "name": "GlobeSt NYC"
      },
      {
        "parameters": { "url": "https://www.connectcre.com/feed/", "options": {} },
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.2,
        "position": [144, 1168],
        "id": "76fc1551-1518-47df-85c6-6a97532255bf",
        "name": "Connect CRE National"
      },
      {
        "parameters": { "url": "https://rss.nytimes.com/services/xml/rss/nyt/RealEstate.xml", "options": {} },
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.2,
        "position": [144, 1360],
        "id": "a4fd0b95-cfbf-4cd5-a20f-38182edfeb72",
        "name": "New York times real esate"
      }
    ],
    "connections": {
      "Schedule Trigger": { "main": [[{ "node": "Edit Fields", "type": "main", "index": 0 }]] },
      "Edit Fields": { "main": [[
        { "node": "Bisnow National", "type": "main", "index": 0 },
        { "node": "Bisnow NYC", "type": "main", "index": 0 },
        { "node": "WSJ National RE", "type": "main", "index": 0 },
        { "node": "GlobeSt NYC", "type": "main", "index": 0 },
        { "node": "Connect CRE National", "type": "main", "index": 0 },
        { "node": "New York times real esate", "type": "main", "index": 0 }
      ]] },
      "Bisnow National": { "main": [[{ "node": "Merge1", "type": "main", "index": 0 }]] },
      "Bisnow NYC": { "main": [[{ "node": "Merge1", "type": "main", "index": 1 }]] },
      "WSJ National RE": { "main": [[{ "node": "Merge1", "type": "main", "index": 2 }]] },
      "GlobeSt NYC": { "main": [[{ "node": "Merge1", "type": "main", "index": 3 }]] },
      "Connect CRE National": { "main": [[{ "node": "Merge1", "type": "main", "index": 4 }]] },
      "New York times real esate": { "main": [[{ "node": "Merge1", "type": "main", "index": 5 }]] },
      "Merge1": { "main": [[{ "node": "Code in JavaScript", "type": "main", "index": 0 }]] },
      "Code in JavaScript": { "main": [[{ "node": "Basic LLM Chain", "type": "main", "index": 0 }]] },
      "OpenAI Chat Model": { "ai_languageModel": [[{ "node": "Basic LLM Chain", "type": "ai_languageModel", "index": 0 }]] },
      "Basic LLM Chain": { "main": [[{ "node": "Code in JavaScript1", "type": "main", "index": 0 }]] },
      "Code in JavaScript1": { "main": [[{ "node": "Send a message", "type": "main", "index": 0 }]] }
    },
    "pinData": {},
    "meta": {
      "templateCredsSetupCompleted": true,
      "instanceId": "REDACTED"
    }
  }

Share the output returned by the last node

[
{
“id”: “REDACTED”,
“threadId”: “REDACTED”,
“labelIds”: [
“UNREAD”,
“SENT”,
“INBOX”
]
}
]

Information on your n8n setup

  • n8n version: 2.8.3
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app): Cloud
  • Operating system:
1 Like

Hi @Noahh I was also facing this issue on cloud and even on my self hosted instance and it never seems to be getting fixed, so i have switched to cron jobs these really work all the time:

I guess there is some problem with the schedule trigger node but that would be fixed in the later releases.

3 Likes

@Noahh I tweaked a bit and its working. if you want can send you the code

1 Like

Hey, the fact that there’s literally nothing in the execution log for scheduled runs (not even failures) points to the workflow being inactive. Go check if the toggle in the top right corner is actually switched on — on n8n Cloud workflows can get deactivated if you edited and saved without re-activating, or sometimes after certain errors. If it shows active already, try toggling it off and back on, that forces the scheduler to re-register. Also double check your timezone setting in the workflow settings matches what you expect since “8:01 AM” depends on that.

This seems to work, you’re right about there being some weird bug because I didn’t change a single thing other than that, thanks!

1 Like