YouTube to Google Sheets, transcripts to ready assets
You grab a YouTube link for “research,” then lose an hour copying transcripts, cleaning the text, and trying to turn it into something you can actually publish. And if you’re doing competitor analysis, it’s worse. It’s repetitive, messy, and honestly easy to abandon halfway through.
This transcript automation hits content marketers hardest, but video strategists and agency owners feel it too. You want consistent assets (scripts, titles, tags, thumbnail ideas) without spending your best thinking time on copy-paste and formatting.
This workflow takes a YouTube URL, pulls the transcript, runs it through AI for structured outputs, then logs everything into Google Sheets so you can reuse it on demand or in batches.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: YouTube to Google Sheets, transcripts to ready assets
flowchart LR
subgraph sg0["Rewrite The Transcri Flow"]
direction LR
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/webhook.dark.svg' width='40' height='40' /></div><br/>Return Transcript Response"]
n7["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Trigger (Direct Input)"]
n9@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model1", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Rewrite The Transcript (webh..", 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/code.svg' width='40' height='40' /></div><br/>Extract YouTube Video ID (Sh.."]
n13["<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 Video Transcript Data .."]
n14["<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/>Parse Transcript Text (Webho.."]
n16["<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/>Parse AI Output Into Heading.."]
n17@{ icon: "mdi:database", form: "rounded", label: "Save New Script to Sheet(web..", pos: "b", h: 48 }
n18@{ icon: "mdi:database", form: "rounded", label: "Save Transcript to Sheet(web..", pos: "b", h: 48 }
n9 -.-> n10
n7 --> n12
n14 --> n10
n10 --> n16
n17 --> n18
n18 --> n6
n12 --> n13
n13 --> n14
n16 --> n17
end
subgraph sg1["Monitor Google Sheet for URLs 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/code.svg' width='40' height='40' /></div><br/>Extract YouTube Video ID (Sh.."]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Video Transcript Data .."]
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/>Parse Transcript Text (Sheets)"]
n3@{ icon: "mdi:database", form: "rounded", label: "Save Transcript to Sheet", pos: "b", h: 48 }
n4@{ icon: "mdi:play-circle", form: "rounded", label: "Monitor Google Sheet for URLs", pos: "b", h: 48 }
n5@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Save New Script to Sheet", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Rewrite The Transcript (shee..", pos: "b", h: 48 }
n15["<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/>Parse AI Output Into Heading.."]
n5 -.-> n11
n8 --> n3
n4 --> n0
n2 --> n11
n11 --> n15
n0 --> n1
n1 --> n2
n15 --> n8
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 n4 trigger
class n10,n11 ai
class n9,n5 aiModel
class n17,n18,n3,n8 database
class n6,n7,n13,n1 api
class n12,n14,n16,n0,n2,n15 code
classDef customIcon fill:none,stroke:none
class n6,n7,n12,n13,n14,n16,n0,n1,n2,n15 customIcon
The Problem: Turning YouTube Research Into Usable Assets
YouTube is full of proven angles, hooks, and structures you can learn from. The problem is getting from “good video” to “usable marketing asset” is a slog. You hunt for transcripts, paste them into a doc, remove timestamps, fix broken lines, then ask AI to generate titles and tags, then reformat that output again because it came back as a wall of text. Meanwhile, the spreadsheet where you track ideas stays half-filled and inconsistent, which makes the whole process hard to scale across a team.
It adds up fast. Here’s where it usually breaks down.
- Transcript extraction is unreliable when you’re doing it manually, especially across different YouTube URL formats.
- Cleaning and restructuring the transcript takes about 20 minutes per video if you want it readable.
- AI outputs often come back inconsistent, which means someone still has to standardize headings and sections.
- Without a single place to store everything, you re-do the same work next week when you forget what you already processed.
The Solution: YouTube Transcript → Google Sheets Asset Pipeline
This workflow turns a YouTube link into a clean, structured bundle of content assets and stores it in Google Sheets automatically. It can run in two ways: you can drop links into a Google Sheet for batch processing, or you can send a link to a webhook for an instant, on-demand response. In both paths, n8n extracts the video ID from almost any YouTube URL, calls a transcript API (like youtube-transcript.io), then pulls out the actual transcript text and timestamps. After that, an AI chain (via OpenRouter) rewrites and transforms the transcript into production-ready outputs like scripts, SEO titles, tags, descriptions, thumbnail concepts, and hook/CTA suggestions. Finally, everything is parsed into consistent sections and written back to your Sheet so it’s searchable, reusable, and shareable.
The workflow starts with either a Google Sheets trigger or an incoming webhook. From there, it standardizes the YouTube link, retrieves transcript data through an HTTP request, then uses AI to generate structured assets. The last stage writes clean fields into Google Sheets and (for the webhook path) responds immediately with the processed result.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you analyze 10 competitor videos each week. Manually, you might spend about 10 minutes grabbing the transcript, about 20 minutes cleaning it, and another 15 minutes prompting AI and formatting the output, which is roughly 45 minutes per video (around 7 hours weekly). With this workflow, you paste 10 links into Google Sheets in about 5 minutes, then let n8n pull transcripts and generate assets while you do other work. You still review the output, but that’s more like 5 minutes per video, so you get most of that week back.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for storing transcripts and generated assets
- YouTube transcript API to fetch transcript and metadata
- OpenRouter API key (get it from your OpenRouter dashboard)
Skill level: Intermediate. You’ll connect accounts, paste in API keys, and adjust a few fields in Google Sheets to match the expected columns.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A new link arrives. The workflow kicks off when a new YouTube URL appears in Google Sheets (batch mode) or when you send a URL to the webhook endpoint (on-demand mode).
The link gets normalized. n8n extracts the video ID using parsing logic that handles youtube.com, youtu.be, and embed links, so you don’t have to “fix” URLs before using them.
Transcript + metadata are fetched and cleaned. An HTTP request pulls transcript info from the transcript API, then code steps rebuild clean transcript text (and keeps timestamp data available if you want it later).
AI generates ready-to-use assets. OpenRouter runs the transcript through an AI chain that outputs structured sections like scripts (including an 8-second scene style), SEO titles, tags, descriptions, thumbnail concepts, plus virality notes like hooks and CTAs.
Everything is stored and returned. Google Sheets is updated with the revised script and transcript fields, and the webhook path also sends a response back instantly so you can use the results in another tool.
You can easily modify the AI prompt to match your tone and offers based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Google Sheets Trigger
This workflow starts from a Google Sheets change and also supports an inbound webhook for direct transcript extraction requests.
- Add and open Watch Sheet for Video Links to define which spreadsheet and tab should be monitored for new video URLs.
- Set the spreadsheet and sheet settings according to your data structure in Watch Sheet for Video Links.
- Open Incoming Webhook Trigger and note the Webhook URL generated by n8n for external integrations.
- Keep both triggers connected to their downstream nodes exactly as in the flow: Watch Sheet for Video Links → Derive Video ID From Sheet and Incoming Webhook Trigger → Derive Video ID (Webhook).
Step 2: Connect Google Sheets
All sheet reads and writes rely on Google Sheets credentials for both the sheet-triggered path and webhook path.
- Open Store Revised Script (Sheet) and Record Transcript in Sheet and select the spreadsheet and tab for storing revised scripts and raw transcripts.
- Open Store Revised Script (Webhook) and Record Transcript (Webhook) and choose the same or separate sheets for webhook submissions.
- Confirm the field mappings for each Google Sheets node align with your column structure.
Step 3: Set Up Transcript Retrieval Processing
Both paths extract a video ID, retrieve transcript metadata, and parse transcript text before AI rewriting.
- Review Derive Video ID From Sheet and Derive Video ID (Webhook) to ensure the code correctly parses YouTube URLs into video IDs.
- Configure Retrieve Transcript Info (Sheet) and Retrieve Transcript Info (Webhook) with the correct API endpoint and request parameters for transcript retrieval.
- Validate that Extract Transcript Text (Sheet) and Extract Transcript Text (Webhook) parse and return clean transcript text for the AI step.
Step 4: Set Up AI Rewrite and Formatting
The workflow uses two separate AI chains—one for sheet-triggered inputs and one for webhook payloads—followed by formatting code.
- Open Rewrite Transcript (Sheet) and connect it to the language model node OpenRouter Chat Engine.
- Open Rewrite Transcript Payload and connect it to the language model node OpenRouter Chat Engine B.
- Check Format AI Headings (Sheet) and Format AI Headings (Webhook) to ensure the code formats AI output into headings or sections as expected.
Step 5: Configure Output and Webhook Response
After AI formatting, the workflow writes results back to Google Sheets and replies to webhook requests.
- Ensure Format AI Headings (Sheet) connects to Store Revised Script (Sheet) and then to Record Transcript in Sheet as shown in the execution flow.
- Ensure Format AI Headings (Webhook) connects to Store Revised Script (Webhook) and then to Record Transcript (Webhook).
- Open Send Transcript Reply and set the response body to include the revised transcript data if you want the webhook caller to receive it directly.
Step 6: Test and Activate Your Workflow
Confirm both trigger paths execute end-to-end before turning the workflow on.
- Manually run Watch Sheet for Video Links with a test row and verify that data flows through Derive Video ID From Sheet, Retrieve Transcript Info (Sheet), Extract Transcript Text (Sheet), Rewrite Transcript (Sheet), and Format AI Headings (Sheet).
- Send a test request to Incoming Webhook Trigger and confirm it reaches Send Transcript Reply after processing through the webhook path.
- Check Google Sheets for new or updated rows created by Store Revised Script (Sheet), Record Transcript in Sheet, Store Revised Script (Webhook), and Record Transcript (Webhook).
- When successful, toggle the workflow to Active to enable production automation.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials panel and your Google account’s app access first.
- If you’re using the transcript API heavily, rate limits can kick in and your HTTP Request step may return empty or delayed responses. Slow down batch runs or add a longer wait before downstream parsing.
- Default prompts in OpenRouter AI nodes are generic. Add your brand voice and formatting rules early or you’ll be cleaning outputs in Google Sheets forever.
Frequently Asked Questions
About 30 minutes if your APIs are ready.
No. You’ll mostly connect accounts and paste API keys. The workflow’s code nodes are already included, so you typically won’t touch them.
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 OpenRouter API costs (often just a few cents per run, depending on model and transcript length).
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 mostly prompt work. Update the AI prompt in the LangChain LLM Chain step that rewrites the transcript, then keep the “Format AI Headings” code step aligned with your new sections. Common tweaks include adding a blog outline, generating short-form hooks, or producing a “talking points” section for a host. If you want a totally different style (like multilingual output), you can also swap the OpenRouter model without changing the rest of the flow.
Usually it’s expired Google auth or missing permissions on the spreadsheet. Reconnect the Google Sheets credential in n8n, then confirm the sheet is shared with the same Google account. Also check that your sheet tab name and expected columns match what the workflow writes, because a renamed tab can look like a “connection” problem.
A lot, but the real limit is your n8n plan and the transcript/AI APIs. On n8n Cloud Starter you can run a healthy monthly volume for small teams, and higher plans scale up from there. If you self-host, executions aren’t capped, but your server and rate limits will decide how fast batch runs can go.
For this workflow, n8n is usually the better fit because you’re doing multi-step parsing, branching (sheet vs webhook), and structured formatting, which can get expensive or awkward in Zapier/Make. n8n also gives you the option to self-host, which matters if you plan to run big batches. Zapier or Make can still be fine for a lightweight “YouTube link → summary” flow, especially if you never need custom parsing. Frankly, the moment you care about consistent columns in Google Sheets and repeatable formatting, n8n pulls ahead. If you’re undecided, Talk to an automation expert and we’ll sanity-check your use case.
Once this is in place, YouTube research stops being a time sink and starts acting like a system. The workflow handles the repetitive parts so you can focus on what to publish next.
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.