{
  "name": "Digest new YouTube videos to Slack with Google Sheets, RapidAPI & GPT-4o-mini",
  "nodes": [
    {
      "id": "f539cbde-f850-4d48-b1b9-40b764452b06",
      "name": "Get Subtitles",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -660,
        100
      ]
    },
    {
      "id": "4a38af14-faf0-40f4-a467-e97328c001a1",
      "name": "Get Timestamps",
      "type": "n8n-nodes-base.code",
      "position": [
        -440,
        100
      ]
    },
    {
      "id": "92df3a24-985d-48e0-89eb-74beb147b190",
      "name": "Formatted Chapter Text",
      "type": "n8n-nodes-base.code",
      "position": [
        0,
        0
      ]
    },
    {
      "id": "8b713190-5fb5-4aaf-bf93-3ac0b8c9e561",
      "name": "Generate Slack Blocks - Detailed Summary",
      "type": "n8n-nodes-base.code",
      "position": [
        816,
        100
      ]
    },
    {
      "id": "6ef98839-1592-407d-a3d7-c91edbff2f4f",
      "name": "Formatted Transcript w/o Chapters",
      "type": "n8n-nodes-base.code",
      "position": [
        220,
        200
      ]
    },
    {
      "id": "6570c170-cd9f-444f-b033-d9417f435967",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -3520,
        500
      ]
    },
    {
      "id": "3ea53e09-b01f-47d4-83ca-e82f918e37ca",
      "name": "If newly published",
      "type": "n8n-nodes-base.code",
      "position": [
        -2420,
        200
      ]
    },
    {
      "id": "dab0151c-c337-41eb-86b3-21e0f6a4ac4f",
      "name": "Check for new videos",
      "type": "n8n-nodes-base.if",
      "position": [
        -2200,
        200
      ]
    },
    {
      "id": "18d40ceb-bf64-4d44-8ec9-8d27e2b721ab",
      "name": "Get RSS Links",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -3300,
        500
      ]
    },
    {
      "id": "8da2db10-d478-42a2-b20b-91c439860d5c",
      "name": "Filter for New Video",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1980,
        200
      ]
    },
    {
      "id": "54539bf9-cdf9-49b4-970f-512931619787",
      "name": "Check if the Video Exists",
      "type": "n8n-nodes-base.if",
      "position": [
        -1760,
        200
      ]
    },
    {
      "id": "2eb43d7a-4c7b-4ed0-8039-3c111d25499d",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3780,
        280
      ],
      "parameters": {
        "width": 620,
        "height": null,
        "content": "## 1. Trigger & Source\n- **Kick-off every 10 min**  \n  Starts the workflow on a timer so you’re always working with fresh data.\n\n- **Grab feed list from Google Sheet**  \n  Pulls the latest RSS URLs so"
      }
    },
    {
      "id": "142c3e97-4ad4-4851-acd9-a4dc6dd93d79",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2840,
        520
      ],
      "parameters": {
        "width": 700,
        "height": null,
        "content": "## 2. Fetch & Batch\n- **Process one feed at a time**  \n  Keeps memory low and makes retry logic straightforward.\n\n- **HTTP GET to download each RSS**  \n  Grabs raw XML content for the next step.\n"
      }
    },
    {
      "id": "d037bd15-0f67-4e71-8154-f24ccc3022f6",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2300,
        -20
      ],
      "parameters": {
        "width": 640,
        "height": null,
        "content": "## 3. Parse & Filter\n- **Convert XML → JSON**  \n  Translates RSS into clean JSON objects the rest of the flow can read.\n\n- **Keep only brand-new items**  \n  Drops anything older than your freshness wi"
      }
    },
    {
      "id": "5c1f7a6d-79c9-4895-921f-825276728637",
      "name": "Batch RSS Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -3080,
        500
      ]
    },
    {
      "id": "c5aeea13-b7ce-47a8-b96f-c2ed5293d216",
      "name": "Fetch RSS Feed",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2860,
        200
      ]
    },
    {
      "id": "bfdc95a2-cd13-40e5-9602-d22a7910589d",
      "name": "Parse RSS XML",
      "type": "n8n-nodes-base.xml",
      "position": [
        -2640,
        200
      ]
    },
    {
      "id": "e75818ea-f59e-4331-b4fd-700cb28fc925",
      "name": "Fetch Video Details",
      "type": "n8n-nodes-base.youTube",
      "position": [
        -1320,
        100
      ]
    },
    {
      "id": "0e35710d-69a5-4f7c-8405-9fef774d8df8",
      "name": "Log New Videos",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1540,
        100
      ]
    },
    {
      "id": "20e47927-ec86-456e-b26a-c96fda7715e3",
      "name": "Generate Summary",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        440,
        100
      ]
    },
    {
      "id": "9c0c4eeb-7c96-4d48-a4b0-d74e8282c103",
      "name": "Build AI Payload",
      "type": "n8n-nodes-base.code",
      "position": [
        220,
        0
      ]
    },
    {
      "id": "d527709b-9664-448d-9437-e75872fb1e29",
      "name": "Post to Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1036,
        275
      ]
    },
    {
      "id": "0024e377-40da-452d-a320-99378c63cc43",
      "name": "Check for Timestamps",
      "type": "n8n-nodes-base.if",
      "position": [
        -220,
        100
      ]
    },
    {
      "id": "59551f76-42f6-4d61-acd5-c046646fa7be",
      "name": "Fetch Subtitles URL",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1100,
        100
      ]
    },
    {
      "id": "a0ac6aba-fdd6-491c-a50b-11b3c32619ba",
      "name": "Format Response",
      "type": "n8n-nodes-base.code",
      "position": [
        -880,
        100
      ]
    },
    {
      "id": "91206cd9-4968-4ecc-a973-9588d15bdb50",
      "name": "Link is Processed",
      "type": "n8n-nodes-base.set",
      "position": [
        -1540,
        300
      ]
    },
    {
      "id": "dbb63f27-9e24-4873-81df-547b56c798cf",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1220,
        -100
      ],
      "parameters": {
        "width": 860,
        "height": null,
        "content": "## 4. Enrich & Summarize\n- **Pull video details + subtitles**  \n  Adds title, description, and transcript data for richer context.\n\n- **Send to AI for short summary**  \n  Generates a concise, readable"
      }
    },
    {
      "id": "f65d7246-c4b9-4784-a172-09280b0597f1",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        160,
        500
      ],
      "parameters": {
        "width": 620,
        "height": null,
        "content": "## 5. Log & Notify\n- **Append new videos to sheet**  \n  Records what’s already been handled to prevent duplicates.\n\n- **Post summary to Slack**  \n  Drops the final digest into your channel so the team"
      }
    },
    {
      "id": "c09c61a3-298d-40bc-bf7d-39cbbbf54fe6",
      "name": "Slack Trigger",
      "type": "n8n-nodes-base.slackTrigger",
      "position": [
        -3500,
        1260
      ]
    },
    {
      "id": "112a34af-2e8a-41dd-9e22-cb02f9ffae1f",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -2760,
        1260
      ]
    },
    {
      "id": "8fbe1750-c207-47f3-9a0c-2197febf4558",
      "name": "Get Rows",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        -2720,
        1480
      ]
    },
    {
      "id": "1338c910-b227-4172-bb05-870603d3f57d",
      "name": "Delete Row",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        -2600,
        1480
      ]
    },
    {
      "id": "267d813b-2bb7-43ce-acd3-9089d4e92d2c",
      "name": "Append Row",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        -2480,
        1480
      ]
    },
    {
      "id": "86560901-b68c-4d67-9ebd-3294a4ea42f6",
      "name": "Get Channel ID",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -3280,
        1260
      ]
    },
    {
      "id": "4abd10d8-e68e-4729-928d-0e466a00be8b",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -2840,
        1480
      ]
    },
    {
      "id": "4941f63a-3560-4175-9e97-86f9c051ca5c",
      "name": "RSS Feed URL",
      "type": "n8n-nodes-base.set",
      "position": [
        -3060,
        1260
      ]
    },
    {
      "id": "8901e407-973c-4c25-87ff-61c653448f3a",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3740,
        960
      ],
      "parameters": {
        "width": 440,
        "height": 280,
        "content": "## 1. Slack Event Trigger\n- Kicks off whenever someone @mentions the bot in a channel, capturing the message text and channel context.\n\n### Example:\n\"@yourbotname, add this  `https://www.youtube.com/@"
      }
    },
    {
      "id": "4b0e9642-6db1-4b91-8706-f7b5f2d6ba72",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3200,
        1080
      ],
      "parameters": {
        "width": 800,
        "height": 140,
        "content": "## 2. Build RSS & Decide Action\n- Extracts the YouTube channel link from the message, converts it into a channel-specific RSS URL, and lets an AI step read the text to decide whether the user wants to"
      }
    },
    {
      "id": "347b8f85-700e-4638-a1ce-3d96c754b22a",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4520,
        860
      ],
      "parameters": {
        "width": 620,
        "height": 420,
        "content": "## Setting up Slack OAuth for Posting & Event Listening\n\n1. **Create a Slack App**: `api.slack.com/apps` → **Create New App** → “From scratch.”  \n2. **Add Bot Token Scopes**:  \n   - `chat:write` (post"
      }
    },
    {
      "id": "838fdb84-cbac-4a0f-860a-ea25f1459e58",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4500,
        340
      ],
      "parameters": {
        "width": 600,
        "height": 420,
        "content": "## 🔑 Setup & Credentials\n- **Google Sheets Template**  \n  > Make a copy of the master sheet here:  \n  > `https://docs.google.com/spreadsheets/d/1i3jZ_0npsEVtrMUSzGPV3Lbta3q7sArHHeNomlAuSMg/edit?usp=sh"
      }
    }
  ],
  "connections": {
    "Get Rows": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Append Row": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Delete Row": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "RSS Feed URL": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get RSS Links": {
      "main": [
        [
          {
            "node": "Batch RSS Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Subtitles": {
      "main": [
        [
          {
            "node": "Get Timestamps",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse RSS XML": {
      "main": [
        [
          {
            "node": "If newly published",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post to Slack": {
      "main": [
        [
          {
            "node": "Batch RSS Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack Trigger": {
      "main": [
        [
          {
            "node": "Get Channel ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch RSS Feed": {
      "main": [
        [
          {
            "node": "Parse RSS XML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Channel ID": {
      "main": [
        [
          {
            "node": "RSS Feed URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Timestamps": {
      "main": [
        [
          {
            "node": "Check for Timestamps",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log New Videos": {
      "main": [
        [
          {
            "node": "Fetch Video Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Batch RSS Items": {
      "main": [
        [],
        [
          {
            "node": "Fetch RSS Feed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Response": {
      "main": [
        [
          {
            "node": "Get Subtitles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build AI Payload": {
      "main": [
        [
          {
            "node": "Generate Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Summary": {
      "main": [
        [
          {
            "node": "Generate Slack Blocks - Detailed Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get RSS Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Link is Processed": {
      "main": [
        [
          {
            "node": "Batch RSS Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "If newly published": {
      "main": [
        [
          {
            "node": "Check for new videos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Subtitles URL": {
      "main": [
        [
          {
            "node": "Format Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Video Details": {
      "main": [
        [
          {
            "node": "Fetch Subtitles URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check for Timestamps": {
      "main": [
        [
          {
            "node": "Formatted Chapter Text",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Formatted Transcript w/o Chapters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check for new videos": {
      "main": [
        [
          {
            "node": "Filter for New Video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Batch RSS Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter for New Video": {
      "main": [
        [
          {
            "node": "Check if the Video Exists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Formatted Chapter Text": {
      "main": [
        [
          {
            "node": "Build AI Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if the Video Exists": {
      "main": [
        [
          {
            "node": "Log New Videos",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Link is Processed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Formatted Transcript w/o Chapters": {
      "main": [
        [
          {
            "node": "Generate Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Slack Blocks - Detailed Summary": {
      "main": [
        [
          {
            "node": "Post to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}