
Google Sheets to Veo 3: Instantly Create Videos with n8n & Fal.AI
Description
Categories
🤖 AI & Machine Learning📢 Marketing
Nodes Used
n8n-nodes-base.ifn8n-nodes-base.setn8n-nodes-base.waitn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.httpRequestn8n-nodes-base.httpRequest
PriceGratis
Views0
Last Updated11/28/2025
workflow.json
{
"id": "wGQOrU5qak5K99FT",
"meta": {
"instanceId": "d59922ccaab8f9a216dbe3eacc226c7a17998a61f6c4177822cd8e33edb224d7"
},
"name": "Google Sheets to Veo 3: Instantly Create Videos with n8n & Fal.AI",
"tags": [
{
"id": "fElGhCk9TINqseuM",
"name": "templates",
"createdAt": "2025-06-11T19:44:28.283Z",
"updatedAt": "2025-06-11T19:44:28.283Z"
},
{
"id": "I8yfdg9mSqeqo4nX",
"name": "creator",
"createdAt": "2025-06-11T19:44:30.157Z",
"updatedAt": "2025-06-11T19:44:30.157Z"
}
],
"nodes": [
{
"id": "7beb408f-128b-4e4c-8d03-e5625fbcb2eb",
"name": "Wait 5s",
"type": "n8n-nodes-base.wait",
"position": [
340,
620
],
"webhookId": "150069ed-885b-497f-a32a-09e7088136e6",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "77d6a74f-b704-40f2-b054-fbf91c93726a",
"name": "Check if video is ready",
"type": "n8n-nodes-base.if",
"position": [
160,
620
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ac50759b-e2f3-4efd-a2af-f28b7d209b45",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "COMPLETED"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "cd94d480-3562-4ce3-aff0-9caf5dee9f72",
"name": "Get video url",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
940
],
"parameters": {
"url": "={{ $json.response_url }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Key <YOUR_API_KEY>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "5267ac1d-36ad-449a-9f5f-cae01a090b33",
"name": "Generate prompt for Veo 3 model",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
180,
-20
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "chatgpt-4o-latest",
"cachedResultName": "CHATGPT-4O-LATEST"
},
"options": {},
"messages": {
"values": [
{
"role": "assistant",
"content": "=You are a creative prompt engineer for Google's Veo 3 video generation model. For any concept provided, craft a detailed, visually immersive prompt that specifies the subject, setting, lighting, mood, era or style, object details, composition, and background elements. Use evocative, sensory-rich language and guide the model to produce authentic, high-quality images. Match the style and depth of the following example:\n\nA casual street interview on a busy New York City sidewalk in the afternoon. The interviewer holds a plain, unbranded microphone and asks: Have you seen Google's new Veo3 model It is a super good model. Person replies: Yeah I saw it, it's already available on fal. It's crazy good.\n\nRespond only with the crafted prompt."
},
{
"content": "=the input is: {{ $json.Idea }}"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "6iZ86Vz38pnHnAuF",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "a5864945-030e-4d80-83cb-2f558399d8bf",
"name": "Submit Request to generate video",
"type": "n8n-nodes-base.httpRequest",
"position": [
340,
300
],
"parameters": {
"url": "https://queue.fal.run/fal-ai/veo3",
"method": "POST",
"options": {},
"jsonBody": "={\n \"prompt\": \"{{ $json.prompt }}\",\n \"aspect_ratio\": \"{{ $json.ratio }}\",\n \"enhance_prompt\": true,\n \"generate_audio\": {{ $json.audio }}\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "authorization",
"value": "Key <YOUR_API_KEY>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "00f339c8-f6e3-42b3-aa56-abe34268c68a",
"name": "Set variables for Video generation",
"type": "n8n-nodes-base.set",
"position": [
0,
300
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4807c116-ed98-4a0e-8dba-aab1dd2ee971",
"name": "prompt",
"type": "string",
"value": "={{ $json.message.content }}"
},
{
"id": "32437b05-fa7a-4f3b-bad0-fc7201cc7371",
"name": "ratio",
"type": "string",
"value": "={{ $('Google Sheets Trigger').item.json.Ratio }}"
},
{
"id": "4cf00dd2-9057-4868-93ac-7f9725750d77",
"name": "audio",
"type": "string",
"value": "={{ $('Google Sheets Trigger').item.json.Audio }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "88429b78-fe9f-42ca-81e1-0b364703ab2a",
"name": "Check video status",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
620
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/veo3/requests/{{ $json.request_id }}/status",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Key <YOUR_API_KEY>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "26e74f30-575f-407a-99ee-f75daad9a2e4",
"name": "Google Sheets Trigger",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
0,
-20
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/100ur8DnU_q2YIAx15ccMfEWC43Di_G7hj19csjxg73A/edit#gid=0",
"cachedResultName": "Results"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "100ur8DnU_q2YIAx15ccMfEWC43Di_G7hj19csjxg73A",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/100ur8DnU_q2YIAx15ccMfEWC43Di_G7hj19csjxg73A/edit?usp=drivesdk",
"cachedResultName": "Veo 3 template"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"id": "CUMqe7iFy7F1KIF9",
"name": "Google Sheets account NervoAI"
}
},
"typeVersion": 1
},
{
"id": "57f0306d-3b12-4717-afc6-c548863c2f7f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-780,
-80
],
"parameters": {
"color": 5,
"width": 700,
"height": 1140,
"content": "## Google Sheets to Veo 3: Instantly Create Videos with n8n & Fal.AI\n\nEasily generate 8-second videos using Fal.AI’s Veo 3 model—just add a row to your Google Sheet with your idea, the video ratio, and whether you want audio (true/false).\n\nHere’s what Fal.AI charges:\n\n1s video: $0.50\n\n1s video with audio: $0.75\n\n8s video (default): $4.00\n\n8s video with audio: $6.00\n\nHere are the execution times:\n\n8s video (default): 3 minutes\n\n8s video with audio: 15 minutes\n\n**Step 1: Connect Google Sheets**\n\nAdd your Google service account credentials and make sure Google Sheets API is enabled in your Google Cloud project.\n\nCopy the shared template sheet in the description.\n\nDouble-check that your n8n Google Sheets nodes are linked to the correct spreadsheet.\n\n**Step 2: Connect OpenAI**\n\nGet your OpenAI API key.\n\nAdd your OpenAI credentials in n8n.\n\n**Step 3: Set Up Fal.ai**\n\nSign up at fal.ai and top up your account.\n\nGrab your API key from the Fal.ai dashboard.\n\nIn n8n, update the \"Submit Request to generate video,\" \"Check video status,\" and \"Get video url\" nodes. Replace the authorization header with your API key: 'Key <YOUR_API_KEY>'\n\n**Step 4: View Results in the Sheet**\n\nOnce your sheet updates, you’ll see the prompt used and the video URL.\n\n** Troubleshoot**\nIf the “Audio” column shows as a boolean instead of text and gives error generating the video, enter it as '=\"true\"' or '=\"false\"' in the spreadsheet.\n\nif any other issue, please contact me at [email protected]\n\n\nThat’s it! You’re ready to create Veo 3 videos straight from Google Sheets.\n"
},
"typeVersion": 1
},
{
"id": "9dc75bc3-25a7-4c3c-bb65-8372acb2703b",
"name": "Update sheet with video url and prompt used in Veo3",
"type": "n8n-nodes-base.googleSheets",
"position": [
340,
940
],
"parameters": {
"columns": {
"value": {
"Idea": "={{ $('Google Sheets Trigger').item.json.Idea }}",
"Video Generated": "={{ $json.video.url }}",
"Prompt Generated": "={{ $('Generate prompt for Veo 3 model').item.json.message.content }}"
},
"schema": [
{
"id": "Idea",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Idea",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Ratio",
"type": "string",
"display": true,
"required": false,
"displayName": "Ratio",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Audio",
"type": "string",
"display": true,
"required": false,
"displayName": "Audio",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Prompt Generated",
"type": "string",
"display": true,
"required": false,
"displayName": "Prompt Generated",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video Generated",
"type": "string",
"display": true,
"required": false,
"displayName": "Video Generated",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Idea"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/100ur8DnU_q2YIAx15ccMfEWC43Di_G7hj19csjxg73A/edit#gid=0",
"cachedResultName": "Results"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "100ur8DnU_q2YIAx15ccMfEWC43Di_G7hj19csjxg73A",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/100ur8DnU_q2YIAx15ccMfEWC43Di_G7hj19csjxg73A/edit?usp=drivesdk",
"cachedResultName": "Veo 3 template"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "f8o05SKiFZmuFhu9",
"name": "Google Sheets account nervoAI"
}
},
"typeVersion": 4.6
},
{
"id": "774b9b76-4cd8-4d5a-8b8b-587ee1cae464",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-40,
-140
],
"parameters": {
"color": 3,
"width": 540,
"height": 300,
"content": "## Stage 1: Trigger & Prompt Generation\nStarts the workflow when a new row is added in Google Sheets, then when the workflow is actioned, it generates a prompt for the Veo 3 video model based on the sheet data."
},
"typeVersion": 1
},
{
"id": "169699a3-6208-4586-8c3c-a3df7f3cdaf2",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-40,
180
],
"parameters": {
"color": 6,
"width": 540,
"height": 300,
"content": "## Stage 2: Prepare & Submit Video Request\nSets up all necessary variables for video creation and sends a request to Fal.AI to generate the video."
},
"typeVersion": 1
},
{
"id": "739cdf63-5e11-4364-b4f8-3b65e962ce3e",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-40,
500
],
"parameters": {
"width": 540,
"height": 300,
"content": "## Stage 3: Monitor Video Status\nChecks the status of the video generation. Waits and repeatedly checks every 5 seconds until the video is ready."
},
"typeVersion": 1
},
{
"id": "49c27097-de0e-4516-8ee0-8936507d7455",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-40,
820
],
"parameters": {
"color": 4,
"width": 540,
"height": 300,
"content": "## Stage 4: Retrieve & Update Results\nGets the final video URL and updates the Google Sheet with the video link and the prompt used."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "9f0cad2c-2edc-4ab2-9a10-0ae019069b35",
"connections": {
"Wait 5s": {
"main": [
[
{
"node": "Check video status",
"type": "main",
"index": 0
}
]
]
},
"Get video url": {
"main": [
[
{
"node": "Update sheet with video url and prompt used in Veo3",
"type": "main",
"index": 0
}
]
]
},
"Check video status": {
"main": [
[
{
"node": "Check if video is ready",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets Trigger": {
"main": [
[
{
"node": "Generate prompt for Veo 3 model",
"type": "main",
"index": 0
}
]
]
},
"Check if video is ready": {
"main": [
[
{
"node": "Get video url",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 5s",
"type": "main",
"index": 0
}
]
]
},
"Generate prompt for Veo 3 model": {
"main": [
[
{
"node": "Set variables for Video generation",
"type": "main",
"index": 0
}
]
]
},
"Submit Request to generate video": {
"main": [
[
{
"node": "Check video status",
"type": "main",
"index": 0
}
]
]
},
"Set variables for Video generation": {
"main": [
[
{
"node": "Submit Request to generate video",
"type": "main",
"index": 0
}
]
]
}
}
}