{
  "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
          }
        ]
      ]
    }
  }
}