Google Drive to Google Sheets, video tracking made easy
You publish a short video, then you lose the file link. Or you forget to log it. A week later, reporting turns into a scavenger hunt across Drive folders, chat threads, and old tabs. This is where Drive Sheets tracking falls apart.
This hits marketing managers first, honestly. But agency owners chasing client approvals and solo creators trying to stay consistent feel it too. The goal is simple: generate the video, store it cleanly, and automatically log every link so you can measure what you shipped.
This workflow does exactly that in n8n. You’ll see how it turns one submission into a captioned video in Google Drive, plus a tidy Google Sheets row you can filter, share, and report from.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Drive to Google Sheets, video tracking made easy
flowchart LR
subgraph sg0["On form submission Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Idea", 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/>Create Clips"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Combine Clips"]
n3@{ icon: "mdi:cog", form: "rounded", label: "Aggregate1", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items3", 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/code.svg' width='40' height='40' /></div><br/>Video url to array"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Combine Clips3"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Captions"]
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 TTS"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", 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/>Fixer"]
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/code.svg' width='40' height='40' /></div><br/>Split into 5s Scenes"]
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/>Create Captions"]
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/form.svg' width='40' height='40' /></div><br/>On form submission"]
n16@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n17@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser2", pos: "b", h: 48 }
n18@{ icon: "mdi:robot", form: "rounded", label: "Script Writier 🧠", pos: "b", h: 48 }
n19@{ icon: "mdi:robot", form: "rounded", label: "Output Parser 🛠", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n21@{ icon: "mdi:robot", form: "rounded", label: "Image Prompter V2 📷", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n23@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n24@{ icon: "mdi:robot", form: "rounded", label: "Long form to Script Writier 🧠", pos: "b", h: 48 }
n25@{ icon: "mdi:brain", form: "rounded", label: "Open Router - Deepseek v3.1", pos: "b", h: 48 }
n26@{ icon: "mdi:brain", form: "rounded", label: "Open Router - Deepseek v3.", pos: "b", h: 48 }
n27@{ icon: "mdi:swap-vertical", form: "rounded", label: "Combine", pos: "b", h: 48 }
n28@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Cleanup", pos: "b", h: 48 }
n29@{ icon: "mdi:swap-vertical", form: "rounded", label: "Base64 To String", pos: "b", h: 48 }
n30@{ icon: "mdi:cog", form: "rounded", label: "Convert String to binary", pos: "b", h: 48 }
n31["<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/>IDs To Array1"]
n32@{ icon: "mdi:cog", form: "rounded", label: "Aggregate3", pos: "b", h: 48 }
n33["<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 - Together.ai"]
n34@{ icon: "mdi:database", form: "rounded", label: "Google Sheets1", pos: "b", h: 48 }
n35@{ icon: "mdi:database", form: "rounded", label: "Google Sheets", pos: "b", h: 48 }
n36@{ icon: "mdi:cog", form: "rounded", label: "Google Drive", pos: "b", h: 48 }
n37@{ icon: "mdi:cog", form: "rounded", label: "Google Drive1", pos: "b", h: 48 }
n38@{ icon: "mdi:database", form: "rounded", label: "Google Sheets2", pos: "b", h: 48 }
n39@{ icon: "mdi:database", form: "rounded", label: "Google Sheets3", pos: "b", h: 48 }
n40@{ icon: "mdi:cog", form: "rounded", label: "Google Drive2", pos: "b", h: 48 }
n41@{ icon: "mdi:cog", form: "rounded", label: "Extract from File", pos: "b", h: 48 }
n42@{ icon: "mdi:database", form: "rounded", label: "Google Sheets4", pos: "b", h: 48 }
n43@{ icon: "mdi:database", form: "rounded", label: "Google Sheets5", pos: "b", h: 48 }
n44@{ icon: "mdi:database", form: "rounded", label: "Google Sheets6", pos: "b", h: 48 }
n45@{ icon: "mdi:cog", form: "rounded", label: "Google Drive3", pos: "b", h: 48 }
n46@{ icon: "mdi:database", form: "rounded", label: "Google Sheets7", pos: "b", h: 48 }
n47@{ icon: "mdi:database", form: "rounded", label: "Google Sheets8", pos: "b", h: 48 }
n48@{ icon: "mdi:database", form: "rounded", label: "Google Sheets9", pos: "b", h: 48 }
n49["<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"]
n50@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out2", pos: "b", h: 48 }
n51@{ icon: "mdi:database", form: "rounded", label: "Google Sheets10", pos: "b", h: 48 }
n52@{ icon: "mdi:database", form: "rounded", label: "Google Sheets12", pos: "b", h: 48 }
n53["<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/>Code1"]
n54@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out3", pos: "b", h: 48 }
n55@{ icon: "mdi:database", form: "rounded", label: "Google Sheets11", pos: "b", h: 48 }
n56@{ icon: "mdi:database", form: "rounded", label: "Google Sheets13", pos: "b", h: 48 }
n57@{ icon: "mdi:database", form: "rounded", label: "Google Sheets14", pos: "b", h: 48 }
n58@{ icon: "mdi:database", form: "rounded", label: "Google Sheets15", pos: "b", h: 48 }
n59@{ icon: "mdi:database", form: "rounded", label: "Google Sheets16", pos: "b", h: 48 }
n60["<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/>Code2"]
n61@{ icon: "mdi:database", form: "rounded", label: "Google Sheets17", pos: "b", h: 48 }
n62@{ icon: "mdi:database", form: "rounded", label: "Google Sheets18", pos: "b", h: 48 }
n65["<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/telegram.svg' width='40' height='40' /></div><br/>Telegram"]
n66["<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"]
n67["<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/telegram.svg' width='40' height='40' /></div><br/>Telegram1"]
n68@{ icon: "mdi:cog", form: "rounded", label: "Google Drive4", pos: "b", h: 48 }
n69@{ icon: "mdi:cog", form: "rounded", label: "Google Drive6", pos: "b", h: 48 }
n70["<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/telegram.svg' width='40' height='40' /></div><br/>Telegram2"]
n49 --> n50
n53 --> n54
n60 --> n6
n12 --> n11
n23 --> n22
n20 --> n24
n20 --> n18
n27 --> n28
n0 --> n20
n10 --> n13
n11 --> n21
n67 --> n69
n3 --> n5
n32 --> n31
n50 --> n4
n54 --> n55
n1 --> n51
n9 --> n36
n8 --> n37
n36 --> n57
n66 --> n68
n2 --> n56
n37 --> n38
n40 --> n41
n45 --> n46
n68 --> n67
n69 --> n65
n69 --> n70
n31 --> n43
n6 --> n59
n28 --> n35
n34 --> n9
n39 --> n40
n42 --> n32
n44 --> n22
n46 --> n23
n47 --> n49
n48 --> n1
n14 --> n62
n51 --> n4
n55 --> n3
n52 --> n53
n57 --> n8
n58 --> n60
n61 --> n14
n62 --> n66
n22 --> n33
n29 --> n30
n4 --> n48
n41 --> n10
n33 --> n29
n15 --> n0
n15 --> n39
n15 --> n34
n15 --> n44
n15 --> n47
n15 --> n52
n15 --> n58
n15 --> n61
n19 --> n27
n5 --> n2
n18 --> n19
n13 --> n12
n21 --> n42
n30 --> n45
n16 -.-> n19
n17 -.-> n21
n26 -.-> n21
n25 -.-> n19
n25 -.-> n18
n25 -.-> n24
n24 --> n19
end
subgraph sg1["Flow 2"]
direction LR
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/>Add Music"]
n63@{ icon: "mdi:database", form: "rounded", label: "Google Sheets19", pos: "b", h: 48 }
n64@{ icon: "mdi:database", form: "rounded", label: "Google Sheets20", pos: "b", h: 48 }
n7 --> n64
n63 --> n7
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 n15 trigger
class n16,n17,n18,n19,n21,n24 ai
class n25,n26 aiModel
class n20 decision
class n34,n35,n38,n39,n42,n43,n44,n46,n47,n48,n51,n52,n55,n56,n57,n58,n59,n61,n62,n63,n64 database
class n1,n2,n6,n8,n9,n14,n33,n66,n7 api
class n5,n12,n13,n31,n49,n53,n60 code
class n7 disabled
class n63 disabled
class n64 disabled
classDef customIcon fill:none,stroke:none
class n1,n2,n5,n6,n8,n9,n12,n13,n14,n15,n31,n33,n49,n53,n60,n65,n66,n67,n70,n7 customIcon
The Problem: Video publishing creates messy tracking
Creating short videos is already a lot. You’re picking topics, shaping hooks, rewriting awkward lines, and trying to keep a consistent style. Then the “after” work shows up: exporting files, uploading to Drive, naming things, grabbing share links, pasting them into a sheet, and making sure the sheet matches what actually went live. Miss one tiny step and your reporting breaks. Do that a few times and you stop trusting the spreadsheet completely.
It adds up fast. Here’s where it usually breaks down in real life.
- You upload the final MP4 to Google Drive but forget to update the tracker, so the team can’t find the latest version.
- Links get pasted with the wrong permissions, which means clients request access and your approvals stall.
- Captions and titles live in a doc somewhere else, so you waste time rebuilding the post text during scheduling.
- Weekly reporting turns into manual reconciliation, and it can easily eat about 2 hours for a small content calendar.
The Solution: Generate, store, and log every video automatically
This n8n workflow starts when someone submits a simple form (or webhook) with an idea or transcript, plus a few choices like video duration, TTS voice, and visual style. From there, an AI model writes the core content for you: a title, description, hook, full script, and a CTA. That script is converted into voiceover audio, then timestamped captions are generated to match. Next, the workflow slices the script into short scenes (roughly 5–6 seconds each), creates image prompts in your chosen style, and calls an image generator like together.ai or fal.ai. Those images get turned into short video clips with motion, stitched into a full video, and finally composed with audio and captions.
When the video is done, it gets uploaded to Google Drive and the workflow writes a clean tracking row into Google Sheets with the links and key metadata. You can also send the finished output to Telegram so it’s easy to review and share without digging through folders.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish 5 short videos a week. Manually, you might spend about 10 minutes per video uploading to Drive, setting permissions, copying the share link, and updating a tracker, which is roughly 50 minutes weekly just on “logging.” Add another 10 minutes per video to track down captions, titles, and the latest export, and you’re at about 2 hours. With this workflow, submitting the form takes about 2 minutes, then you wait for processing while n8n generates, uploads, and logs everything automatically.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Drive for storing finished video files
- Google Sheets to log links and metadata
- together.ai API key (get it from your together.ai dashboard)
Skill level: Intermediate. You’ll connect accounts, add API keys, and be comfortable tweaking a few prompts and webhook inputs.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A form submission kicks it off. A webhook receives the topic or transcript, plus your choices (duration, voice, visual style, image provider). That single submission becomes the “source of truth” for the whole run.
The content gets generated and structured. An LLM creates the title, description, hook, full script, and CTA. n8n then formats the script so it can be split into short scenes and used for both voiceover and captions.
Media gets created and assembled. Text-to-speech produces the voice track while the workflow generates timestamped captions. Scene prompts go to together.ai or fal.ai, images return, and a video backend (via HTTP requests) turns each image into a motion clip, then concatenates clips, merges audio, and overlays captions.
Everything is stored and logged. The final captioned video uploads to Google Drive, and the workflow writes a row into Google Sheets with share links and key fields for tracking. Optionally, it also drops the result into Telegram for quick review.
You can easily modify the visual style choices to match your brand guidelines based on your needs. See the full implementation guide below for customization options.
Common Gotchas
- Google Drive credentials can expire or need specific permissions. If things break, check the n8n Credentials panel and the Drive “Shared with me” access rules 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.
- together.ai (or fal.ai) requests can hit rate limits, and the error looks like “random failures.” Watch the HTTP Request node execution output and slow down batches if you’re generating lots of scenes.
Frequently Asked Questions
About 45 minutes if your Google accounts and API keys are ready.
No. You’ll mostly connect accounts and paste a few API keys. The only “technical” part is mapping fields so the right link lands in the right Google Sheets column.
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 together.ai or fal.ai image generation costs and your LLM usage via OpenRouter (usually a few cents per video, depending on 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 one of the best reasons to use n8n here. You can swap the image generation calls (together.ai vs fal.ai) by editing the HTTP Request node that sends prompts and the node that parses the response. You can also change how scenes are segmented (5–6 seconds is just a default) and adjust the caption styling in the compose/FFmpeg step. Common customizations include brand font + colors, a tighter hook format, and different Drive folder rules per client.
Usually it’s expired Google OAuth consent or the wrong Google account connected in n8n. Reconnect the Google Drive credential, then confirm the target folder still exists and is shared to that same account. If uploads succeed but links don’t open, it’s commonly a permissions issue on the Drive file (viewer access not granted). Rate limiting can also show up if you push a lot of large uploads back-to-back.
Plenty for most small teams.
Often, yes, because this isn’t a simple “copy A to B” Zap. You’re generating scripts, looping through scenes, calling multiple external APIs, waiting for renders, and then assembling outputs, which is the kind of multi-step logic that gets expensive (or awkward) fast in Zapier. n8n also gives you the self-hosting route, so you can run higher volume without paying per tiny step. That said, if you only want “upload to Drive and add a row to Sheets,” Zapier or Make can be quicker. If you’re unsure, Talk to an automation expert and sanity-check the best approach.
Once this is running, the busywork stops showing up on your calendar. Your videos land in Drive, your sheet stays accurate, and you can finally trust your tracking again.
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.