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,'&').replace(/</g,'<').replace(/>/g,'>')\n .replace(/\"/g,'"').replace(/'/g,''');\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:

