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 →
{
"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.
googleDriveOAuth2ApigoogleSheetsOAuth2ApiopenAiApivlmRunApi
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
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
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
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
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
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.