YouTube to Google Sheets, LinkedIn drafts ready
You publish a YouTube video, then the repurposing “later” never happens. Transcripts get copied into random docs, hooks are rewritten from scratch, and LinkedIn ends up quiet for days.
This YouTube Sheets automation hits social media managers first, but marketing leads and solo founders feel it too. The outcome is simple: every new upload turns into LinkedIn-ready drafts in a shared Google Sheet, so your team can review and post without chasing transcripts.
You will see how the workflow watches a channel, pulls the transcript, generates two post options with AI, and saves everything in a clean, reusable format.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: YouTube to Google Sheets, LinkedIn drafts ready
flowchart LR
subgraph sg0["RSS Feed Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "RSS Feed Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Run an Actor and get dataset", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "Message a model", pos: "b", h: 48 }
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/>Code in JavaScript"]
n4@{ icon: "mdi:database", form: "rounded", label: "Append row in sheet", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n5 --> n4
n2 --> n3
n0 --> n1
n3 --> n5
n1 --> n2
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 n0 trigger
class n2 ai
class n1 decision
class n4 database
class n3 code
classDef customIcon fill:none,stroke:none
class n3 customIcon
The Problem: LinkedIn Repurposing Turns Into Transcript Busywork
Repurposing a video sounds easy until you do it every week. Someone has to find the latest upload, grab a transcript (or generate one), skim a 10 to 30 minute conversation for actual themes, then write a post that doesn’t read like a transcript dump. And because LinkedIn rewards consistency, skipping “just one week” tends to spiral into a month of silence. The worst part is the context switching. You bounce between YouTube, transcript tools, AI prompts, and a spreadsheet, and still end up with posts that need heavy edits.
It adds up fast. Here’s where it usually breaks down.
- Transcripts get pulled manually, and it’s easy to miss a new upload when the week is busy.
- Post drafts live in DMs or scattered docs, so approval and scheduling turn into a back-and-forth mess.
- Teams rewrite prompts every time, which means inconsistent tone and a lot of “this doesn’t sound like us.”
- Small formatting mistakes sneak in, and suddenly hashtags, CTAs, and hooks are missing in half the posts.
The Solution: New YouTube Uploads Become LinkedIn Drafts in Sheets
This workflow turns your YouTube channel into a steady stream of LinkedIn drafts, without anyone touching the transcript. It starts by monitoring a channel’s RSS feed for new uploads. When a new video appears, the workflow sends the video link to Apify to extract the full transcript (so you’re not copy-pasting from YouTube or scraping captions by hand). Next, an OpenAI chat model generates two distinct LinkedIn post drafts written like a “thought leader,” based on the core themes of the video. Then a small parsing step structures that output into consistent fields, splits the two drafts into separate items, and saves each as a new row in Google Sheets. Your team gets a neat queue: video link, theme, hook, body, CTA, and hashtags.
The workflow starts when YouTube publishes. From there, Apify grabs the transcript and AI turns it into two publishable drafts. Finally, Google Sheets becomes your content inbox, ready for review and scheduling.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish 3 YouTube videos a week and want two LinkedIn posts per video. Manually, you might spend about 20 minutes pulling the transcript, another 30 minutes skimming and outlining, then about 30 minutes writing and formatting, so roughly 1.5 hours per video (about 4-5 hours a week). With this workflow, your “work” is basically zero minutes after setup: the trigger fires, processing runs in the background, and you review drafts in a Google Sheet when convenient. You still edit, of course, but you’re starting from usable drafts, not a blank page.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- YouTube channel RSS feed URL to detect new uploads
- Apify for transcript extraction from video links
- OpenAI API key (get it from your OpenAI dashboard)
- Google Sheets to store drafts for review
Skill level: Intermediate. You’ll connect accounts, paste a YouTube RSS URL, and do light prompt editing to match your voice.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A new video gets detected. n8n watches a YouTube channel via its RSS feed. When YouTube publishes, the workflow triggers automatically with the new video’s URL.
The transcript is collected. That URL is sent to Apify, which retrieves the transcript content so you’re not relying on someone to copy captions or paste text into a doc.
AI turns themes into drafts. The OpenAI chat prompt takes the transcript and generates two different LinkedIn post drafts. They’re meant to be insightful, not just summaries, which frankly is what most repurposing fails at.
Everything lands in Google Sheets. The workflow parses the AI response into structured fields (Theme, Hook, Body, CTA, Hashtags), then inserts each post as a new row. Now drafts are easy to review, assign, and schedule.
You can easily modify the prompt tone to match your brand voice based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Feed Monitor Trigger
Set up the RSS trigger to watch a YouTube channel feed and initiate the workflow whenever a new video is published.
- Add the Feed Monitor Trigger node as your trigger.
- Set Feed URL to
https://www.youtube.com/feeds/videos.xml?channel_id=REPLACE_THIS_ID. - Under Poll Times, set the schedule to run at Hour
9. - Keep Flowpast Branding as a visual note (no configuration required).
Step 2: Connect Apify for Transcript Extraction
Use Apify to fetch the video transcript from each feed item.
- Add the Execute Apify Actor node after Feed Monitor Trigger.
- Set Operation to
Run actor and get dataset. - Choose the actor YouTube video to Transcript (scrapingxpert/youtube-video-to-transcript) in Actor.
- Set Custom Body to
={ "start_urls": [ { "url": "{{ $json.link }}" } ] }. - Set Authentication to
apifyOAuth2Api.
Step 3: Set Up AI Chat Prompt
Configure the OpenAI model to generate two LinkedIn-ready posts from the transcript.
- Add the AI Chat Prompt node after Execute Apify Actor.
- Select the Model as
gpt-4.1-mini. - In Messages, keep the provided system prompt and ensure the transcript placeholder uses
{{ $json.transcript }}. - Leave Simplify set to
falseso the raw JSON can be parsed later.
Credential Required: Connect your openAiApi credentials in AI Chat Prompt.
Step 4: Configure Parsing, Expansion, and Google Sheets Output
Parse the AI JSON, split the array into individual posts, and append each to Google Sheets.
- Add Parse JSON Script after AI Chat Prompt and set Mode to
runOnceForEachItem. - Paste the JavaScript Code exactly as shown:
const response = $input.item.json.choices[0].message.content; const parsedData = JSON.parse(response); // Wrap the array in an object with a key, for example, 'posts' // n8n will correctly handle this structured output. return { posts: parsedData }; - Add Expand Posts List and set Field to Split Out to
posts. - Add Add Row to Sheet and set Operation to
append. - Set Document to your target spreadsheet and Sheet to
gid=0. - Map columns using expressions: Theme
={{ $json.theme }}, Hook={{ $json.hook }}, Body={{ $json.body }}, CTA={{ $json.cta }}, Hashtags={{ $json.hashtags }}, Video Link={{ $('Feed Monitor Trigger').item.json.link }}.
Step 5: Test and Activate Your Workflow
Run a manual test to confirm the end-to-end flow and then enable the workflow for production use.
- Click Execute Workflow and inspect the output of Feed Monitor Trigger to verify a video item is captured.
- Confirm Execute Apify Actor returns a transcript and AI Chat Prompt outputs a JSON array.
- Verify Parse JSON Script outputs a
postsarray and Expand Posts List creates two items. - Check your spreadsheet to ensure Add Row to Sheet appended two rows with Theme, Hook, Body, CTA, Hashtags, and Video Link.
- Toggle the workflow to Active to start automated runs on the schedule.
Common Gotchas
- Apify credentials can expire or need specific permissions. If things break, check your Apify token status in the Apify console 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 accounts and sheet are ready.
No. You’ll connect Apify, OpenAI, and Google Sheets, then paste in the YouTube RSS URL.
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 Apify runs, which vary based on transcript length and volume.
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, but you’ll add multiple RSS Feed Trigger nodes, one per channel RSS URL, then connect them into the same Apify step. Common customizations include generating exactly 3 drafts instead of 2, adjusting the “thought leader” tone to match your brand, and adding a scheduler after Google Sheets so posts can be queued automatically.
Usually it’s an invalid or expired token in the Apify credentials inside n8n. Regenerate the API key in Apify, update the credential in n8n, and run the Apify node by itself to confirm it returns transcript data. If the video is restricted or captions aren’t available, Apify may return incomplete results. High volume can also trigger rate limits, so slow down execution or stagger channel triggers if you monitor more than one.
It can handle a typical publishing schedule easily.
Often, yes, especially if you want transcript extraction, structured parsing, and “two drafts per video” logic without paying extra for every branching step. n8n handles more complex flows in one canvas, and self-hosting removes execution limits (your server becomes the limit). Zapier or Make can be fine for simple “new video → send notification” automations, but they get clunky when you add transcript handling and formatting. Also, this template uses a community node, which is why many people run it self-hosted. If you want the simplest path, choose Cloud; if you want full control, self-host. Talk to an automation expert if you’re torn.
Once this is running, every upload automatically becomes usable LinkedIn drafts in the same place your team already checks. Set it up, tune the prompt, and let the workflow handle the repetitive part.
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.