Google Sheets + HeyGen: YouTube videos published for you
Your YouTube consistency usually breaks in the same place. You have ideas, maybe even a rough outline, but turning that into a finished upload means too many tiny steps, too many tabs, and way too many chances to stall out.
YouTube managers feel it when the content calendar slips. A solo creator feels it when filming time disappears. And an agency lead feels it when “we’ll publish Friday” quietly becomes next week. This YouTube video automation takes a Google Sheet row and turns it into a real, published video.
Below, you’ll see exactly what the workflow does, what it replaces, and what you need to get it running in n8n without turning your life into a tech project.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + HeyGen: YouTube videos published for you
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Limit", pos: "b", h: 48 }
n5["<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/>HTTP Request"]
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/>Extract HTML"]
n7@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n8["<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"]
n9@{ icon: "mdi:robot", form: "rounded", label: "AI Video Script (Transcript ..", pos: "b", h: 48 }
n10["<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/>Download Video"]
n11["<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/>Generate the Video"]
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/>Get Video URL"]
n13@{ icon: "mdi:cog", form: "rounded", label: "Wait for the Video to be Gen..", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Upload a video", pos: "b", h: 48 }
n16@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n17@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model1", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "Update Youtube Meta Data", pos: "b", h: 48 }
n19@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet", pos: "b", h: 48 }
n20@{ icon: "mdi:message-outline", form: "rounded", label: "SendAndWait email", pos: "b", h: 48 }
n21@{ icon: "mdi:robot", form: "rounded", label: "AI Agent for Meta Data of Yo..", pos: "b", h: 48 }
n22@{ icon: "mdi:cog", form: "rounded", label: "Sort", pos: "b", h: 48 }
n8 --> n3
n22 --> n8
n4 --> n5
n2 --> n22
n3 --> n4
n6 --> n9
n5 --> n6
n12 --> n10
n10 --> n15
n15 --> n21
n1 --> n14
n7 -.-> n9
n20 --> n18
n11 --> n13
n17 -.-> n21
n14 --> n2
n0 -.-> n9
n18 --> n19
n16 -.-> n21
n21 --> n20
n13 --> n12
n9 --> n11
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 n1 trigger
class n0,n9,n16,n21 ai
class n7,n17 aiModel
class n2 decision
class n14,n19 database
class n5,n10,n11,n12 api
class n6,n8 code
class n1 disabled
class n20 disabled
classDef customIcon fill:none,stroke:none
class n5,n6,n8,n10,n11,n12 customIcon
The Problem: Publishing videos is a repeatable mess
Most YouTube channels don’t fail because the ideas are bad. They fail because publishing is exhausting. You collect topics in one place, research in another, write scripts in a doc, generate or record the video somewhere else, then spend another chunk of time doing the upload, the metadata, the tags, the thumbnail details, and the “did we log this anywhere?” admin work. Miss one step and you either publish late or publish sloppy. Do it weekly and it becomes a second job.
It adds up fast. Here’s where it usually breaks down.
- You end up copy-pasting titles, descriptions, and tags from old videos because writing fresh metadata every time is a grind.
- Uploading and then “finishing” the video in YouTube Studio often takes about 30 minutes per video once you include checks and tweaks.
- Research gets half-done because it’s buried behind the production work, so the script quality slips over time.
- No clean tracking exists, so you can’t tell what’s queued, what’s rendering, and what actually went live.
The Solution: Google Sheets to HeyGen to YouTube, fully automated
This workflow turns your Google Sheet into a production queue. On a schedule (weekly is common), n8n pulls a “To Do” idea from your sheet, grabs supporting details from the web using an HTTP request, then uses an AI agent to draft a ready-to-narrate script. That script is sent to HeyGen to generate an avatar video. n8n waits while HeyGen renders, retrieves the finished video file, and uploads it to YouTube. After upload, a second AI step generates your title, description, tags, and hashtags, then the workflow updates metadata and flips visibility to Public. Finally, it logs the publish details back to Google Sheets, so you always know what happened.
The flow starts with a scheduled pull from Google Sheets. In the middle, AI handles the script and YouTube metadata while HeyGen handles the actual video creation. At the end, YouTube receives a real upload (not a draft sitting on your desktop), and your sheet is updated as the source of truth.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish one video a week for an affiliate channel. Manually, it’s often about 2 hours to research and shape a script, another hour to produce a clean voice/video output, then about 30 minutes to upload and write metadata, so roughly 4 hours total. With this workflow, you add a row in Google Sheets (about 5 minutes), then wait for rendering and upload in the background (often under an hour, depending on HeyGen). You mostly review and approve when you want, and the rest ships itself.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your content queue and status tracking
- HeyGen API to generate the avatar video
- YouTube Data API (OAuth) (enable it in Google Cloud Console)
- OpenAI API key (create it in your OpenAI dashboard)
Skill level: Intermediate. You’ll connect accounts, paste API keys, and do light troubleshooting if a permission or rate limit pops up.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled run pulls the next idea. n8n starts on a schedule trigger, fetches rows from Google Sheets, filters for your “To Do” status, sorts, and limits to a single record so you publish one item per run.
Context is fetched from the web. Using an HTTP request, the workflow pulls content from a product page or source URL. A small parsing step extracts the useful bits, so the AI isn’t guessing or hallucinating from a blank prompt.
The script and metadata are generated. An AI agent writes the transcript, then another AI step produces YouTube-ready title ideas, a description, tags, and hashtags. Output parsers structure the responses so the next nodes can use them reliably.
HeyGen renders, then YouTube publishes. The script is sent to HeyGen for avatar generation, the workflow waits for rendering, retrieves the finished video file, uploads to YouTube, updates metadata, and finally sets the video to Public after an optional email approval step.
You can easily modify the Google Sheets “status” rules to change what gets picked up next based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Trigger
Set up the workflow schedule so the automation starts on a recurring basis.
- Add the Scheduled Run Trigger node at the start of the workflow.
- Configure the schedule options inside Scheduled Run Trigger to match your publishing cadence.
- Connect Scheduled Run Trigger to Fetch Sheet Rows to begin the data pipeline.
Step 2: Connect Google Sheets
Pull source rows from your spreadsheet and later write back status updates.
- Open Fetch Sheet Rows and select the spreadsheet and sheet that contain your video queue.
- Credential Required: Connect your Google Sheets credentials in Fetch Sheet Rows.
- Open Modify Sheet Row and map the fields you want to update after publishing.
- Credential Required: Connect your Google Sheets credentials in Modify Sheet Row (use the same account as Fetch Sheet Rows).
Step 3: Prepare and Filter Records
Filter, sort, and normalize the sheet data before generating the script.
- Configure Record Filter to select only rows ready for processing.
- Set sorting logic in Sort Records to define processing order.
- Use Custom Script to transform or calculate fields before mapping.
- Use Modify Fields to shape the dataset that feeds downstream nodes.
- Limit batch size with Record Limiter to avoid overloading external services.
Step 4: Generate the Video Script with AI
Fetch external content, parse it, and generate a structured script using AI.
- Configure External API Request to fetch source content for the video.
- Use Parse HTML Content to extract clean text for AI input.
- Set up AI Script Composer to generate the script from the parsed content.
- Open OpenAI Chat Engine and attach it as the language model for AI Script Composer.
- Credential Required: Connect your OpenAI credentials in OpenAI Chat Engine.
- Attach Formatted Output Parser to AI Script Composer for structured output. This is a sub-node—credentials (if needed) should be configured on OpenAI Chat Engine, not the parser.
Step 5: Render and Retrieve the Video Asset
Send the script to your rendering service, wait for completion, and download the output.
- Configure Generate Video Asset to submit the script to your video rendering API.
- Use Await Video Render to pause the workflow until rendering completes.
- Configure Fetch Video Link to retrieve the final asset URL.
- Set up Retrieve Video File to download the rendered video file for upload.
Step 6: Publish to YouTube and Enrich Metadata
Upload the video, generate metadata using AI, and update YouTube and your sheet.
- Configure Publish Video Upload to upload the video file to YouTube.
- Credential Required: Connect your YouTube OAuth2 credentials in Publish Video Upload.
- Set up YouTube Metadata Agent to generate optimized title/description/tags.
- Open OpenAI Chat Engine 2 and attach it as the language model for YouTube Metadata Agent.
- Credential Required: Connect your OpenAI credentials in OpenAI Chat Engine 2.
- Attach Metadata Output Parser to YouTube Metadata Agent for structured outputs. This is a sub-node—credentials (if needed) should be configured on OpenAI Chat Engine 2, not the parser.
- Configure Send & Await Email if you require manual approval before updating metadata.
- Credential Required: Connect your Email (SMTP) credentials in Send & Await Email.
- Set up Update YouTube Metadata to apply AI-generated metadata to the uploaded video.
- Credential Required: Connect your YouTube OAuth2 credentials in Update YouTube Metadata.
- Use Modify Sheet Row to mark the video as published and store the YouTube URL.
Step 7: Test and Activate Your Workflow
Run a full test to verify data flow, asset creation, and YouTube publishing before turning on automation.
- Click Execute Workflow to run a manual test from Scheduled Run Trigger.
- Verify that Fetch Sheet Rows pulls a row, passes through Record Filter and Sort Records, and reaches External API Request.
- Confirm that AI Script Composer generates structured output and that Generate Video Asset starts rendering.
- Check that Publish Video Upload posts the video and Update YouTube Metadata applies the AI-generated fields.
- After successful testing, enable Scheduled Run Trigger to activate the workflow for production use.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials page and confirm the connected Google account still has access to the sheet.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- HeyGen or YouTube API calls can fail on quota or missing scopes. If uploads start failing, review your Google Cloud OAuth scopes and YouTube Data API quota usage before you rewrite the workflow.
Frequently Asked Questions
About an hour if your APIs are ready.
No. You’ll mostly connect accounts, paste keys, and test one run. If you can handle basic “does this account have permission?” troubleshooting, you’re fine.
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 (often a few cents per video) plus HeyGen generation costs.
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 one of the easiest swaps. Replace the “Fetch Sheet Rows” and “Modify Sheet Row” Google Sheets nodes with Airtable or Notion nodes, then keep the same status logic (To Do → Published). Common customizations include changing the idea fields, adding a “client” column for agencies, and inserting a second approval step before the YouTube upload.
Usually it’s an invalid or expired HeyGen API key, or the request is missing a required parameter for your chosen avatar/voice. Check the HeyGen API response inside the “Generate Video Asset” HTTP node and confirm your account has enough credits to render. If it fails only sometimes, it can be rate limiting or a render job timing out, so increasing the Wait node duration helps.
A lot, as long as your YouTube quota and HeyGen plan can keep up.
Often, yes for this specific use case. Zapier and Make are great for simple “send X to Y,” but this workflow has branching, waiting for renders, structured AI outputs, and multi-step YouTube updates, which can get expensive or awkward elsewhere. n8n also gives you the self-hosted route, so you’re not paying per tiny step forever. The tradeoff is you have more knobs to configure, which is honestly a good thing once you want control. If you’re unsure, Talk to an automation expert and you’ll get a straight answer based on your volume.
Set it up once, keep the sheet filled, and let publishing happen in the background. The workflow handles the repetitive stuff, so you can spend your time on ideas and strategy instead.
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.