YouTube to Slack, digest posts your team will read
You check “just one” YouTube channel, then it turns into five. Next thing you know, you’re skimming timestamps, hunting for subtitles, and pasting messy notes into Slack that nobody reads.
This YouTube Slack digest automation hits marketing leads hardest, but enablement folks and busy founders feel it too. Instead of link dumps, your team gets clean takeaways that are actually scannable.
Below, you’ll see exactly how the workflow detects new uploads from a Google Sheet, summarizes them with AI, and posts a formatted Slack digest (without repeats).
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: YouTube to Slack, digest posts your team will read
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Subtitles"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Get Timestamps"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Formatted Chapter Text"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Generate Slack Blocks - Deta.."]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Formatted Transcript w/o Cha.."]
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>If newly published"]
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check for new videos", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Get RSS Links", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Filter for New Video", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check if the Video Exists", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Batch RSS Items", pos: "b", h: 48 }
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch RSS Feed"]
n13@{ icon: "mdi:cog", form: "rounded", label: "Parse RSS XML", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "Fetch Video Details", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Log New Videos", pos: "b", h: 48 }
n16@{ icon: "mdi:robot", form: "rounded", label: "Generate Summary", pos: "b", h: 48 }
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Build AI Payload"]
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Post to Slack"]
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check for Timestamps", pos: "b", h: 48 }
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Subtitles URL"]
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Format Response"]
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Link is Processed", pos: "b", h: 48 }
n8 --> n11
n0 --> n1
n13 --> n6
n18 --> n11
n12 --> n13
n1 --> n19
n15 --> n14
n11 --> n12
n21 --> n0
n17 --> n16
n16 --> n3
n5 --> n8
n22 --> n11
n6 --> n7
n20 --> n21
n14 --> n20
n19 --> n2
n19 --> n4
n7 --> n9
n7 --> n11
n9 --> n10
n2 --> n17
n10 --> n15
n10 --> n22
n4 --> n16
n3 --> n18
end
subgraph sg1["Slack Flow"]
direction LR
n23["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Slack Trigger"]
n24@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n25@{ icon: "mdi:database", form: "rounded", label: "Get Rows", pos: "b", h: 48 }
n26@{ icon: "mdi:database", form: "rounded", label: "Delete Row", pos: "b", h: 48 }
n27@{ icon: "mdi:database", form: "rounded", label: "Append Row", pos: "b", h: 48 }
n28["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Channel ID"]
n29@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n30@{ icon: "mdi:swap-vertical", form: "rounded", label: "RSS Feed URL", pos: "b", h: 48 }
n25 -.-> n24
n27 -.-> n24
n26 -.-> n24
n30 --> n24
n23 --> n28
n28 --> n30
n29 -.-> n24
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5,n23 trigger
class n16,n24 ai
class n29 aiModel
class n7,n10,n19 decision
class n8,n9,n15,n25,n26,n27 database
class n0,n12,n20,n28 api
class n1,n2,n3,n4,n6,n17,n21 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3,n4,n6,n12,n17,n18,n20,n21,n23,n28 customIcon
The Problem: YouTube updates don’t turn into team knowledge
Keeping up with YouTube is easy when it’s one channel and you have spare time. In real teams, it’s competitors, partners, creators, and internal content, all posting whenever they feel like it. So you end up doing “research” in little frantic chunks throughout the day: open a video, scrub around, hope there are captions, grab a few points, then drop a link into Slack with a quick line like “worth watching.” That’s not alignment. That’s noise, and the important stuff gets buried.
It adds up fast. Here’s where it breaks down in the real world:
- Someone has to manually check multiple channels, and it quietly steals about 2 hours a week.
- Most Slack posts end up as raw links, which means teammates either ignore them or watch the whole video.
- Highlights are inconsistent because each person summarizes differently (or not at all).
- You re-share the same video twice because there’s no reliable “already processed” log.
The Solution: Automated YouTube digests delivered to Slack
This workflow turns YouTube monitoring into a repeatable, low-effort system. It runs on a schedule (every 10 minutes by default), reads your list of YouTube RSS feeds from Google Sheets, and checks each feed for newly published videos. When it spots something fresh, it pulls the title and description, then fetches subtitles so the workflow can summarize what the video actually says, not just what the thumbnail implies. After that, GPT-4o-mini generates a structured JSON summary and a more readable “mini-article,” and the workflow formats the result into Slack Block Kit so it’s easy to skim. Finally, it posts the digest into the Slack channel you choose and logs the video link back to Google Sheets so it won’t repeat the same update later.
The workflow starts with a scheduled run and a Google Sheet that acts as your channel control center. From there, HTTP requests and the YouTube API pull in video and subtitle data, and OpenAI produces the key takeaways. Slack receives a neat, standardized digest that your team can read in under a minute.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your team tracks 12 YouTube channels and each publishes about 2 videos a week. Manually, even a “quick check” is maybe 5 minutes per video to open it, scrub, and write a few bullets, plus another 2 minutes to post cleanly in Slack. That’s roughly 3 hours a week. With this workflow, you spend about 10 minutes once to add RSS URLs in Google Sheets, and after that the only time you spend is reading the digest in Slack (under a minute) and reacting when something matters.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store RSS feeds and processed links.
- Slack to post digests into a channel or DM.
- RapidAPI key (get it from RapidAPI for yt-api subtitles).
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll mostly connect accounts and paste keys, but you should be comfortable testing runs and reading simple errors.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled trigger runs automatically. By default it fires every 10 minutes, so new uploads get picked up quickly without anyone watching YouTube all day.
Google Sheets acts like your “source of truth.” The workflow reads a list of RSS feed URLs, then batches through them so it can check many channels without becoming fragile or slow.
New videos are detected and enriched. The RSS feed is fetched and parsed, “freshness” is checked, and then the YouTube API and RapidAPI subtitle endpoint provide title, description, and transcript text (plus chapter markers when available).
AI creates a human-readable digest, then Slack receives it. OpenAI returns a structured JSON summary, a formatter converts it into Slack Block Kit, and the message is posted. Finally, the workflow appends the processed link back into the “Video Links” sheet so you don’t get duplicates.
You can easily modify the schedule interval to match your team’s pace based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Run Trigger
Set the automation schedule and define the Slack-based management trigger for RSS source updates.
- Add Scheduled Run Trigger and set the interval rule to run every
10minutes. - Configure Slack Mention Trigger to listen for app_mention in the channel you want to manage RSS feeds from.
- Credential Required: Connect your
slackApicredentials in Slack Mention Trigger.
[YOUR_ID], the bot will never receive mentions. Replace it with your actual channel ID.Step 2: Connect Google Sheets
Configure the Google Sheets data sources that store RSS URLs and processed video links.
- In Fetch RSS Sources, set Document to
YouTube RSS Trackerand Sheet toRSS Feed URLs. - In Lookup Video Link, set Document to
YouTube RSS Trackerand Sheet toVideo Links, and set the filter YouTube Link to={{ $json.link.href }}. - In Append Video Log, set Operation to
appendand map YouTube Link to={{ $('Verify New Videos').item.json.link.href }}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Fetch RSS Sources, Lookup Video Link, and Append Video Log. - For the AI tools Read Sheet Rows, Append Sheet Row, and Remove Sheet Row, connect
googleSheetsOAuth2Apicredentials in those tool nodes because they are invoked by RSS Sheet Assistant.
RSS Feed URLs and Video Links, or the lookup/append steps will silently fail.Step 3: Configure RSS Retrieval and New Video Filtering
Pull RSS feeds in batches, convert XML to JSON, and filter out previously processed or old videos.
- Connect Fetch RSS Sources to Batch RSS Records and keep the batch node defaults to iterate through RSS URLs.
- In Retrieve RSS Feed, set URL to
={{ $json['RSS URL'] }}. - Leave Convert RSS XML as-is to parse the RSS XML into JSON.
- In Evaluate New Publish, confirm the code sets
runIntervalMinutes = 1000so only recently published videos are flagged. - In Verify New Videos, ensure the condition uses
={{ $json.newVideo }}with the “true” boolean operation. - In Confirm Video Missing, keep the “empty object” check so only unprocessed videos proceed.
- Use Mark Link Processed to output
Link is already processedback into Batch RSS Records for clean looping.
Step 4: Set Up Slack-Based RSS Source Management
Let Slack mentions add or remove channel RSS feeds using a RapidAPI lookup and AI-assisted sheet updates.
- In Resolve Channel ID, set URL to
https://youtube138.p.rapidapi.com/channel/detailsand add query parameters id =={{ $json.blocks[0].elements[0].elements[2].url || $json.attachments[0].from_url }}, hl =en, and gl =US. - Credential Required: Connect your
httpHeaderAuthcredentials in Resolve Channel ID. - In Compose RSS URL, set rss_feed_url to
=https://www.youtube.com/feeds/videos.xml?channel_id={{ $json.channelId }}. - In RSS Sheet Assistant, keep the Prompt set to
=Check if {{ $json.rss_feed_url }} is already available in the sheets using `Read Sheet Rows` Google Sheets tool. If it's there, do nothing. If it's not in the sheet, then based on the user message {{ $('Slack Mention Trigger').item.json.text }} "add" or "remove" it to the sheets using `Append Sheet Row` and `Remove Sheet Row` Google Sheets tools accordingly.. - OpenAI Chat Engine is connected as the language model for RSS Sheet Assistant — ensure credentials are added to OpenAI Chat Engine.
youtube138.p.rapidapi.com), Resolve Channel ID will return a 403 or empty response.Step 5: Configure Transcript Retrieval and Chapter Parsing
Pull video details, fetch subtitles, and build the AI payload from full transcripts or chaptered segments.
- In Retrieve Video Info, set Resource to
video, Operation toget, and Video ID to={{ $('Verify New Videos').first().json.link.href.split("=")[1] }}. - Credential Required: Connect your
youTubeOAuth2Apicredentials in Retrieve Video Info. - In Request Subtitle List, set URL to
https://yt-api.p.rapidapi.com/subtitlesand query parameter id to={{ $json.id }}. - Credential Required: Connect your
httpHeaderAuthcredentials in Request Subtitle List. - Keep Select Subtitle URL and Retrieve Captions as-is; Retrieve Captions uses URL
={{ $json.url }}. - After Extract Chapter Times, Detect Chapter Marks outputs to both Merge Chapters Text and Merge Transcript Text in parallel.
- Keep Assemble AI Payload to structure chapter text with video_title and video_description from Retrieve Video Info.
Step 6: Set Up AI Summary and Slack Output
Generate an AI summary and send a formatted Slack message with the video link.
- In Create AI Summary, select the model
gpt-4o-miniand keep the message prompt that references{{ $json.video_title }},{{ $json.video_description }}, and{{ $json.merged_text }}. - Credential Required: Connect your
openAiApicredentials in Create AI Summary. - In Compose Slack Blocks, keep the parser logic to extract JSON from Create AI Summary.
- In Send Slack Update, set Text to
={{ $json.blocks }} You can check the full video here 👉 {{ $('Verify New Videos').first().json.link.href }}and choose the target Channel. - Credential Required: Connect your
slackOAuth2Apicredentials in Send Slack Update.
Step 7: Test and Activate Your Workflow
Run a manual test to confirm RSS parsing, transcript retrieval, AI summaries, and Slack delivery before enabling production execution.
- Click Execute Workflow and verify that Fetch RSS Sources loads records and Batch RSS Records iterates through them.
- Confirm that a new video triggers Verify New Videos (true path), passes Confirm Video Missing, and writes to Append Video Log.
- Check that Create AI Summary returns a JSON response and Send Slack Update posts a formatted message with a working video link.
- Enable the workflow by toggling the Active switch so Scheduled Run Trigger runs on the live schedule.
Common Gotchas
- Slack credentials can expire or need specific permissions. If things break, check your Slack app scopes (chat:write, channels:read, app_mention) and the Bot OAuth token used in the n8n Slack credential first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your Slack app and keys are ready.
No. You’ll connect Google Sheets, Slack, RapidAPI, and OpenAI, then test a run.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage and RapidAPI calls (the subtitles endpoint includes 300 free calls per month).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s honestly one of the best tweaks to make. You can swap the OpenAI model or adjust the prompt in the OpenAI Chat/AI summary nodes to force a shorter output (for example, “3 bullets plus one takeaway”). Common customizations include changing the “freshness window” in the “If newly published” check, posting to a different Slack channel or DM, and extending the AI payload to include thumbnails or engagement stats.
Usually it’s the Slack app token or missing scopes. Confirm the Bot OAuth token in your n8n Slack credential is current, then re-check that chat:write is granted and the app is installed in the workspace (and invited to the target channel if needed). If you enabled Event Subscriptions for the mention trigger, also confirm the request URL is reachable and verified. Rate limiting is rare here, but it can happen if you track a lot of channels at once.
Plenty for most small teams: dozens of channels and multiple new videos per day is normal.
For this specific job, n8n is usually the better fit because it handles batching, branching, and “don’t reprocess this link” logic without getting expensive. You also get deeper control over the HTTP requests needed for RSS parsing and the subtitle pull, which can be awkward in lighter automation tools. The tradeoff is setup: Zapier can feel simpler for tiny two-step zaps, but this isn’t that kind of workflow. If you’re on the fence, Talk to an automation expert and you’ll get a clear recommendation fast.
Your team gets the important parts of YouTube without living on YouTube. Set it up once, and let Slack deliver the briefings.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.