Auto-Summarize YouTube Playlist Podcasts: Transcribe → AI Summary → Save to Sheet
Input a YouTube playlist → extract videos and fetch transcripts → generate structured AI summaries with Groq → output each record to Google Sheets
- Who
- n8n users who want to batch-process podcasts or long videos and auto-archive summaries
- You get
- Every video in a playlist gets transcribed, summarized with sectioned AI output, and logged to Google Sheets
- You need
- n8n · google-sheets
Constraints
Prerequisites: n8n instance (cloud or self-hosted), YouTube OAuth2 credentials, Google Sheets OAuth2 credentials, Groq API key, Supadata API key. After importing the template, fill in the REDACTED playlistId, Google Sheets documentId/sheetName, and API keys. Trigger can be set to manual or scheduled.
What they did
Author ARRE published an n8n workflow template for automatically processing podcasts or long videos from a YouTube playlist. The template fetches playlist videos via YouTube Data API, retrieves transcripts via Supadata, generates structured summaries using Groq's llama-3.1-8b-instant model, and writes titles, transcripts, summaries, and row numbers to Google Sheets. The template includes complete node wiring, JavaScript processing code, and the AI prompt.
How it went
The template shows as published on n8n with 10,122 total views (as of fetch date). The author claims the workflow automatically transcribes and produces clear, comprehensive AI summaries so users can grasp key points without watching full episodes. Performance claims are author-reported and not verified by this site.
Worth knowing
1. The Code1 node comment says "first 10 sentences" but the code uses `sentences.slice(0, 5)`, so only 5 sentences are actually extracted, which may affect summary coverage. 2. The Supadata API requires a valid x-api-key, REDACTED in the template; users must obtain and enter their own. 3. Google Sheets documentId and sheetName are also REDACTED and must be configured after creating a document. 4. The workflow currently uses Groq llama-3.1-8b-instant; the author notes you can switch models in the Groq Chat Model node. 5. Transcription depends on Supadata; if the service is unavailable or a video lacks captions, the transcription step will fail. 6. This site has not imported or executed the workflow; reproduction status is not_tested.
n8n workflow template
Structure checked · Not run-testedUse “Import from File” in n8n, or copy the JSON and paste it into the editor. Connect your own accounts, then try test data. The template is inactive by default.
Setup and test checklist
Credentials to connect
- YouTube Playlist node: connect YouTube OAuth2 credentials.
- Google Sheets3 node: connect Google Sheets OAuth2 credentials.
- Groq Chat Model node: connect groqApi credentials.
- Replace __UKH_BEARER_9__ with your real secret/token (path /nodes/9/parameters/headerParameters/parameters/0/value; literal auth header).
Configuration to replace
- Source template is n8n public workflow #5926 (~23 nodes). Keep inactive after import; verify triggers, expressions and external API endpoints.
- Sticky-note guidance is informational; replace placeholders with your own accounts, sheet schemas or channel IDs.
Test input and expected output
- Manually run the main path once in a test workspace and confirm credentialed nodes authenticate without errors.
- Drive one synthetic/redacted sample through and check output fields and downstream writes before enabling in production.
Template changes
- Author credential bindings, webhookId and execution data are removed; the workflow is inactive. Nodes, connections and original prompts are preserved. Not run-tested in n8n.
- No business-logic edits; verify keys, quotas and privacy compliance before use. 1 literal secret value(s) replaced with __UKH_…__ placeholders.
Template retrieved: 2026-10-24
Steps
Configure credentials and prerequisites
Create and connect three credentials in n8n: youTubeOAuth2Api (YouTube Data API), googleSheetsOAuth2Api (Google Sheets), and groqApi (Groq LLM). Additionally, enter your x-api-key in the Header of the Supadata HTTP Request node. Create a target Google Sheets document and obtain its URL/ID.
Set up YouTube playlist trigger
Add a Manual Trigger or Schedule Trigger, then connect to the YouTube Playlist node. In the YouTube Playlist node, enter your playlistId, select resource=playlistItem, operation=getAll, returnAll=true. When executed, it should return raw data for all videos in the playlist.
Setup guidance · Source text。YouTube Playlist node notes or configuration reference
📺 **YouTube Playlist** Fetches all videos from a specific YouTube playlist. **How to change:** Change the `playlistId` to use a different playlist. Adjust `part` to fetch different details. Change credentials for another YouTube account.
Extract video titles, URLs, and IDs
Use a Function node (titles/URL) to extract videoId and title from the YouTube snippet, generate the full YouTube URL, and assign row IDs starting from 2. Then use a Code node (video ID) to parse the pure videoId from the URL, preserving id and title. Finally, use a Split Out node to break the array into individual records for looping.
Execution prompt · Source text。titles/URL Function node's functionCode field
// Extract video URLs, titles, and add an id starting from 2 return items.map((item, index) => { const videoId = item.json.snippet.resourceId.videoId; const title = item.json.snippet.title; return { json: { id: index + 2, url: `https://www.youtube.com/watch?v=${videoId}`, title: title } }; });Execution prompt · Source text。video ID Code node's jsCode field
return items.map((item, index) => { // Get the URL and title from the input const url = item.json.url; const title = item.json.title || null; // Extract the video ID from the URL let videoId = null; if (url && url.includes('v=')) { videoId = url.split('v=')[1].split('&')[0]; } // id starts from 1; change to index+2 if you want to start from 2 return { json: { id: index + 2, videoId, title } }; });Loop over items to process one by one
Add a Loop Over Items (Split In Batches) node to feed individual records downstream sequentially. Each record will go through transcription, merging, summarization, and saving before the next one is picked up.
Fetch transcript via Supadata
Inside the loop, add an HTTP Request node (supadata) with URL `https://api.supadata.ai/v1/transcript?url=https://youtu.be/{{ $json.videoId}}` and Header `x-api-key`. On success, the downstream should receive JSON containing a content array with segmented text.
Setup guidance · Source text。supadata HTTP Request node notes or configuration reference
📝 **supadata (HTTP Request Node)** Calls the Supadata API to get the transcript for each video. **How to change:** Update the API URL or key if the service changes. Modify request headers or parameters for other APIs.
Merge transcript segments and extract opening sentences
First, use a Code node (scirpt) to iterate through the content array and concatenate all segment.text into a single string called script. Then use a Code node (Code1) to split script into sentences and extract the first 5 (the code uses slice(0,5) though the comment says 10; be aware of the actual behavior), outputting firstTenSentences for the AI Agent.
Execution prompt · Source text。scirpt Code node's jsCode field
// Combine all "text" fields from the content array into one string let script = ''; // Loop through all input items for (const item of items) { if (item.json.content && Array.isArray(item.json.content)) { for (const segment of item.json.content) { if (segment.text) { script += segment.text + ' '; } } } } script = script.trim(); return [ { json: { script } } ];Execution prompt · Source text。Code1 Code node's jsCode field
// Get the script text const script = items[0].json.script || ""; // Split into sentences using a regular expression const sentences = script.match(/[^\.!\?]+[\.!\?]+/g) || []; // Get the first 10 sentences (or fewer if less than 10) const firstTen = sentences.slice(0, 5).join(' ').trim(); return [ { json: { firstTenSentences: firstTen } } ];Generate structured summary with Groq AI Agent
Add an AI Agent node with promptType=define, and paste the following prompt into the text field. Also add a Groq Chat Model sub-node, select model llama-3.1-8b-instant, and connect the groqApi credential. The AI Agent receives `{{ $json.firstTenSentences }}` as input and outputs a structured summary to `{{ $json.output }}`.
Execution prompt · Source text。AI Agent1 node's text field (promptType=define)
=Summarize the following podcast script. The summary must be clear, well-organized, and comprehensive. Include all important information, data, and key points from the script. Divide the summary into sections according to the main topics, ideas, or parts discussed in the podcast. For each section, list all main points, facts, examples, and arguments mentioned. Do not omit any significant information or insight. The summary should be detailed enough to give a full understanding of the podcast, but avoid unnecessary repetition or filler. Use headings and bullet points for clarity. The result should be useful for someone who has not listened to the podcast but wants to understand all its important content and insights. podcast: {{ $json.firstTenSentences }}Execution prompt · Source text。Confirm the destination, input variables and output format before use.
📜 **scirpt (Code Node)** Combines the transcript segments into a single script string. **How to change:** Change logic to format or preprocess the script differently (e.g., filter out certain lines).
Execution prompt · Source text。Confirm the destination, input variables and output format before use.
✂️ **Code1 (Code Node)** Extracts the first few sentences from the script for summarization. **How to change:** Adjust the number of sentences extracted. Change the splitting logic for different transcript formats.
Write results to Google Sheets
Add a Google Sheets node, operation=update, select your documentId and sheetName. In columns, define four mappings: video titles = `{{ $('Loop Over Items1').item.json.title }}`, script = `{{ $('scirpt').item.json.script }}`, summery = `{{ $json.output }}`, row_number = `{{ $('Loop Over Items1').item.json.id }}`. Set matchingColumns to row_number to update by row ID.
Activate and test the workflow
Save and execute manually once. Verify that YouTube data retrieval, Supadata transcription, Groq summarization, and Google Sheets writing all complete without errors. Once confirmed, switch the trigger to Schedule for daily automatic runs. [First-test safety] Create a test Google Sheet first and temporarily point documentId there, or add a breakpoint/IF before the Sheets node; connect the real spreadsheet only after the rows look correct.
Prompt you can copy
Setup guidance · Editorial suggestion。Hand to setup assistant; confirm inputs and permissions first
This block is the prompt. Ads are never placed here.
You are setting up an n8n automation workflow: automatically fetch videos from a YouTube playlist, transcribe and summarize each with AI, then archive to Google Sheets. First confirm you have an n8n instance, YouTube OAuth2, Google Sheets OAuth2, Groq API key, and Supadata API key ready, then import the template and fill in all REDACTED parameters step by step.
To change summary style, edit the prompt in AI Agent1; to switch LLM, change the model in the Groq Chat Model node.
Source
Get a summary of each podcast in your YouTube playlist daily automatically free · arre · n8n.io · 2025-07-13
Comments & feedback
Tried this method? Share results, problems or improvements. Comments appear after moderation. Please avoid sensitive information.
Loading…
Agent feedback
Reports are submitted by Agents and shared after user confirmation and moderation. They are not platform-verified.