{"workflow":{"id":14172,"name":"Get a daily financial news digest on Telegram with Mistral and RSS feeds","views":63,"recentViews":2,"totalViews":63,"createdAt":"2026-03-19T01:18:05.277Z","description":"## Description\n\nAutomatically fetch, rank, and summarize the top financial stories from curated RSS feeds each day, then deliver a concise AI-written digest to Telegram and log the run to Google Sheets.\n\n## What This Template Does\n\n- Runs on a daily schedule and reads 8 curated financial RSS feeds.\n- Loops through each feed with the native RSS Read node to pull recent articles.\n- Tags each article with source name and source tier for ranking.\n- Scores and ranks stories by source quality, recency, and finance-related keyword relevance.\n- Sends the top stories to NVIDIA NIM using Mistral Large 3 to generate a concise digest.\n- Builds a Telegram-ready message with a customizable header and footer.\n- Sends the digest to a Telegram personal chat or public channel.\n- Logs successful runs to `Digest_Log` and delivery failures to `Error_Log` in Google Sheets.\n\n## Key Benefits\n\n- Free-tier-friendly setup using NVIDIA NIM, Telegram Bot API, and Google Sheets.\n- Easy to adapt for other niches by changing RSS feeds, ranking logic, and branding.\n- Reduces manual news scanning by producing a concise daily digest automatically.\n- Works for both personal use and public Telegram channel delivery.\n- Includes logging for both successful runs and delivery failures.\n\n## Features\n\n- 8 pre-configured financial RSS feeds with tier-based scoring.\n- Native n8n RSS Read node for feed ingestion.\n- NVIDIA NIM integration using Mistral Large 3 via HTTP Header Auth.\n- Customizable digest header and footer in a single Code node.\n- Google Sheets logging with `Digest_Log` and `Error_Log` tabs.\n- Error handling for Telegram delivery failures.\n\n## Requirements\n\n- An n8n instance.\n- A NVIDIA NIM API key.\n- A Telegram bot token and a chat ID or channel username.\n- A Google account with Google Sheets OAuth connected in n8n.\n\n## Target Audience\n\n- Investors and traders who want a curated daily briefing.\n- Finance professionals tracking market-moving news.\n- Founders and operators monitoring business and macro signals.\n- No-code builders creating niche Telegram digest workflows.\n- Agencies building white-label news automations.\n\n## Step-by-Step Setup Instructions\n\n- Create a HTTP Header Auth credential for NVIDIA NIM:\n  - Header name: `Authorization`\n  - Value: `Bearer YOUR_NVIDIA_API_KEY`\n- Create a Telegram bot with @BotFather and get your chat ID or channel username.\n- Open `RSS Feed Config1` and set:\n  - `telegramBotToken`\n  - `telegramChatId`\n  - `googleSheetId`\n  - any RSS feeds you want to add or replace\n- Create a Google Sheet with two tabs:\n  - `Digest_Log`\n  - `Error_Log`\n- Connect Google Sheets OAuth in n8n.\n- Run the workflow manually once before activating the schedule.\n- Confirm one successful run appears in `Digest_Log`.\n- Trigger one failure test and confirm a row appears in `Error_Log`.\n\n**Built by Cordexa Technologies**  \nhttps://cordexa.tech  \ncordexatech@gmail.com","workflow":{"meta":{"instanceId":"5e489146c7e8b4ae9bfa8950a967f30435a799ec3b2c3f5de2bb68451fd4006f","templateCredsSetupCompleted":true},"nodes":[{"id":"293a2733-fefb-4587-a7fd-c503effb4a3a","name":"Digest Complete","type":"n8n-nodes-base.set","position":[2848,-144],"parameters":{"options":{},"assignments":{"assignments":[{"id":"dc1","name":"status","type":"string","value":"Digest delivered"},{"id":"dc2","name":"timestamp","type":"string","value":"={{ new Date().toISOString() }}"},{"id":"dc3","name":"storiesSent","type":"number","value":"={{ $('Build Telegram Payload').item.json.topStories.length }}"}]}},"typeVersion":3.4},{"id":"a4144121-78d9-46b9-9243-624c3c74e701","name":"Log Digest to Sheets","type":"n8n-nodes-base.googleSheets","position":[2624,-144],"parameters":{"columns":{"value":{"Date":"={{ new Date().toLocaleDateString('en-US') }}","Run ID":"={{ $execution.id }}","Timestamp":"={{ new Date().toISOString() }}","Stories Count":"={{ $('Build Telegram Payload').item.json.topStories.length }}","Story 1 Title":"={{ $('Build Telegram Payload').item.json.topStories[0]?.title || '' }}","Story 2 Title":"={{ $('Build Telegram Payload').item.json.topStories[1]?.title || '' }}","Story 3 Title":"={{ $('Build Telegram Payload').item.json.topStories[2]?.title || '' }}","Story 4 Title":"={{ $('Build Telegram Payload').item.json.topStories[3]?.title || '' }}","Story 5 Title":"={{ $('Build Telegram Payload').item.json.topStories[4]?.title || '' }}","Telegram Status":"={{ $('Send to Telegram').item.json.ok ? 'SENT' : 'FAILED' }}","Total Articles Collected":"={{ $('Build Telegram Payload').item.json.totalCollected }}"},"schema":[{"id":"Timestamp","type":"string","display":true,"required":false,"displayName":"Timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Date","type":"string","display":true,"required":false,"displayName":"Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Stories Count","type":"string","display":true,"required":false,"displayName":"Stories Count","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Story 1 Title","type":"string","display":true,"required":false,"displayName":"Story 1 Title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Story 2 Title","type":"string","display":true,"required":false,"displayName":"Story 2 Title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Story 3 Title","type":"string","display":true,"required":false,"displayName":"Story 3 Title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Story 4 Title","type":"string","display":true,"required":false,"displayName":"Story 4 Title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Story 5 Title","type":"string","display":true,"required":false,"displayName":"Story 5 Title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total Articles Collected","type":"string","display":true,"required":false,"displayName":"Total Articles Collected","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Telegram Status","type":"string","display":true,"required":false,"displayName":"Telegram Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Run ID","type":"string","display":true,"required":false,"displayName":"Run ID","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Digest_Log"},"documentId":{"__rl":true,"mode":"id","value":"={{ $('📋 RSS Feed Config1').first().json.googleSheetId }}"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"e9cc7653-2c62-48a4-b842-4d70411f95ba","name":"Send to Telegram","type":"n8n-nodes-base.httpRequest","position":[2224,-128],"parameters":{"url":"={{ 'https://api.telegram.org/bot' + $('📋 RSS Feed Config1').first().json.telegramBotToken + '/sendMessage' }}","body":"={{ $json.telegramPayload }}","method":"POST","options":{},"sendBody":true,"contentType":"raw","rawContentType":"application/json"},"typeVersion":4.2,"continueOnFail":true},{"id":"756014c1-876b-45c2-a264-1a01dd05767a","name":"Extract Digest","type":"n8n-nodes-base.set","position":[1872,-128],"parameters":{"options":{},"assignments":{"assignments":[{"id":"ed1","name":"digestText","type":"string","value":"={{ $json.choices && $json.choices[0] ? $json.choices[0].message.content.trim() : 'Digest generation failed' }}"},{"id":"ed2","name":"topStories","type":"array","value":"={{ $('Build NIM Payload').item.json.topStories }}"},{"id":"ed3","name":"totalCollected","type":"number","value":"={{ $('Build NIM Payload').item.json.totalCollected }}"}]}},"typeVersion":3.4},{"id":"437127c2-f8d7-4605-9807-67875f422eb0","name":"Generate Digest (NIM)","type":"n8n-nodes-base.httpRequest","position":[1648,-80],"parameters":{"url":"https://integrate.api.nvidia.com/v1/chat/completions","body":"={{ $json.nimPayload }}","method":"POST","options":{},"sendBody":true,"contentType":"raw","sendHeaders":true,"authentication":"genericCredentialType","rawContentType":"application/json","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"credential-id","name":"Header Auth account"}},"typeVersion":4.2,"continueOnFail":true},{"id":"821a7e7a-c6f8-41a8-b808-8d4a63ce2e8d","name":"No Stories Alert","type":"n8n-nodes-base.httpRequest","position":[1552,368],"parameters":{"url":"={{ 'https://api.telegram.org/bot' + $('📋 RSS Feed Config1').first().json.telegramBotToken + '/sendMessage' }}","body":"={\n  \"chat_id\": \"{{ $('📋 RSS Feed Config1').first().json.telegramChatId }}\",\n  \"text\": \"No fresh finance stories were found in the current freshness window. Check the feeds or increase freshnessHours in 📋 RSS Feed Config1.\"\n}","method":"POST","options":{},"sendBody":true,"contentType":"raw","rawContentType":"application/json"},"typeVersion":4.2,"continueOnFail":true},{"id":"10687201-bec2-4505-9479-76a4be5770c6","name":"Any Stories Today?","type":"n8n-nodes-base.if","position":[960,-64],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"c1","operator":{"name":"filter.operator.gt","type":"number","operation":"gt"},"leftValue":"={{ $json.topStories ? $json.topStories.length : 0 }}","rightValue":0}]}},"typeVersion":2.2},{"id":"5ce23e1a-ae6c-460e-a91f-dd143074fc7f","name":"📋 RSS Feed Config1","type":"n8n-nodes-base.set","position":[400,-64],"parameters":{"options":{},"assignments":{"assignments":[{"id":"a1","name":"rssFeeds","type":"array","value":[{"url":"https://feeds.a.dj.com/rss/RSSMarketsMain.xml","tier":1,"source":"WSJ Markets"},{"url":"https://feeds.marketwatch.com/marketwatch/topstories/","tier":1,"source":"MarketWatch"},{"url":"https://www.investing.com/rss/news.rss","tier":2,"source":"Investing.com All News"},{"url":"https://seekingalpha.com/market_currents.xml","tier":1,"source":"Seeking Alpha All News"},{"url":"https://www.cnbc.com/id/1+1234567890/device/rss/rss.html","tier":1,"source":"CNBC Top News"},{"url":"https://www.investing.com/rss/news_25.rss","tier":2,"source":"Investing.com Stock Market News"},{"url":"https://seekingalpha.com/tag/wall-st-breakfast.xml","tier":2,"source":"Seeking Alpha Wall Street Breakfast"},{"url":"https://feeds.a.dj.com/rss/WSJcomUSBusiness.xml","tier":1,"source":"WSJ U.S. Business"}]},{"id":"a3","name":"telegramBotToken","type":"string","value":"YOUR_TELEGRAM_BOT_TOKEN"},{"id":"a4","name":"telegramChatId","type":"string","value":"YOUR_TELEGRAM_CHAT_ID_OR_@CHANNELNAME"},{"id":"a5","name":"maxStoriesInDigest","type":"number","value":5},{"id":"a6","name":"freshnessHours","type":"number","value":24},{"id":"a7","name":"googleSheetId","type":"string","value":"REPLACE_WITH_YOUR_GOOGLE_SHEET_ID"},{"id":"a8","name":"runId","type":"string","value":"={{ $execution.id }}"}]}},"typeVersion":3.4},{"id":"f8b220ba-ff59-4654-9e77-b3eb2404bcfd","name":"⏰ Schedule Trigger1","type":"n8n-nodes-base.scheduleTrigger","position":[192,-64],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 10 * * *"}]}},"typeVersion":1.2},{"id":"39afbb3e-6bf5-46d0-a38a-31807633428a","name":"Generate Feed Items","type":"n8n-nodes-base.code","position":[640,-64],"parameters":{"jsCode":"const config = $input.first().json;\nconst feeds = config.rssFeeds;\nreturn feeds.map(feed => ({\n  json: {\n    feedUrl: feed.url,\n    feedSource: feed.source,\n    feedTier: feed.tier\n  }\n}));"},"typeVersion":2},{"id":"7029c4a0-787c-46e5-9e7c-3b9c807ce480","name":"Loop Over Feeds","type":"n8n-nodes-base.splitInBatches","position":[944,-272],"parameters":{"options":{}},"typeVersion":3},{"id":"7e21c963-8d51-4c54-a074-416c5db63e45","name":"Read RSS Feed","type":"n8n-nodes-base.rssFeedRead","position":[1328,-384],"parameters":{"url":"={{ $json.feedUrl }}","options":{}},"typeVersion":1.1,"continueOnFail":true},{"id":"6b0de010-3697-4f15-8576-b873e9bc26c4","name":"Tag Articles","type":"n8n-nodes-base.code","position":[1680,-320],"parameters":{"jsCode":"const items = $input.all();\nreturn items.map(item => {\n  const feedSource = $('Loop Over Feeds').item.json.feedSource || 'Unknown';\n  const feedTier = $('Loop Over Feeds').item.json.feedTier || 3;\n  return {\n    json: {\n      title: item.json.title || '',\n      link: item.json.link || '',\n      pubDate: item.json.pubDate || item.json.isoDate || '',\n      description: (item.json.contentSnippet || item.json.content || item.json.summary || '').slice(0, 400),\n      sourceName: feedSource,\n      tier: feedTier\n    }\n  };\n});"},"typeVersion":2},{"id":"852bc0e4-c1b9-4f0e-b90c-2e3689cb150b","name":"Aggregate and Rank","type":"n8n-nodes-base.code","position":[1808,288],"parameters":{"jsCode":"const staticData = $getWorkflowStaticData('global');\nconst config = $('📋 RSS Feed Config1').first().json;\nconst currentRunId = config.runId;\n\nif (staticData.lastRunId !== currentRunId) {\n  staticData.collected = [];\n  staticData.lastRunId = currentRunId;\n  staticData.feedCount = 0;\n}\n\nconst totalFeeds = config.rssFeeds.length;\n\nconst newItems = $input.all().map(i => i.json).filter(a => a.title && a.link);\nstaticData.collected.push(...newItems);\nstaticData.feedCount = (staticData.feedCount || 0) + 1;\n\nconst allFeedsProcessed = staticData.feedCount >= totalFeeds;\n\nif (!allFeedsProcessed) {\n  return [{ json: { waiting: true, feedsProcessed: staticData.feedCount, totalFeeds } }];\n}\n\nconst freshnessMs = (config.freshnessHours || 24) * 60 * 60 * 1000;\nconst cutoff = Date.now() - freshnessMs;\nconst maxStories = config.maxStoriesInDigest || 5;\nconst bannedWords = ['sponsored', 'advertisement', 'partner content', 'paid post'];\n\nconst valid = staticData.collected.filter(a => {\n  if (!a.title || !a.link) return false;\n  const pub = a.pubDate ? new Date(a.pubDate).getTime() : 0;\n  if (pub && pub < cutoff) return false;\n  const titleLower = a.title.toLowerCase();\n  if (bannedWords.some(w => titleLower.includes(w))) return false;\n  return true;\n});\n\nconst seenLinks = new Set();\nconst deduped = valid.filter(a => {\n  if (seenLinks.has(a.link)) return false;\n  seenLinks.add(a.link);\n  return true;\n});\n\nconst scored = deduped.map(a => {\n  let score = 0;\n  if (a.tier === 1) score += 3;\n  else if (a.tier === 2) score += 2;\n  else score += 1;\n\n  const age = a.pubDate ? Date.now() - new Date(a.pubDate).getTime() : 999999999;\n  const hours = age / (1000 * 60 * 60);\n  if (hours <= 6) score += 3;\n  else if (hours <= 12) score += 2;\n  else if (hours <= 18) score += 1;\n\n  const titleLower = (a.title || '').toLowerCase();\n  const keywords = [\n    'fed', 'federal reserve', 'inflation', 'cpi', 'ppi', 'jobs', 'payrolls',\n    'earnings', 'guidance', 'revenue', 'profit', 'margin', 'forecast',\n    'stocks', 'shares', 'bond', 'bonds', 'yield', 'treasury', 'oil', 'gold',\n    'crypto', 'bitcoin', 'merger', 'acquisition', 'ipo', 'tariff', 'rate cut',\n    'rate hike', 'downgrade', 'upgrade', 'beats', 'misses', 'announce'\n  ];\n  keywords.forEach(k => { if (titleLower.includes(k)) score += 1; });\n\n  return { ...a, score };\n});\n\nconst seenTitles = new Set();\nconst topStories = scored\n  .filter(a => {\n    const key = a.title.toLowerCase().slice(0, 40);\n    if (seenTitles.has(key)) return false;\n    seenTitles.add(key);\n    return true;\n  })\n  .sort((a, b) => b.score - a.score)\n  .slice(0, maxStories);\n\nstaticData.collected = [];\nstaticData.feedCount = 0;\n\nif (topStories.length === 0) {\n  return [{ json: { topStories: [], empty: true, totalCollected: deduped.length } }];\n}\n\nreturn [{ json: { topStories, totalCollected: deduped.length } }];"},"typeVersion":2},{"id":"112bfa39-9a02-43d8-819c-74cf9daa40e4","name":"Is Processing Done?","type":"n8n-nodes-base.if","position":[2000,48],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"done_check","operator":{"name":"filter.operator.notEquals","type":"boolean","operation":"notEquals"},"leftValue":"={{ $json.waiting }}","rightValue":true}]}},"typeVersion":2.2},{"id":"6f8bd1f6-da0f-4399-bd35-ba83e9961238","name":"Build NIM Payload","type":"n8n-nodes-base.code","position":[1440,-80],"parameters":{"jsCode":"const stories = $input.first().json.topStories;\n\nconst userContent = 'Write a daily finance digest from these top ' +\n  stories.length + ' stories:\\n\\n' +\n  stories.map((s, i) => {\n    const title = (s.title || '').replace(/[\\r\\n]/g, ' ').trim();\n    const source = (s.sourceName || '').trim();\n    const published = (s.pubDate || '').trim();\n    const summary = (s.description || '').replace(/[\\r\\n]/g, ' ').trim().slice(0, 300);\n    const link = (s.link || '').trim();\n    return (i + 1) + '. Title: ' + title +\n      '\\nSource: ' + source +\n      '\\nPublished: ' + published +\n      '\\nSummary: ' + summary +\n      '\\nLink: ' + link;\n  }).join('\\n\\n');\n\nconst systemContent = 'You write a daily finance news digest for investors and operators. Write a sharp, direct digest with one clear insight per story. Format exactly like this in plain text:\\n\\n1. [Story Title]\\n[2-3 sentence summary. What happened, why it matters, one sharp insight.]\\nSource: [Source Name]\\nLink: [Article URL]\\n\\n2. [Story Title]\\n[2-3 sentence summary.]\\nSource: [Source Name]\\nLink: [Article URL]\\n\\n3. [Story Title]\\n[2-3 sentence summary.]\\nSource: [Source Name]\\nLink: [Article URL]\\n\\n4. [Story Title]\\n[2-3 sentence summary.]\\nSource: [Source Name]\\nLink: [Article URL]\\n\\n5. [Story Title]\\n[2-3 sentence summary.]\\nSource: [Source Name]\\nLink: [Article URL]\\n\\nToday\\'s Signal: [One sharp sentence about the overall market or business theme]\\n\\nRules: No em dashes. No hype words. Use plain text only. Each summary max 50 words. Never use HTML tags.';\n\nconst payload = {\n  model: 'mistralai/mistral-large-3-675b-instruct-2512',\n  max_tokens: 1500,\n  temperature: 0.7,\n  top_p: 0.9,\n  messages: [\n    { role: 'system', content: systemContent },\n    { role: 'user', content: userContent }\n  ]\n};\n\nreturn [{\n  json: {\n    nimPayload: JSON.stringify(payload),\n    topStories: stories,\n    totalCollected: $input.first().json.totalCollected\n  }\n}];"},"typeVersion":2},{"id":"3e26bf8f-6404-42f8-9a7e-9538cb9e7053","name":"Build Telegram Payload","type":"n8n-nodes-base.code","position":[2048,-128],"parameters":{"jsCode":"const rawDigest = $input.first().json.digestText || 'No digest available';\nconst chatId = $('📋 RSS Feed Config1').first().json.telegramChatId;\nconst feedCount = $('📋 RSS Feed Config1').first().json.rssFeeds.length;\n\n// Edit header and footer here if you want to rebrand the digest\nconst header = 'DAILY FINANCE DIGEST\\n' +\n               'Your signal in the financial noise\\n' +\n               '─────────────────────────\\n\\n';\n\nconst footer = '\\n─────────────────────────\\n' +\n               `Today\\'s digest curated from ${feedCount} finance feeds.\\n` +\n               'Built by Cordexa Technologies\\n' +\n               'https://cordexa.tech';\n\nconst digestText = header + rawDigest + footer;\n\nconst payload = {\n  chat_id: chatId,\n  text: digestText,\n  disable_web_page_preview: true\n};\n\nreturn [{\n  json: {\n    telegramPayload: JSON.stringify(payload),\n    digestText,\n    topStories: $input.first().json.topStories,\n    totalCollected: $input.first().json.totalCollected\n  }\n}];"},"typeVersion":2},{"id":"f24db22a-40e6-423e-99df-9d296d455c32","name":"Telegram Send OK?","type":"n8n-nodes-base.if","position":[2400,-128],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"ok_check","operator":{"name":"filter.operator.equals","type":"boolean","operation":"equals"},"leftValue":"={{ $json.ok === true }}","rightValue":true}]}},"typeVersion":2.2},{"id":"4fad0fa3-c295-415a-8475-9d8baf0f67c3","name":"Build Error Log Row","type":"n8n-nodes-base.set","position":[2448,208],"parameters":{"options":{},"assignments":{"assignments":[{"id":"er1","name":"Timestamp","type":"string","value":"={{ new Date().toISOString() }}"},{"id":"er2","name":"Run ID","type":"string","value":"={{ $execution.id }}"},{"id":"er3","name":"Stage","type":"string","value":"Send to Telegram"},{"id":"er4","name":"Error Message","type":"string","value":"={{ $json.message || $json.error || $json.description || 'Telegram request failed' }}"},{"id":"er5","name":"HTTP Status","type":"string","value":"={{ $json.statusCode || '' }}"},{"id":"er6","name":"Total Articles Collected","type":"number","value":"={{ $('Build Telegram Payload').item.json.totalCollected || 0 }}"}]}},"typeVersion":3.4},{"id":"f1524be6-cf67-41e2-a2d6-28f4d9e4cf90","name":"Log Error to Sheets","type":"n8n-nodes-base.googleSheets","position":[2640,208],"parameters":{"columns":{"value":{"Stage":"={{ $json.Stage }}","Run ID":"={{ $json['Run ID'] }}","Timestamp":"={{ $json.Timestamp }}","HTTP Status":"={{ $json['HTTP Status'] }}","Error Message":"={{ $json['Error Message'] }}","Total Articles Collected":"={{ $json['Total Articles Collected'] }}"},"schema":[{"id":"Timestamp","type":"string","display":true,"required":false,"displayName":"Timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Run ID","type":"string","display":true,"required":false,"displayName":"Run ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Stage","type":"string","display":true,"required":false,"displayName":"Stage","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Error Message","type":"string","display":true,"required":false,"displayName":"Error Message","defaultMatch":false,"canBeUsedToMatch":true},{"id":"HTTP Status","type":"string","display":true,"required":false,"displayName":"HTTP Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total Articles Collected","type":"string","display":true,"required":false,"displayName":"Total Articles Collected","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Error_Log"},"documentId":{"__rl":true,"mode":"id","value":"={{ $('📋 RSS Feed Config1').first().json.googleSheetId }}"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"f801e595-cbf0-4594-8bea-3e80b03874fa","name":"Digest Failed","type":"n8n-nodes-base.set","position":[2848,208],"parameters":{"options":{},"assignments":{"assignments":[{"id":"df1","name":"status","type":"string","value":"Digest delivery failed"},{"id":"df2","name":"timestamp","type":"string","value":"={{ new Date().toISOString() }}"}]}},"typeVersion":3.4},{"id":"024b6d54-1b76-4a92-8f76-49922b78f7ce","name":"Overview","type":"n8n-nodes-base.stickyNote","position":[-560,-544],"parameters":{"color":"#133FA4","width":680,"height":712,"content":"## Overview\n\n**Who it's for:** Operators, investors, analysts, founders, and solo builders who want a daily finance news digest delivered to Telegram without manually checking multiple RSS feeds.\n\n**What it does:** Runs once per day, reads recent stories from curated finance RSS feeds, ranks the strongest items, uses NVIDIA NIM with Mistral Large 3 to write a concise digest, sends the digest to Telegram, and logs the run to Google Sheets.\n\n**How it works:**\n1. `Schedule Trigger1` starts the workflow on a daily cron.\n2. `RSS Feed Config1` defines feeds, thresholds, Telegram values, and the target Google Sheet ID.\n3. `Generate Feed Items` and `Loop Over Feeds` process each RSS feed one at a time.\n4. `Read RSS Feed`, `Tag Articles`, and `Aggregate and Rank` collect, score, filter, deduplicate, and rank stories.\n5. `Any Stories Today?` decides whether to generate a digest or send a no-stories alert.\n6. `Build NIM Payload` and `Generate Digest (NIM)` create the AI-written digest.\n7. `Build Telegram Payload` and `Send to Telegram` deliver the final message.\n8. `Log Digest to Sheets` records successful runs, and `Log Error to Sheets` records delivery failures.\n\n**Required setup:**\n- NVIDIA NIM API key via HTTP Header Auth\n- Google Sheets OAuth2 credential\n- Telegram bot token\n- Telegram chat ID or `@channelname`\n- A Google Sheet with `Digest_Log` and `Error_Log` tabs\n\nBuilt by Cordexa Technologies  \nhttps://cordexa.tech  \ncordexatech@gmail.com"},"typeVersion":1},{"id":"c2af8166-03eb-4214-90ca-1c450077b426","name":"Step 1 — Config","type":"n8n-nodes-base.stickyNote","position":[176,-816],"parameters":{"color":7,"width":644,"height":1100,"content":"## Step 1 — Config\n\nOpen `RSS Feed Config1` and update these values before testing:\n\n- `rssFeeds` — add, remove, or replace feed URLs\n- `maxStoriesInDigest` — number of stories to include in each digest\n- `freshnessHours` — recency window for article selection\n- `telegramBotToken` — your Telegram bot token\n- `telegramChatId` — your chat ID or `@channelname`\n- `googleSheetId` — target Google Sheet ID for logs\n\nFeed format:\n- `url` — RSS feed URL\n- `source` — display name used in the digest\n- `tier` — source weight used during ranking\n\nTier meaning:\n- Tier 1 = highest-priority sources\n- Tier 2 = good secondary sources\n- Tier 3 = lower-priority or niche sources\n\nFor testing, you can temporarily increase `freshnessHours` so older articles are still eligible."},"typeVersion":1},{"id":"36b62d2a-7e5a-47d5-9d2d-e0c37c192f5d","name":"Step 2 — Credentials","type":"n8n-nodes-base.stickyNote","position":[864,-832],"parameters":{"color":7,"width":972,"height":1108,"content":"## Step 2 — Credentials\n\nConnect these credentials before going live:\n\n- **HTTP Header Auth** on `Generate Digest (NIM)`\n  - Header name: `Authorization`\n  - Value: `Bearer YOUR_NVIDIA_API_KEY`\n\n- **Google Sheets OAuth2** on both Sheets nodes\n  - `Log Digest to Sheets`\n  - `Log Error to Sheets`\n\nThis workflow does **not** use a Telegram credential node. Telegram delivery uses the bot token stored in `RSS Feed Config1`, and the HTTP Request nodes read that value directly.\n\nAlso confirm `Generate Digest (NIM)` still sends:\n- `Content-Type: application/json`\n- POST request to `https://integrate.api.nvidia.com/v1/chat/completions`"},"typeVersion":1},{"id":"b107921c-7442-433a-b912-f32e546cadec","name":"Optional — Telegram Channel Setup","type":"n8n-nodes-base.stickyNote","position":[1888,-448],"parameters":{"color":7,"width":620,"height":288,"content":"## Optional — Telegram Channel Setup\n\nUse a personal chat ID for testing first.\n\nFor a channel:\n1. Create the channel\n2. Add the bot as an admin\n3. Set `telegramChatId` to `@channelname`\n\nAll Telegram nodes read the token and chat ID from `📋 RSS Feed Config1`."},"typeVersion":1},{"id":"09c70b5c-0f85-4fc4-9c4f-d3c0cf4636a7","name":"Step 3 — Delivery","type":"n8n-nodes-base.stickyNote","position":[2432,384],"parameters":{"color":7,"width":540,"height":466,"content":"## Step 3 — Delivery\n\nThis workflow writes to Google Sheets and sends the digest to Telegram.\n\nBefore going live:\n- Create a Google Sheet with two tabs:\n  - `Digest_Log`\n  - `Error_Log`\n- Make sure `googleSheetId` is set in `RSS Feed Config1`\n- Confirm both Sheets nodes point to the same target sheet\n- Run one manual test and confirm a new row appears in `Digest_Log`\n- Force one Telegram delivery failure and confirm a row appears in `Error_Log`\n\nDelivery behavior:\n- `Log Digest to Sheets` records successful runs\n- `Log Error to Sheets` records Telegram delivery failures\n- `No Stories Alert` sends a Telegram message when no fresh stories qualify for the digest"},"typeVersion":1},{"id":"fd69712f-4f83-4370-b146-39ee2729a996","name":"Step 4 — Activate","type":"n8n-nodes-base.stickyNote","position":[3056,-112],"parameters":{"color":7,"width":388,"height":380,"content":"## Step 4 — Activate\n\nBefore activating the schedule:\n\n- Run the workflow manually once\n- Confirm the digest reaches Telegram\n- Confirm `Digest_Log` receives a new row\n- Confirm story count and titles are recorded correctly\n- Confirm the no-stories branch works when no fresh items qualify\n- Confirm `Error_Log` receives a row when Telegram delivery fails\n\nActivate the workflow only after both success and error paths behave as expected."},"typeVersion":1}],"pinData":{},"connections":{"Tag Articles":{"main":[[{"node":"Aggregate and Rank","type":"main","index":0}]]},"Read RSS Feed":{"main":[[{"node":"Tag Articles","type":"main","index":0}]]},"Extract Digest":{"main":[[{"node":"Build Telegram Payload","type":"main","index":0}]]},"Loop Over Feeds":{"main":[[],[{"node":"Read RSS Feed","type":"main","index":0}]]},"Send to Telegram":{"main":[[{"node":"Telegram Send OK?","type":"main","index":0}]]},"Build NIM Payload":{"main":[[{"node":"Generate Digest (NIM)","type":"main","index":0}]]},"Telegram Send OK?":{"main":[[{"node":"Log Digest to Sheets","type":"main","index":0}],[{"node":"Build Error Log Row","type":"main","index":0}]]},"Aggregate and Rank":{"main":[[{"node":"Is Processing Done?","type":"main","index":0}]]},"Any Stories Today?":{"main":[[{"node":"Build NIM Payload","type":"main","index":0}],[{"node":"No Stories Alert","type":"main","index":0}]]},"Build Error Log Row":{"main":[[{"node":"Log Error to Sheets","type":"main","index":0}]]},"Generate Feed Items":{"main":[[{"node":"Loop Over Feeds","type":"main","index":0}]]},"Is Processing Done?":{"main":[[{"node":"Any Stories Today?","type":"main","index":0}],[{"node":"Loop Over Feeds","type":"main","index":0}]]},"Log Error to Sheets":{"main":[[{"node":"Digest Failed","type":"main","index":0}]]},"Log Digest to Sheets":{"main":[[{"node":"Digest Complete","type":"main","index":0}]]},"Generate Digest (NIM)":{"main":[[{"node":"Extract Digest","type":"main","index":0}]]},"⏰ Schedule Trigger1":{"main":[[{"node":"📋 RSS Feed Config1","type":"main","index":0}]]},"📋 RSS Feed Config1":{"main":[[{"node":"Generate Feed Items","type":"main","index":0}]]},"Build Telegram Payload":{"main":[[{"node":"Send to Telegram","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":27,"nodeTypes":{"n8n-nodes-base.if":{"count":3},"n8n-nodes-base.set":{"count":5},"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-base.rssFeedRead":{"count":1},"n8n-nodes-base.googleSheets":{"count":2},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Cordexa Technologies ","username":"cordexa","bio":"We build smarter systems for small businesses. We help local businesses and growing teams, run on systems that actually work. We do business process automation, done-for-you consulting, and SaaS development, just what gets the job done. The workflows we publish are the same ones we build for clients.","verified":false,"links":["https://www.cordexa.tech/"],"avatar":"https://gravatar.com/avatar/fad43dfd269df2832803af8b62f13bfa84fa336f3e288b29799ec859fc297f8c?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":37,"icon":"fa:rss","name":"n8n-nodes-base.rssFeedRead","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/why-i-chose-n8n-over-zapier-in-2020/","icon":"😍","label":"Why I chose n8n over Zapier in 2020"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.rssfeedread/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"RSS Read","color":"#b02020"},"iconData":{"icon":"rss","type":"icon"},"displayName":"RSS Read","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":33,"name":"Social Media"},{"id":49,"name":"AI Summarization"}],"image":[]}}