AutomationFlowsAI & RAG › Video Transcript Search and Q&a with Vlm Run, Gpt-4 & Google Workspace

Video Transcript Search and Q&a with Vlm Run, Gpt-4 & Google Workspace

ByAtik @atik on n8n.io

Automate video transcription and Q&A with async VLM processing that scales from short clips to long recordings. Monitors Google Drive for new files in a specific folder and grabs the file ID on create Automatically downloads the binary to hand off for processing Sends the video…

Event trigger★★★★☆ complexityAI-powered14 nodesGoogle Drive TriggerGoogle DriveChat TriggerAgentOpenAI ChatGoogle SheetsGoogle Sheets Tool@Vlm Run/N8N Nodes Vlmrun
AI & RAG Trigger: Event Nodes: 14 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Chat Trigger 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "a85ebcf0-5f2a-4ee7-8c68-b00197810f4d",
      "name": "Google Drive Trigger",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1E8rvLEWKguorMT36yCD1jY78G0u8g6g7",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1E8rvLEWKguorMT36yCD1jY78G0u8g6g7",
          "cachedResultName": "test_data"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a87e6ce7-081c-4482-9372-33dad10d5b3b",
      "name": "Download file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        208,
        0
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "binaryPropertyName": "data"
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "56911f23-a3e2-4e86-94ab-8e373d6676be",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        656,
        304
      ],
      "parameters": {
        "mode": "webhook",
        "public": true,
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "e15b3d90-09be-4abd-90f9-2bdf68d93481",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        944,
        304
      ],
      "parameters": {
        "options": {
          "systemMessage": "You are a video\u2011QA assistant. Use the Getrows tool to fetch the relevant transcript segments for the user\u2019s question, then answer based only on those segments, check the sheets before replying\n"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "390f8b2f-2fa6-40f4-8e99-31bb8ab339d4",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        928,
        512
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "gpt-4.1"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "cff805f1-caaa-46c3-9f11-21fa534baa9b",
      "name": "Append row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1040,
        0
      ],
      "parameters": {
        "columns": {
          "value": {
            "Data": "={{ $json.body[0].body.response }}",
            "Video Namae": "={{ $json.body[0].body.id }}"
          },
          "schema": [
            {
              "id": "Video Namae",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Video Namae",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Data",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4/edit?usp=drivesdk",
          "cachedResultName": "video storing"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "a4a451fd-d3c3-4f5b-bd26-b318e488b802",
      "name": "Get row(s) in sheet in Google Sheets",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        1104,
        496
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4/edit?usp=drivesdk",
          "cachedResultName": "video storing"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2a17a22e-a9d3-4068-8f41-e8861e5e4a8e",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        -384
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 1072,
        "content": "## \ud83c\udfa5 Video Transcription + Q&A Pipeline\n\n**Overview:**\nNew files in a Google Drive folder trigger an auto-download. Videos are sent to VLM Run for transcription with an async callback. The webhook receives finished transcripts and stores them in a Google Sheet. A chat entry point lets users ask questions. The AI Agent fetches relevant rows from the sheet and answers strictly from those segments.\n\n**Key Features:**\n* \ud83d\udcc1 Watches a specific Drive folder and reacts on file created\n* \u2b07\ufe0f Secure file download to pass binary to processing\n* \ud83e\udde0 VLM Run async transcription with callback URL\n* \ud83e\uddfe Webhook captures job results and appends to Google Sheets\n* \ud83d\udcac Chat trigger for user questions about any processed video\n* \ud83d\udd0d Agent reads transcript rows via Sheets tool then answers from those rows only\n\n\n**Perfect for:**\n* Team knowledge capture from recorded calls\n* Course or webinar indexing with searchable Q&A\n* Creator workflows to turn videos into notes and FAQs\n* Support teams generating quick answers from demos\n\n\n**Requirements:**\n* Google Drive OAuth2 for trigger and download\n* VLM Run API with domain video.transcription\n* Public webhook URL reachable by VLM Run callback\n* Google Sheets OAuth2 for append and read\n* OpenAI Chat model connected to the Agent\n* A target Google Sheet with columns like Video Name and Data\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "aed461ed-fca9-4058-90cf-a76ca12909ae",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        -384
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 560,
        "content": "## \ud83d\udcc1 Input Processing\n\n**Monitors & downloads video files from Google Drive.**\n\n**Process:**\n1. Google Drive Trigger watches the chosen folder every minute\n2. On new file, pass file id to Download file\n3. Download as binary under property data\n\n\n**Supported Formats:**\n* Common video formats handed to VLM Run\n* Large files handled via async job with callback\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c08cc4c2-4a38-403b-aa15-aac669f5a765",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        -384
      ],
      "parameters": {
        "width": 432,
        "height": 560,
        "content": "## \ud83e\udd16 VLM Run Execute Agent\n\n**Uses VLM Run to transcribe video content asynchronously.**\n\n\n**Extracts:**\n* Full transcript or structured segments as returned by VLM Run\n\n\n**Features:**\n* Async processing with status managed by callback\n* Resilient to long videos and variable quality audio\n* Callback hits /transcript-video webhook on completion"
      },
      "typeVersion": 1
    },
    {
      "id": "26167bc6-779a-4ad3-91e0-ed511a4b1a11",
      "name": "VLM Run for Video Processing",
      "type": "@vlm-run/n8n-nodes-vlmrun.vlmRun",
      "position": [
        448,
        0
      ],
      "parameters": {
        "domain": "video.transcription",
        "operation": "video",
        "callbackUrl": "https://playground.attensys.ai/webhook/transcript-video",
        "processAsynchronously": true
      },
      "credentials": {
        "vlmRunApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bc679495-9f40-4453-9552-6d4cb54bfa5b",
      "name": "Receives JSON Data",
      "type": "n8n-nodes-base.webhook",
      "position": [
        688,
        0
      ],
      "parameters": {
        "path": "transcript-video",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "834078ed-48c5-42b2-8d40-24e60b8c0ce9",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        -384
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 560,
        "content": "## \ud83d\udcca Data Storage\n\n**Stores transcript output in Google Sheets for retrieval and Q&A.**\n\n\n**Features:**\n* Appends a new row per completed job\n* Columns include Data for transcript and Video Name for id\n* Sheet is the single source for the Q&A agent\n"
      },
      "typeVersion": 1
    },
    {
      "id": "18281c54-6103-4060-a3f4-17d1afa7ded0",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 1360,
        "height": 480,
        "content": "\n## \ud83d\udcac Chat Q&A Agent\n\n**Turns the sheet into a knowledge base for natural questions.**\n\n**Flow:**\n* Chat trigger receives a user question\n* Agent uses Get rows in Google Sheets to pull relevant segments\n* OpenAI Chat Model composes an answer only from fetched rows\n* System message enforces citation discipline to the sheet content\n\n\n**Notes and Good Practices:**\n* Use clear video naming so Video Name maps to the right transcript\n* Consider adding timestamps in the Data field for better retrieval\n* Log webhook deliveries and store job ids to avoid duplicates\n* Validate that body[0].body.response exists before appending\n* Add simple retries for append and for transient webhook errors\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Download file": {
      "main": [
        [
          {
            "node": "VLM Run for Video Processing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Receives JSON Data": {
      "main": [
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger": {
      "main": [
        [
          {
            "node": "Download file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet in Google Sheets": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "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

Automate video transcription and Q&A with async VLM processing that scales from short clips to long recordings. Monitors Google Drive for new files in a specific folder and grabs the file ID on create Automatically downloads the binary to hand off for processing Sends the video…

Source: https://n8n.io/workflows/9325/ — 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

This template is a fully automated AI invoice processing workflow for n8n. It watches a Google Drive folder for new invoice PDFs, extracts all key information using an AI Agent, assigns the correct bo

Google Sheets, Google Sheets Tool, Google Drive +5
AI & RAG

Automate multi-document handling with AI-powered extraction that adapts to any format and organizes it instantly. Monitors Google Drive for new uploads (receipts, resumes, claims, physician orders, bl

Google Drive Trigger, Google Drive, OpenAI Chat +5
AI & RAG

This comprehensive workflow automates the complete financial document processing pipeline using AI. Upload invoices via chat, drop expense receipts into a folder, or add bank statements - the system a

Chat Trigger, HTTP Request, Google Sheets +8
AI & RAG

This comprehensive n8n workflow automates the entire Meta (Facebook/Instagram) advertising process, from asset analysis to ad creation. It combines AI-powered content analysis with automated ad deploy

Facebook Graph Api, HTTP Request, Google Drive +5
AI & RAG

This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.

OpenAI Chat, Memory Buffer Window, Output Parser Structured +11