AutomationFlowsAI & RAG › Create AI Generated Videos 4x Cheaper Than Veo3 with Google Sheets & Fal.ai

Create AI Generated Videos 4x Cheaper Than Veo3 with Google Sheets & Fal.ai

ByMaximiliano Rojas-Delgado @maxr on n8n.io

Turn Your Ideas into Videos—Right from Google Sheets!

Event trigger★★★★☆ complexityAI-powered14 nodesHTTP RequestGoogle Sheets TriggerGoogle SheetsOpenAI
AI & RAG Trigger: Event Nodes: 14 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #5034 — we link there as the canonical source.

This workflow follows the Google Sheets → Googlesheetstrigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "wGQOrU5qak5K99FT",
  "name": "Create AI Generated Videos 4x cheaper than veo3 with Google Sheets & Fal.AI",
  "tags": [
    {
      "id": "I8yfdg9mSqeqo4nX",
      "name": "creator",
      "createdAt": "2025-06-11T19:44:30.157Z",
      "updatedAt": "2025-06-11T19:44:30.157Z"
    },
    {
      "id": "fElGhCk9TINqseuM",
      "name": "templates",
      "createdAt": "2025-06-11T19:44:28.283Z",
      "updatedAt": "2025-06-11T19:44:28.283Z"
    }
  ],
  "nodes": [
    {
      "id": "7beb408f-128b-4e4c-8d03-e5625fbcb2eb",
      "name": "Wait 5s",
      "type": "n8n-nodes-base.wait",
      "position": [
        340,
        620
      ],
      "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": [
        20,
        940
      ],
      "parameters": {
        "url": "={{ $json.response_url }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Key <YOUR_API_KEY>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "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/kling-video/v2.1/master/text-to-video",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"prompt\": \"{{ $json.prompt }}\",\n  \"aspect_ratio\": \"9:16\"\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 }}"
            }
          ]
        }
      },
      "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/kling-video/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/1VGhoJU-qHzav53pTUSPtX6PNVPrRp9e38E34AmHoWvg/edit#gid=0",
          "cachedResultName": "Results"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1VGhoJU-qHzav53pTUSPtX6PNVPrRp9e38E34AmHoWvg",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VGhoJU-qHzav53pTUSPtX6PNVPrRp9e38E34AmHoWvg/edit?usp=drivesdk",
          "cachedResultName": "Instantly create Kling 2.1 AI Generated Videos 4x cheaper than veo3"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "57f0306d-3b12-4717-afc6-c548863c2f7f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -900,
        -120
      ],
      "parameters": {
        "color": 5,
        "width": 820,
        "height": 1220,
        "content": "## Create AI Generated Videos 4x cheaper than veo3 with Google Sheets & Fal.AI\n\nEasily generate 5-second videos using Fal.AI\u2019s Kling 2.1 model\u2014just add a row to your Google Sheet with your idea, the video ratio, and whether you want audio (true/false).\n\nHere\u2019s what Fal.AI charges:\n\n1s video: $0.28\n\n5s video (default): $1.40\n\nHere are the execution times:\n\n5s video (default): 6 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.\nif you can't find it, you need to create a sheet with the following columns:\n- Idea\n- Ratio\n- Prompt Generated\n- Video Generated\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\u2019ll see the prompt used and the video URL.\n\n** Troubleshoot**\nIf the \u201cAudio\u201d 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 max@nervoai.com\n\n\nThat\u2019s it! You\u2019re ready to create Veo 3 videos straight from Google Sheets.\n"
      },
      "typeVersion": 1
    },
    {
      "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 Kling 2.1 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
    },
    {
      "id": "9dc75bc3-25a7-4c3c-bb65-8372acb2703b",
      "name": "Update sheet with video url and prompt used in Kling 2.1",
      "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 Kling 2.1 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": "1VGhoJU-qHzav53pTUSPtX6PNVPrRp9e38E34AmHoWvg",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VGhoJU-qHzav53pTUSPtX6PNVPrRp9e38E34AmHoWvg/edit?usp=drivesdk",
          "cachedResultName": "Instantly create Kling 2.1 AI Generated Videos 4x cheaper than veo3"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "5267ac1d-36ad-449a-9f5f-cae01a090b33",
      "name": "Generate prompt for Kling 2.1 model",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        180,
        -20
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-nano-2025-04-14",
          "cachedResultName": "GPT-4.1-NANO-2025-04-14"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "assistant",
              "content": "=You are a creative prompt engineer for Kling 2.1 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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "4a9e4bf8-ae9b-40c8-aeed-8a61fbc383a6",
  "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 Kling 2.1",
            "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 Kling 2.1 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
          }
        ]
      ]
    },
    "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
          }
        ]
      ]
    },
    "Generate prompt for Kling 2.1 model": {
      "main": [
        [
          {
            "node": "Set variables for Video generation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Turn Your Ideas into Videos—Right from Google Sheets!

Source: https://n8n.io/workflows/5034/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Note: Now includes an Apify alternative for Rapid API (Some users can't create new accounts on Rapid API, so I have added an alternative for you. But immediately you are able to get access to Rapid AP

Form Trigger, Google Sheets Trigger, OpenAI +2
AI & RAG

This system automates LinkedIn lead generation and enrichment in six clear stages: Lead Collection (via Apollo.io) Automatically pulls leads based on keywords, roles, or industries using Apollo’s API.

Form Trigger, OpenAI, Google Sheets Trigger +2
AI & RAG

This n8n workflow automates the process of retrieving products from Printify, generating optimized product titles and descriptions, and updating them back to the platform. It leverages OpenAI for cont

HTTP Request, Tool Calculator, Tool Wikipedia +3
AI & RAG

This workflow is designed for content creators, marketers, and automation enthusiasts who want to produce professional AI-generated videos and publish them automatically on social media — without edit

OpenAI, HTTP Request, Google Drive +3
AI & RAG

Consultants, agencies, freelancers, and professional service firms who need to create customized proposals and contracts quickly and efficiently.

Google Sheets Trigger, OpenAI, Google Docs +5