ElevenLabs to Google Sheets, promo videos tracked
You finish a promo video, paste the link “somewhere safe,” and then… it disappears. A week later you’re hunting through chats, cloud folders, and old tabs, trying to find the final file, the captions, or even the right version.
This hits marketers hardest, honestly. But content creators and small teams running weekly promos feel it too. With ElevenLabs Sheets tracking, you stop losing assets and start logging every finished video link in one place (with a status column so you know what’s done).
This workflow creates the video, waits for processing, grabs the final downloadable URL, then updates Google Sheets automatically. You’ll see how it works, what you need, and where people usually get stuck.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: ElevenLabs to Google Sheets, promo videos tracked
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
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/>Hailuo AI"]
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Video Catagory", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Generate Transcript"]
n4@{ icon: "mdi:cog", form: "rounded", label: "Save Audio", 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/>Fetch Elevenlabs"]
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Public Link", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Audio"]
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/>Create a list of Image Text"]
n9["<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 Image Prompt"]
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/>Get Image Base 64"]
n11@{ icon: "mdi:cog", form: "rounded", label: "Save Image", 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/>Get Hailuo Status"]
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Hailuo Download Link"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Video"]
n16@{ icon: "mdi:cog", form: "rounded", label: "Save Video", 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/>Combine Transcript"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Open AI Whisper"]
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Music and Video", 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/>Create Video"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Video Progress"]
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n23@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Final Video URL", pos: "b", h: 48 }
n24["<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 Captions"]
n25["<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/>JSON to Object"]
n26@{ icon: "mdi:database", form: "rounded", label: "Google Sheets", pos: "b", h: 48 }
n27["<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/merge.svg' width='40' height='40' /></div><br/>Merge1"]
n28@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Image", pos: "b", h: 48 }
n29@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Prompt", pos: "b", h: 48 }
n30@{ icon: "mdi:cog", form: "rounded", label: "Convert Base64 to Data", pos: "b", h: 48 }
n31@{ icon: "mdi:cog", form: "rounded", label: "Limit only first Image to vi..", pos: "b", h: 48 }
n32@{ icon: "mdi:cog", form: "rounded", label: "Wait Hailou done process", pos: "b", h: 48 }
n33@{ icon: "mdi:cog", form: "rounded", label: "Wait1 andynocode combine video", pos: "b", h: 48 }
n22 --> n23
n22 --> n33
n13 --> n14
n13 --> n32
n27 --> n19
n1 --> n32
n4 --> n6
n11 --> n31
n16 --> n27
n28 --> n9
n20 --> n33
n24 --> n25
n29 --> n10
n7 --> n18
n15 --> n16
n25 --> n26
n2 --> n3
n6 --> n7
n18 --> n17
n18 --> n8
n5 --> n4
n12 --> n13
n10 --> n30
n17 --> n27
n21 --> n22
n3 --> n5
n19 --> n20
n23 --> n24
n9 --> n29
n30 --> n11
n14 --> n15
n32 --> n12
n8 --> n28
n33 --> n21
n31 --> n1
n0 --> 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 n13,n22 decision
class n26 database
class n1,n3,n5,n7,n9,n10,n12,n14,n15,n18,n20,n21,n24 api
class n8,n17,n25 code
class n0 disabled
classDef customIcon fill:none,stroke:none
class n1,n3,n5,n7,n8,n9,n10,n12,n14,n15,n17,n18,n20,n21,n24,n25,n27 customIcon
The Challenge: Promo video assets get messy fast
Promo video production looks simple until you do it every day. Script in one doc, voiceover in another tool, images in a folder, video output somewhere else, and captions in yet another place. Then comes the real pain: someone asks for “the final link,” and you’re not even sure which link is final. The mental load is constant, and small mistakes (wrong asset, wrong version, missing captions) cost you extra revisions and delayed posting.
It adds up fast. Here’s where it usually breaks down when you’re doing this manually.
- You end up copying and pasting links between tools, and one forgotten paste means the asset is effectively lost.
- Processing steps happen out of order, so people share a draft link before the final render is ready.
- Captions get separated from the video file, which means last-minute scrambling right before upload.
- Status tracking lives in someone’s head, so the same work gets re-done when teammates “can’t find it.”
The Fix: Auto-generate the video and log the final link
This automation runs your promo video creation like a small assembly line. You launch it, the workflow assigns a category, requests a transcript/script, and sends that text to ElevenLabs for a natural voiceover. That audio is stored and made accessible through a public link so the rest of the pipeline can use it without manual downloads. Next, the workflow transcribes the audio (so you can reuse the spoken content), turns that transcript into image text snippets, generates image prompts, and converts those prompts into usable image files. From there, it sends an image into Hailuo AI to generate a video clip, waits for processing, and keeps checking until the download link is actually ready.
Once the video file exists, the workflow pulls it in, stores it, merges media inputs (like transcript and assets), maps music with the video, and composes the final output through an HTTP-based render step. Finally, it requests captions, parses the caption data, and updates your Google Sheet with the finished video URL and status so you can track everything from one tab.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you produce 5 promo videos a week. Manually, you might spend about 20 minutes per video moving assets around (download audio, upload audio, grab video link, find captions, update a tracker), which is roughly 2 hours weekly just in “admin.” With this workflow, you kick it off once and let processing run in the background, then the final video URL and status land in Google Sheets automatically. You still review the output, but the busywork largely disappears.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to log video title, URL, and status.
- ElevenLabs for realistic voiceover generation.
- API keys for your AI tools (get them in each provider’s dashboard, then add to n8n credentials).
Skill level: Intermediate. You’ll be comfortable connecting accounts, adding API keys, and testing a few runs to confirm the sheet updates correctly.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Manual launch kicks things off. You start the run when you’re ready, which is useful for promo batches or one-off campaigns. The workflow immediately tags the run with a video category so your tracking stays organized.
Script and voice are generated, then made reusable. An HTTP request pulls or generates transcript text, then ElevenLabs produces the audio. The audio is stored in cloud storage and converted into a public link so downstream services can fetch it reliably.
Transcript gets repurposed into visuals and motion. The workflow transcribes the audio, combines the text, builds a list of image-friendly snippets, and generates image prompts. Those prompts are turned into image files, stored, and passed to Hailuo for image-to-video rendering while n8n waits and checks status until the render is complete.
Final video is composed, captioned, and logged. The created video file is fetched and stored, media inputs are merged, music is mapped, and a final composition step runs via HTTP. Then captions are requested, parsed, and the workflow updates your Google Sheet with the final downloadable URL and status.
You can easily modify the Google Sheet columns to match your internal workflow (owner, campaign, publish date) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Start the workflow manually so you can validate every stage of the video pipeline before scheduling it.
- Add the Manual Launch Trigger node as the workflow entry point.
- Open Manual Launch Trigger and ensure it is enabled (the node is currently disabled in the workflow).
- Connect Manual Launch Trigger to Assign Video Category.
Step 2: Connect Google Cloud Storage and Google Sheets
This workflow stores audio, images, and video in cloud storage and writes final metadata to a spreadsheet.
- Open Store Audio File and add credentials.
- Open Store Image File and add credentials.
- Open Store Video File and add credentials.
- Open Update Google Sheet and add credentials.
Step 3: Set Up the Audio Transcription Pipeline
This section generates audio, uploads it, and transcribes it to create text for the video narrative.
- Configure Assign Video Category to set any metadata fields required by your API calls.
- Set up the HTTP calls in Request Transcript and Retrieve ElevenLabs Audio to your transcript and audio providers.
- Confirm Store Audio File writes the file to your Google Cloud Storage bucket, then map the public URL in Set Public Audio Link.
- Configure Fetch Audio Asset and Run Whisper Transcription to send the public audio link to your transcription service.
- Note that Run Whisper Transcription outputs to both Combine Transcript Text and Build Image Text List in parallel.
Step 4: Build Image Assets and Prepare Hailuo Video Input
This branch converts transcription output into image prompts, generates images, and prepares the first image for Hailuo video creation.
- In Build Image Text List, ensure the output is an array of prompt items expected by Split Image Items.
- Connect Split Image Items → Create Image Prompts → Split Prompt Items → Fetch Image Base64.
- Convert the image payload with Convert Base64 to File and store it with Store Image File.
- Use Limit First Image to select only the first image for the Hailuo request.
Step 5: Configure Hailuo Processing and Status Loop
This section submits the image to Hailuo, waits for processing, and retrieves the resulting video file.
- Set up Hailuo API Call with the required request body and image reference.
- Use Wait for Hailuo Processing to pause the workflow before polling.
- Configure Check Hailuo Status and route it through Hailuo Status Check to either wait again or proceed.
- Once ready, retrieve the output with Retrieve Hailuo Download Link → Fetch Video File → Store Video File.
Step 6: Compose Final Video, Captions, and Spreadsheet Update
Combine the transcript and video file, request captions, and store results in Google Sheets.
- Merge transcript and video inputs using Merge Media Inputs, then map fields in Map Music With Video.
- Call the composition service in Compose Video and wait in Wait for Video Merge.
- Poll with Check Video Progress and route through Video Progress Check until complete.
- Set the final URL in Set Final Video Link, then request captions with Request Captions.
- Parse the captions in Parse Caption JSON and write final fields in Update Google Sheet.
Step 7: Test and Activate Your Workflow
Run a full test to verify each API call, storage upload, and spreadsheet update before production use.
- Click Execute Workflow on Manual Launch Trigger and follow the run in the execution log.
- Confirm that the workflow uploads files in Store Audio File, Store Image File, and Store Video File.
- Verify that Update Google Sheet receives a row with the final caption data and video link.
- Once validated, enable the workflow and replace Manual Launch Trigger with a production trigger if needed.
Watch Out For
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials panel and confirm the spreadsheet is shared with the connected Google account 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.
Common Questions
About an hour if your API keys and Google Sheet are ready.
Yes, but you’ll want one careful setup pass. No coding is required, though you will be pasting API keys and testing a run end-to-end.
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 API costs from ElevenLabs and your other AI providers.
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.
You can. Most customization happens in the “Assign Video Category” and “Update Google Sheet” steps, where you decide how you label runs and what gets written to the sheet. If you want a different storage destination, swap the cloud storage steps and keep the final “Set Final Video Link” logic intact. Common tweaks include adding an “owner” column, writing the caption text into the sheet, or logging separate links for audio and video assets.
Usually it’s expired Google authorization or the spreadsheet isn’t shared with the connected account. Reconnect Google Sheets in n8n credentials, then confirm the Sheet ID is correct and the file lives in a Drive the account can access. If it fails only sometimes, you may be hitting quota limits when running large batches, so spacing executions out can help.
It scales mostly based on your AI providers, because rendering and transcription are the slow parts. n8n itself can run many executions, but you’ll wait on Hailuo processing and the video composition checks, so a big batch will take longer. If you self-host, there’s no execution limit in n8n, but your server and API rate limits still matter. Practically, teams run this for a few promos a day without thinking about capacity at all.
Often, yes. This workflow relies on waiting, polling for status, merging multiple media inputs, and handling files, which is where n8n is simply more flexible (and less expensive at higher volume). Zapier or Make can still work, but you may find yourself stitching together multiple scenarios and paying more once you add “loop until complete” logic. If you just want “new row in a sheet when a link exists,” those tools are fine. If you want the full video pipeline plus logging, n8n is the cleaner fit. Talk to an automation expert if you want a quick recommendation for your stack.
Once this is in place, your promo videos stop living in five different places. The workflow runs, the sheet updates, and you move on to the next campaign.
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.