Workflow: 🎦💌Advanced YouTube RSS Feed Buddy for Your Favorite Channels
Integrations: aggregate, code, filter, formTrigger, gmail, httpRequest, manualTrigger, merge, noOp, rssFeedRead, scheduleTrigger, set, splitOut, stickyNote, telegram

{"id": "tHgDFmFyuj6DnP6l", "meta": {"instanceId": "workflow-e1840942", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:57.923526", "updatedAt": "2025-09-29T07:07:57.923541", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "\ud83c\udfa6\ud83d\udc8cAdvanced YouTube RSS Feed Buddy for Your Favorite Channels", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "ab1db660-96d6-402c-b6e8-8c4d278577d1", "name": "On form submission", "type": "n8n-nodes-base.formTrigger", "position": [60, -220], "webhookId": "f6b3bbf7-b6e9-4ade-add4-12004d70b61c", "parameters": {"options": {"appendAttribution": false}, "formTitle": "RSS Feed for YouTube Channels", "formFields": {"values": [{"fieldType": "textarea", "fieldLabel": "YouTube Channel Ids", "placeholder": "[ \"UCMcoud_ZW7cfxeIugBflSBw\", \"UCtevzRsHEKhs-RK8pAqwSyQ\" ]"}]}, "responseMode": "lastNode", "formDescription": "Create RSS Feeds for Your Favorite YouTube Channels"}, "typeVersion": 2.2, "notes": "This formTrigger node performs automated tasks as part of the workflow."}, {"id": "6ea8d71f-a5f8-46d5-bf51-20df75ec6202", "name": "Create RSS Feed URLs1", "type": "n8n-nodes-base.set", "position": [60, 420], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "8159d367-513c-406b-8ad7-36f65c2e6512", "name": "rss_feed_url", "type": "string", "value": "={{ $env.WEBHOOK_URL }}{{ $json.youtube_channel_id }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "038e95ce-656e-4f6a-a9d8-96555aeeccf2", "name": "Get Channel Ids", "type": "n8n-nodes-base.set", "position": [460, 80], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "4b276cf0-6bb5-489e-a776-327291608b8e", "name": "ids", "type": "array", "value": "={{ $json[\"YouTube Channel Ids\"].length > 0  ? $json[\"YouTube Channel Ids\"] : $json[\"Default YouTube Channel Ids\"] }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "7c8b43fb-52c9-4a3e-b5ff-2c21fe8fb183", "name": "Create YouTube API URL", "type": "n8n-nodes-base.code", "position": [1380, -220], "parameters": {"jsCode": "// Define the base URL for the YouTube Data API\nconst BASE_URL = '{{ $env.API_BASE_URL }}';\n\n// Get all input items\nconst items = $input.all();\n\n// Process each item and create YouTube URLs\nconst results = items.map(item => {\n    const VIDEO_ID = item.json.VIDEO_ID;\n    const GOOGLE_API_KEY = item.json.GOOGLE_API_KEY;\n\n    if (!VIDEO_ID) {\n        throw new Error('The video ID parameter is empty.');\n    }\n\n    if (!GOOGLE_API_KEY) {\n        throw new Error('The Google API Key is missing.');\n    }\n\n    // Construct the API URL with the video ID and dynamically retrieved API key\n    const youtubeUrl = `${BASE_URL}?part=snippet,contentDetails,status,statistics,player,topicDetails&id=${VIDEO_ID}&key=${GOOGLE_API_KEY}`;\n\n    return {\n        json: {\n            youtubeUrl: youtubeUrl\n        }\n    };\n});\n\n// Return array of results\nreturn results;\n\n"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "1941d169-f91f-4500-af55-deb7a5b2bc23", "name": "Get YouTube Video Details", "type": "n8n-nodes-base.httpRequest", "position": [1580, -220], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "ca49479c-b8e6-44db-a021-2b0f27a16bfc", "name": "Sticky Note14", "type": "n8n-nodes-base.stickyNote", "position": [1280, -340], "parameters": {"color": 3, "width": 680, "height": 300, "content": "## YouTube Video Details\n{{ $env.WEBHOOK_URL }}\n{{ $env.API_BASE_URL }}"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "8224915d-c7c4-449d-8210-463b5c5c39f0", "name": "Workflow Variables", "type": "n8n-nodes-base.set", "position": [1020, -220], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "e656b8ef-4266-4f50-bd41-703b4bdb04df", "name": "GOOGLE_API_KEY", "type": "string", "value": "[Add-Your-Google-API-Key-Here]"}, {"id": "32db428d-a2e2-48a0-92c6-3880e744d140", "name": "VIDEO_ID", "type": "string", "value": "={{ $json.id.split(\":\").last() }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "cf334637-5632-4d2c-85b9-5ff232e2a164", "name": "Sticky Note12", "type": "n8n-nodes-base.stickyNote", "position": [900, -420], "parameters": {"width": 340, "height": 380, "content": "## \ud83d\udca1 YouTube Variables\n{{ $env.API_BASE_URL }}\n\n- GOOGLE_API_KEY (\ud83c\udf1fAdd your api key)\n- VIDEO_ID"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "290bbc35-3835-4f50-9e02-bac8414f35bb", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [1480, 580], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "jEMSvKmtYfzAkhe6", "name": "OpenAi account"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "fd65592b-e64a-445e-b090-1fecd15de9c7", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [1020, 420], "parameters": {"mode": "combine", "options": {}, "advanced": true, "joinMode": "enrichInput1", "mergeByFields": {"values": [{"field1": "items[0].id", "field2": "id"}]}}, "typeVersion": 3, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "a3f82f16-5b34-4935-a3a0-ccd7f107eb80", "name": "OpenAI Chat Model1", "type": "n8n-nodes-base.noOp", "position": [1480, 1020], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "jEMSvKmtYfzAkhe6", "name": "OpenAi account"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "998fb87b-100c-4b93-bddf-4e09ccc7f312", "name": "Default YouTube Channel Ids", "type": "n8n-nodes-base.set", "position": [260, 80], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "73b9220c-d701-4a29-8aaf-3732d1db0ce6", "name": "Default YouTube Channel Ids", "type": "array", "value": "=[ \"UCTwwnM-YB8zWC0RWwhO5sGw\", \"UCMcoud_ZW7cfxeIugBflSBw\", \"UCtevzRsHEKhs-RK8pAqwSyQ\"]"}]}, "includeOtherFields": true}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "96ca1617-1ee3-4ffa-ae63-d90fc07484c5", "name": "YouTube Channel Ids", "type": "n8n-nodes-base.set", "position": [60, 80], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "e01feba6-36c0-4fbe-803b-927069b56506", "name": "YouTube Channel Ids", "type": "string", "value": ""}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "0b5ac0a0-b4cc-43a8-8417-e488b9668c9d", "name": "RSS Read  - Max 15 Latest Videos per Channel", "type": "n8n-nodes-base.rssFeedRead", "position": [260, 420], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {"ignoreSSL": false}}, "typeVersion": 1.1, "notes": "This rssFeedRead node performs automated tasks as part of the workflow."}, {"id": "474daccd-01ed-4c9e-9c92-be33376b5770", "name": "Label New Videos", "type": "n8n-nodes-base.code", "position": [460, 420], "parameters": {"jsCode": "/**\n * Processes YouTube video items and adds recent_videos flag based on publication date\n * @param {Object[]} $input.all() - Array of input items from previous node\n * @param {number} days - Number of days to check for recent videos (default: 3)\n * @returns {Object[]} - Processed video items with additional properties\n */\ntry {\n  // Get all input items from previous node\n  const items = $input.all();\n  \n  // Define the threshold for recent videos (in days)\n  const days = 3;\n\n  // Validate inputs\n  if (!Array.isArray(items)) {\n    throw new Error('Input must be an array of items');\n  }\n\n  // Process each video item\n  const videos = items.map((item, index) => {\n    try {\n      // Validate required properties\n      if (!item?.json?.id || !item?.json?.pubDate) {\n        throw new Error(`Missing required properties in item ${index}`);\n      }\n\n      // Extract YouTube video ID from the full ID string\n      const videoId = item.json.id.split(':')[2];\n\n      // Calculate if video is recent based on publication date\n      const pubDate = new Date(item.json.pubDate);\n      const thresholdDate = DateTime.now()\n        .setZone('America/New_York')\n        .startOf('day')\n        .minus({days: days});\n\n      // Return processed item with additional properties\n      return {\n        json: {\n          ...item.json,\n          id: videoId,\n          recent_videos: pubDate > new Date(thresholdDate)\n        }\n      };\n    } catch (itemError) {\n      // Handle individual item processing errors\n      console.error(`Error processing item ${index}:`, itemError.message);\n      // Return original item if processing fails\n      return item;\n    }\n  });\n\n  return videos;\n\n} catch (error) {\n  // Handle general execution errors\n  console.error('Error in code execution:', error.message);\n  throw new Error(`Failed to process video items: ${error.message}`);\n}\n"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "0a47e235-33e5-4b74-8b54-2c97d25fb55c", "name": "Get New Videos", "type": "n8n-nodes-base.filter", "position": [660, 420], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "914cc748-6fc4-4031-8e8c-849657b7e661", "operator": {"type": "boolean", "operation": "true", "singleValue": true}, "leftValue": "={{ $json.recent_videos }}", "rightValue": ""}]}}, "typeVersion": 2.2, "notes": "This filter node performs automated tasks as part of the workflow."}, {"id": "d7d6319e-e3c9-44ec-b178-15f2f98f7a8c", "name": "Prepare For Telegram Message", "type": "n8n-nodes-base.set", "position": [1380, 80], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "dea3ff12-0650-474e-aa9e-e0912cb971de", "name": "items[0].id", "type": "string", "value": "={{ $json.items[0].id }}"}, {"id": "11c57b3a-d958-4dda-a52c-91e45b530eaf", "name": "items[0].snippet.title", "type": "string", "value": "={{ $json.items[0].snippet.title }}"}, {"id": "b519c5a4-cef1-46e7-8a33-138262e989e4", "name": "items[0].snippet.thumbnails.standard.url", "type": "string", "value": "={{ $json.items[0].snippet.thumbnails.standard.url }}"}, {"id": "62c5158a-bd64-428b-b681-0add1c8a2177", "name": "link", "type": "string", "value": "={{ $json.link }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "30313019-1973-450a-92fa-00d0f0c4480e", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [1280, 0], "parameters": {"color": 5, "width": 520, "height": 280, "content": "## Send Latest Videos as Telegram Message"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "215e6ee8-af50-4b42-ac21-64dcef41d9f1", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [1280, 320], "parameters": {"color": 6, "width": 680, "height": 400, "content": "## Send Email for Each Latest Video (Multiple Emails)"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "df46f216-d365-4229-884c-95925ed1c3b6", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [1280, 760], "parameters": {"color": 6, "width": 680, "height": 400, "content": "## Send Email with a List of Latest Videos (One email only)"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "ef415f16-fb77-441f-9f34-c1962da8f669", "name": "One List Object", "type": "n8n-nodes-base.aggregate", "position": [1020, 860], "parameters": {"options": {}, "aggregate": "aggregateAllItemData"}, "typeVersion": 1, "notes": "This aggregate node performs automated tasks as part of the workflow."}, {"id": "77b37e2f-eb9c-4b85-84db-a59525390d10", "name": "Prepare YouTube Data", "type": "n8n-nodes-base.set", "position": [1780, -220], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "b8e16aa1-b2a7-46c2-8d0a-5a6d203f8902", "name": "items[0].id", "type": "string", "value": "={{ $json.items[0].id }}"}, {"id": "560c5991-8aed-474b-99fa-2660ccb5ab8f", "name": "items[0].snippet.title", "type": "string", "value": "={{ $json.items[0].snippet.title }}"}, {"id": "dee0a454-56d3-4c17-83d3-2e3a368414af", "name": "items[0].snippet.description", "type": "string", "value": "={{ $json.items[0].snippet.description }}"}, {"id": "fba2482f-9cc0-4678-b035-f51367a6bff1", "name": "items[0].player.embedHtml", "type": "string", "value": "={{ $json.items[0].player.embedHtml }}"}, {"id": "21f47e6a-6847-4c54-87b1-08953d640011", "name": "items[0].snippet.thumbnails.standard", "type": "object", "value": "={{ $json.items[0].snippet.thumbnails.standard }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "b0428f2b-e565-4592-9350-f70a3bcab255", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [-20, 320], "parameters": {"color": 3, "width": 880, "height": 300, "content": "## Create YouTube RSS Feed from Favorite Channel Ids"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "b5fb976b-6f08-4e6d-8d49-821bbb24230a", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [-20, 0], "parameters": {"width": 880, "height": 280, "content": "## Prepare the List of YouTube Channel Ids"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "c871e70f-187d-46e4-b012-f8e4318b066f", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [-20, -300], "parameters": {"color": 4, "width": 280, "height": 260, "content": "## \ud83d\udc4dTry Me!"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "d19e2874-2d5b-4583-9345-d2f10e0b991e", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [-340, -300], "parameters": {"color": 4, "width": 280, "height": 260, "content": "## \u231aSet Your Schedule"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "b295807d-15aa-4a72-8e96-31d21534987a", "name": "Create List of Channel Ids", "type": "n8n-nodes-base.splitOut", "position": [660, 80], "parameters": {"options": {"destinationFieldName": "youtube_channel_id"}, "fieldToSplitOut": "ids"}, "typeVersion": 1, "notes": "This splitOut node performs automated tasks as part of the workflow."}, {"id": "f8c8896e-474b-4213-a3d2-cc737e81e37f", "name": "Every Day", "type": "n8n-nodes-base.scheduleTrigger", "position": [-240, -220], "parameters": {"rule": {"interval": [{}]}}, "typeVersion": 1.2, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "347c55fa-24b9-46c9-a44a-786bb84cb300", "name": "Multiple Emails", "type": "n8n-nodes-base.gmail", "position": [1740, 420], "webhookId": "c016d26a-1c8a-4564-b715-a65bfcc902ea", "parameters": {"sendTo": "joe@example.com", "message": "={{ $json.text }}", "options": {}, "subject": "Latest YouTube Videos from Your Favorite Channels"}, "credentials": {"gmailOAuth2": {"id": "1xpVDEQ1yx8gV022", "name": "Gmail account"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "3d5135db-4603-487e-ae70-4c457719b217", "name": "Single Email", "type": "n8n-nodes-base.gmail", "position": [1740, 860], "webhookId": "c016d26a-1c8a-4564-b715-a65bfcc902ea", "parameters": {"sendTo": "joe@example.com", "message": "={{ $json.text }}", "options": {}, "subject": "Latest YouTube Videos from Your Favorite Channels"}, "credentials": {"gmailOAuth2": {"id": "1xpVDEQ1yx8gV022", "name": "Gmail account"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "3282d84b-497c-4a1c-90d7-7baabe614ca9", "name": "Sticky Note7", "type": "n8n-nodes-base.stickyNote", "position": [-640, -460], "parameters": {"color": 7, "width": 2640, "height": 1660, "content": "# \ud83c\udfa6\ud83d\udc8c Advanced YouTube RSS Feed Buddy for Your Favorite Channels\n## Automated Telegram and Email Notificatons for Latest YouTube Videos from Custom YouTube RSS Feeds"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "4b00df24-e3bb-44d0-afd5-be7afe272a6e", "name": "Create Email per Video", "type": "n8n-nodes-base.noOp", "position": [1380, 420], "parameters": {"text": "=Create a list of responsive HTML email cards with the following requirements:\n\n## Use the following JSON data to populate the content:\n{{ $json.items.toJsonString() }}\n\n## Design requirements:\n- Use the HTML Card Template example provided which uses a clean, modern card layout\n- Use safe email-compatible HTML and inline CSS\n- Include padding and margins for readability\n- Make the title clickable and link to the YouTube URL\n- Display the author name and publication date\n- Use web-safe fonts\n- Ensure the card is mobile-responsive\n- Keep the design simple and professional\n- Add a YouTube play button icon or indication that it's a video\n\n3. Output only the HTML code without any preample or further explanations.  Remove all ``` and ```html from the response.\n\nThe HTML should be optimized for email clients and follow email HTML best practices.\n\n### HTML Card Template example:\n\n<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\\n  <tr>\\n    <td align=\"center\">\\n      <table width=\"600\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"max-width: 100%; border: 1px solid #e0e0e0; border-radius: 8px; font-family: Arial, sans-serif; background-color: #ffffff;\">\\n        <tr>\\n          <td style=\"padding: 16px;\">\\n            <img src=\"{{ $env.WEBHOOK_URL }}\" alt=\"Video Thumbnail\" style=\"width: 100%; border-radius: 8px; display: block;\"/>\\n            <h2 style=\"font-size: 20px; margin: 12px 0; color: #333;\"><a href=\"//www.youtube.com/embed/gTZOxYV379M\" style=\"text-decoration: none; color: #1a73e8;\">n8n Tutorial #10: Two n8n features to build AI Agents faster & easier</a></h2>\\n            <p style=\"color: #555; font-size: 14px; line-height: 1.5; margin: 8px 0;\">Discover how to build AI Agents and Tools faster and easier using n8n's built in <span style=\"font-weight: bold;\">$fromAI()</span> function as well as their Easy button. Find out which solution may be better for you.</p>\\n            <div style=\"padding: 10px 0;\">\\n              <p style=\"color: #888; font-size: 12px; margin: 0;\">\ud83d\udc68\u200d\ud83d\udcbc Business Inquiries: <a href=\"mailto:ben@smarterchats.com\" style=\"color: #1a73e8; text-decoration: none;\">ben@smarterchats.com</a></p>\\n              <p style=\"color: #888; font-size: 12px; margin: 0;\">Timestamps: 0:00 Intro | 0:35 The hack | 1:13 Solution 1: Easy | 1:30 Demo | 3:11 $fromAI()</p>\\n            </div>\\n            <div style=\"text-align: center; margin-top: 8px;\">\\n              <a href=\"//www.youtube.com/embed/gTZOxYV379M\" style=\"display: inline-block; background-color: #ff0000; color: #ffffff; padding: 10px 15px; border-radius: 4px; text-decoration: none; font-weight: bold;\">\u25b6 Play Video</a>\\n            </div>\\n          </td>\\n        </tr>\\n      </table>\\n    </td>\\n  </tr>\\n</table>\n", "promptType": "define"}, "typeVersion": 1.5, "notes": "This chainLlm node performs automated tasks as part of the workflow."}, {"id": "3b50b7c2-8a2a-4383-9f61-757fc1db61c0", "name": "Create One Email for All Videos", "type": "n8n-nodes-base.noOp", "position": [1380, 860], "parameters": {"text": "=Create a list of responsive HTML email cards with the following requirements:\n\n## Use the following JSON data to populate the content:\n{{ $json.data.toJsonString() }}\n\n## Design requirements:\n- Use the HTML Card Template example provided which uses a clean, modern card layout\n- Use safe email-compatible HTML and inline CSS\n- Include padding and margins for readability\n- Make the title clickable and link to the YouTube URL\n- Display the author name and publication date\n- Use web-safe fonts\n- Ensure the card is mobile-responsive\n- Keep the design simple and professional\n- Add a YouTube play button icon or indication that it's a video\n\n3. Output only the HTML code without any preample or further explanations.  Remove all ``` and ```html from the response.\n\nThe HTML should be optimized for email clients and follow email HTML best practices.\n\n### HTML Card Template example:\n\n<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\\n  <tr>\\n    <td align=\"center\">\\n      <table width=\"600\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"max-width: 100%; border: 1px solid #e0e0e0; border-radius: 8px; font-family: Arial, sans-serif; background-color: #ffffff;\">\\n        <tr>\\n          <td style=\"padding: 16px;\">\\n            <img src=\"{{ $env.WEBHOOK_URL }}\" alt=\"Video Thumbnail\" style=\"width: 100%; border-radius: 8px; display: block;\"/>\\n            <h2 style=\"font-size: 20px; margin: 12px 0; color: #333;\"><a href=\"//www.youtube.com/embed/gTZOxYV379M\" style=\"text-decoration: none; color: #1a73e8;\">n8n Tutorial #10: Two n8n features to build AI Agents faster & easier</a></h2>\\n            <p style=\"color: #555; font-size: 14px; line-height: 1.5; margin: 8px 0;\">Discover how to build AI Agents and Tools faster and easier using n8n's built in <span style=\"font-weight: bold;\">$fromAI()</span> function as well as their Easy button. Find out which solution may be better for you.</p>\\n            <div style=\"padding: 10px 0;\">\\n              <p style=\"color: #888; font-size: 12px; margin: 0;\">\ud83d\udc68\u200d\ud83d\udcbc Business Inquiries: <a href=\"mailto:ben@smarterchats.com\" style=\"color: #1a73e8; text-decoration: none;\">ben@smarterchats.com</a></p>\\n              <p style=\"color: #888; font-size: 12px; margin: 0;\">Timestamps: 0:00 Intro | 0:35 The hack | 1:13 Solution 1: Easy | 1:30 Demo | 3:11 $fromAI()</p>\\n            </div>\\n            <div style=\"text-align: center; margin-top: 8px;\">\\n              <a href=\"//www.youtube.com/embed/gTZOxYV379M\" style=\"display: inline-block; background-color: #ff0000; color: #ffffff; padding: 10px 15px; border-radius: 4px; text-decoration: none; font-weight: bold;\">\u25b6 Play Video</a>\\n            </div>\\n          </td>\\n        </tr>\\n      </table>\\n    </td>\\n  </tr>\\n</table>\n", "promptType": "define"}, "typeVersion": 1.5, "notes": "This chainLlm node performs automated tasks as part of the workflow."}, {"id": "0a6bc236-1e8d-43bf-ac80-483d13531b06", "name": "Telegram", "type": "n8n-nodes-base.telegram", "position": [1580, 80], "webhookId": "93342863-02c0-42ee-98c3-a2ec72b3bf12", "parameters": {"file": "={{ $json.items[0].snippet.thumbnails.standard.url }}", "chatId": "={{ $env.TELEGRAM_CHAT_ID }}", "operation": "sendPhoto", "additionalFields": {"caption": "=New YouTube Video From Your Favorite Channel {{ $json.items[0].snippet.title }} {{ $json.items[0].snippet.thumbnails.standard.url }} {{ $json.link }}"}}, "credentials": {"telegramApi": {"id": "pAIFhguJlkO3c7aQ", "name": "Telegram account"}}, "typeVersion": 1.2, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "e2a39e5e-2df9-4165-92e5-ed7b4f3837ce", "name": "Create RSS Feed URLs", "type": "n8n-nodes-base.set", "position": [460, 860], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "8159d367-513c-406b-8ad7-36f65c2e6512", "name": "rss_feed_url", "type": "string", "value": "={{ $env.WEBHOOK_URL }}{{ $json.youtube_channel_id }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "228acccf-7d8f-4b07-9b0d-e88e3284a4c5", "name": "RSS Read  - Max 15 Latest Videos per Channel1", "type": "n8n-nodes-base.rssFeedRead", "position": [660, 860], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {"ignoreSSL": false}}, "typeVersion": 1.1, "notes": "This rssFeedRead node performs automated tasks as part of the workflow."}, {"id": "c6f2cd3b-7920-4f1d-a2c2-299dcd4ef592", "name": "Create List of Channel Ids1", "type": "n8n-nodes-base.splitOut", "position": [260, 860], "parameters": {"options": {"destinationFieldName": "youtube_channel_id"}, "fieldToSplitOut": "ids"}, "typeVersion": 1, "notes": "This splitOut node performs automated tasks as part of the workflow."}, {"id": "e1a040f0-513c-4810-9b6d-9db5a4ac64a5", "name": "Sticky Note8", "type": "n8n-nodes-base.stickyNote", "position": [-20, 740], "parameters": {"color": 2, "width": 880, "height": 320, "content": "## Simple Option for Creating YouTube RSS Feed by Channel Ids"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "b1229199-464c-42e0-b8c2-8cc58bebfeb0", "name": "When clicking \u2018Test workflow\u2019", "type": "n8n-nodes-base.manualTrigger", "disabled": true, "position": [-200, 660], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "5b271425-aa7e-4703-a89f-64f10d6396dc", "name": "YouTube Channel Ids1", "type": "n8n-nodes-base.set", "position": [60, 860], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "73b9220c-d701-4a29-8aaf-3732d1db0ce6", "name": "ids", "type": "array", "value": "=[ \"UCTwwnM-YB8zWC0RWwhO5sGw\", \"UCMcoud_ZW7cfxeIugBflSBw\", \"UCtevzRsHEKhs-RK8pAqwSyQ\"]"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "d07a4c79-9035-4eab-84c8-8ab31454471f", "name": "Sticky Note9", "type": "n8n-nodes-base.stickyNote", "position": [-600, 0], "parameters": {"width": 540, "height": 1060, "content": "## \ud83c\udfaf Description\n\nThis workflow creates an automated system for monitoring and receiving notifications about new videos from your favorite YouTube channels through RSS feeds, with customizable email and Telegram notifications.\n\n## \ud83c\udf1f Key Features\n**\ud83d\udce1 RSS Feed Management**\n- Accepts custom YouTube channel IDs or uses default channels\n- Automatically creates RSS feeds for each YouTube channel\n- Monitors channels for new video uploads\n- Labels and filters recent videos within a 3-day window (change this as required)\n\n\n**\ud83d\udce8 Multi-Channel Notification System**\n- Sends Telegram notifications with video thumbnails and links\n- Delivers customized email notifications in two formats:\n  - Individual emails for each new video\n  - Single digest email containing all new videos\n\n\n**\u2699\ufe0f Content Processing**\n- Fetches detailed video information using YouTube API\n- Creates responsive HTML email templates with video previews\n- Includes video thumbnails, titles, descriptions, and direct links\n- Maintains professional formatting across different email clients\n\n\n## \ud83d\udee0\ufe0f Setup Requirements\n**\ud83d\udd11 API Configuration**\n- YouTube Data API credentials\n- Gmail account for sending notifications\n- Telegram bot token and chat ID\n- OpenAI API key for content processing\n\n\n**\ud83d\udccb Channel Management**\n- Add YouTube channel IDs through form input\n- Configure default channel list\n- Set notification preferences\n- Adjust monitoring schedule\n\n\nThis workflow is perfect for content creators, marketers, or anyone wanting to stay updated with their favorite YouTube channels through automated, professionally formatted notifications delivered via email and Telegram.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}], "active": true, "pinData": {}, "settings": {"timezone": "UTC", "callerPolicy": "workflowsFromSameOwner", "executionOrder": "v1", "saveManualExecutions": true, "errorWorkflow": null, "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "7d101e72-043a-42f0-a28a-4253d204869e", "connections": {"1941d169-f91f-4500-af55-deb7a5b2bc23": {"main": [[{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23", "type": "main", "index": 0}], [{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23-8d8dec14", "type": "main", "index": 0}], [{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23-58372aa2", "type": "main", "index": 0}], [{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23-72993e86", "type": "main", "index": 0}], [{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23-c7ada235", "type": "main", "index": 0}], [{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23-3ad9d094", "type": "main", "index": 0}], [{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23-da7fddd9", "type": "main", "index": 0}], [{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23-93060881", "type": "main", "index": 0}], [{"node": "error-handler-1941d169-f91f-4500-af55-deb7a5b2bc23-5dd24c46", "type": "main", "index": 0}]]}, "290bbc35-3835-4f50-9e02-bac8414f35bb": {"main": [[{"node": "error-handler-290bbc35-3835-4f50-9e02-bac8414f35bb-ee205da8", "type": "main", "index": 0}]]}, "a3f82f16-5b34-4935-a3a0-ccd7f107eb80": {"main": [[{"node": "error-handler-a3f82f16-5b34-4935-a3a0-ccd7f107eb80-210d37f9", "type": "main", "index": 0}]]}, "0a6bc236-1e8d-43bf-ac80-483d13531b06": {"main": [[{"node": "error-handler-0a6bc236-1e8d-43bf-ac80-483d13531b06-728a4318", "type": "main", "index": 0}]]}}, "description": "Automated workflow: \ud83c\udfa6\ud83d\udc8cAdvanced YouTube RSS Feed Buddy for Your Favorite Channels. This workflow integrates 17 different services: stickyNote, httpRequest, formTrigger, filter, telegram. It contains 46 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: \ud83c\udfa6\ud83d\udc8cAdvanced YouTube RSS Feed Buddy for Your Favorite Channels. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}