Veni AI
Back to templates
WORKFLOW TEMPLATE

Google Meet Automation | Operations n8n Workflow Template with Webhook, Gmail

Ready-to-import n8n workflow JSON for Google Meet Automation. 14 nodes. Integrations: Webhook, Gmail. Copy and import into n8n.

14 nodesGoogle_Meet_Automation-workflow.json
{
"id": "5N46vB5yT6jTsXHH",
"meta": {
"instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c",
"templateCredsSetupCompleted": true
},
"name": "Google Meet Automation",
"tags": [],
"nodes": [
{
"id": "webhook-trigger",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"position": [
112,
320
],
"webhookId": "b339e631-7267-4f88-bea4-16c0f35f7645",
"parameters": {
"path": "google-meet-automation",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "error-response",
"name": "Error Response",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
560,
416
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={\n \"status\": \"error\",\n \"message\": \"Missing required fields: meetingNotes and meetingTitle\",\n \"timestamp\": \"{{ $now.toISO() }}\"\n}"
},
"typeVersion": 1.4
},
{
"id": "extract-data",
"name": "Extract Meeting Data",
"type": "n8n-nodes-base.set",
"position": [
560,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "meeting-notes",
"name": "meetingNotes",
"type": "string",
"value": "={{ $json.body.meetingNotes }}"
},
{
"id": "meeting-title",
"name": "meetingTitle",
"type": "string",
"value": "={{ $json.body.meetingTitle }}"
},
{
"id": "meeting-date",
"name": "meetingDate",
"type": "string",
"value": "={{ $json.body.meetingDate || $now.toISO() }}"
},
{
"id": "attendees",
"name": "attendees",
"type": "array",
"value": "={{ $json.body.attendees || [] }}"
},
{
"id": "meeting-duration",
"name": "duration",
"type": "string",
"value": "={{ $json.body.duration || '60 minutes' }}"
}
],
"assignments[0]": {
"value": "={{ $json.meetingNotes }}"
},
"assignments[1]": {
"value": "={{ $json.meetingTitle }}"
},
"assignments[2]": {
"value": "={{ $json.meetingDate || $now.toISO() }}"
},
"assignments[3]": {
"value": "={{ $json.attendees || [] }}"
},
"assignments[4]": {
"value": "={{ $json.duration || '60 minutes' }}"
}
}
},
"typeVersion": 3.4
},
{
"id": "gemini-model",
"name": "Google Gemini AI",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
816,
448
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "7ZkDDnjsiPRXf6eh",
"name": "project gcp: n8n-khmuhtadin"
}
},
"typeVersion": 1
},
{
"id": "ai-processor",
"name": "AI Meeting Processor",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
784,
224
],
"parameters": {
"text": "=You are an AI assistant that analyzes Google Meet notes to extract actionable insights.\n\nMEETING DETAILS:\nTitle: {{ $json.meetingTitle }}\nDate: {{ $json.meetingDate }}\nDuration: {{ $json.duration }}\nAttendees: {{ $json.attendees.join(', ') }}\n\nMEETING NOTES:\n{{ $json.meetingNotes }}\n\n=== INSTRUCTIONS ===\nPlease analyze the meeting notes and extract the following information in JSON format:\n\n1. ACTION_ITEMS: Array of tasks with assignee, description, due_date, and priority\n2. KEY_DECISIONS: Array of important decisions made\n3. SUMMARY: Brief meeting summary (2-3 sentences)\n4. FOLLOW_UP_EMAILS: Array of follow-up emails to send with recipient, subject, and content\n5. NEXT_MEETING: Information about next meeting if mentioned\n6. IMPORTANT_DATES: Any dates or deadlines mentioned\n\nReturn ONLY valid JSON with this structure:\n{\n \"action_items\": [\n {\n \"assignee\": \"person@email.com\",\n \"description\": \"Task description\",\n \"due_date\": \"2025-01-15\",\n \"priority\": \"high|medium|low\"\n }\n ],\n \"key_decisions\": [\"Decision 1\", \"Decision 2\"],\n \"summary\": \"Meeting summary here\",\n \"follow_up_emails\": [\n {\n \"recipient\": \"person@email.com\",\n \"subject\": \"Email subject\",\n \"content\": \"Email content\"\n }\n ],\n \"next_meeting\": {\n \"date\": \"2025-01-20\",\n \"time\": \"10:00 AM\",\n \"topic\": \"Follow-up discussion\"\n },\n \"important_dates\": [\n {\n \"date\": \"2025-01-15\",\n \"description\": \"Project deadline\"\n }\n ]\n}",
"batching": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "split-action-items",
"name": "Split Action Items",
"type": "n8n-nodes-base.splitOut",
"position": [
1184,
32
],
"parameters": {
"options": {},
"fieldToSplitOut": "action_items"
},
"typeVersion": 1
},
{
"id": "create-tasks",
"name": "Create Google Tasks",
"type": "n8n-nodes-base.googleTasks",
"position": [
1408,
32
],
"parameters": {
"task": "My Tasks",
"title": "={{ $json.description }}",
"additionalFields": {
"notes": "=Meeting: {{ $('Extract Meeting Data').item.json.meetingTitle }}\nAssignee: {{ $json.assignee }}\nPriority: {{ $json.priority }}\nDue Date: {{ $json.due_date }}\n\nCreated from Google Meet automation on {{ $now.toFormat('yyyy-MM-dd HH:mm') }}"
}
},
"credentials": {
"googleTasksOAuth2Api": {
"id": "Af2b9A5rnrReAwkO",
"name": "GCP: n8n-khmuhtadin"
}
},
"typeVersion": 1
},
{
"id": "split-emails",
"name": "Split Follow-up Emails",
"type": "n8n-nodes-base.splitOut",
"position": [
1184,
224
],
"parameters": {
"options": {},
"fieldToSplitOut": "follow_up_emails"
},
"typeVersion": 1
},
{
"id": "send-emails",
"name": "Send Follow-up Emails",
"type": "n8n-nodes-base.gmail",
"position": [
1408,
224
],
"webhookId": "f752a312-37ec-4456-8015-1b5e2a5a5138",
"parameters": {
"sendTo": "={{ $json.recipient }}",
"message": "=
font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;\">\n

{{ $json.subject }}

\n \n
20px; border-radius: 8px; margin: 20px 0;\">\n

0; color: #374151;\">Meeting Summary

\n

Meeting: {{ $('Extract Meeting Data').item.json.meetingTitle }}

\n

Date: {{ $('Extract Meeting Data').item.json.meetingDate }}

\n

Duration: {{ $('Extract Meeting Data').item.json.duration }}

\n
\n \n
20px 0;\">\n {{ $json.content }}\n
\n \n
1px solid #e5e7eb; margin: 30px 0;\">\n \n

14px;\">\n This email was automatically generated from your Google Meet notes.
\n Generated on {{ $now.toFormat('MMMM dd, yyyy \\at HH:mm') }}\n

\n
",
"options": {},
"subject": "={{ $json.subject }}"
},
"credentials": {
"gmailOAuth2": {
"id": "8p11S7abjY8KddB9",
"name": "contactmuhtadin"
}
},
"typeVersion": 2.1
},
{
"id": "create-summary-doc",
"name": "Create Meeting Summary Document",
"type": "n8n-nodes-base.googleDocs",
"position": [
1408,
416
],
"parameters": {
"title": "=('Meeting Summary - ' + $('Extract Meeting Data').item.json.meetingTitle + ' - ' + $now.toFormat('yyyy-MM-dd'))",
"folderId": "default"
},
"credentials": {
"googleDocsOAuth2Api": {
"id": "rlvvfYKhxvwjpMC2",
"name": "GCP: n8n-khmuhtadin"
}
},
"typeVersion": 2
},
{
"id": "final-response",
"name": "Success Response",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1856,
128
],
"parameters": {
"options": {},
"respondWith": "allIncomingItems"
},
"typeVersion": 1.4
},
{
"id": "cedd4268-e3b3-4b1c-bfe3-02c7f099cb83",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
336,
320
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0df05311-3c5d-4f7c-915e-f8e66171d6cc",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.body.meetingTitle }}",
"rightValue": ""
},
{
"id": "d6ccea8b-afd0-4955-8b37-2d44e3ea3648",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.body.meetingNotes }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ede05363-8a89-4706-a74b-63e8d39886d4",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
944,
448
],
"parameters": {
"jsonSchemaExample": "{\n \"action_items\": [\n {\n \"assignee\": \"person@email.com\",\n \"description\": \"Task description\",\n \"due_date\": \"2025-01-15\",\n \"priority\": \"high|medium|low\"\n }\n ],\n \"key_decisions\": [\"Decision 1\", \"Decision 2\"],\n \"summary\": \"Meeting summary here\",\n \"follow_up_emails\": [\n {\n \"recipient\": \"person@email.com\",\n \"subject\": \"Email subject\",\n \"content\": \"Email content\"\n }\n ],\n \"next_meeting\": {\n \"date\": \"2025-01-20\",\n \"time\": \"10:00 AM\",\n \"topic\": \"Follow-up discussion\"\n },\n \"important_dates\": [\n {\n \"date\": \"2025-01-15\",\n \"description\": \"Project deadline\"\n }\n ]\n}"
},
"typeVersion": 1.3
},
{
"id": "11bcb195-3a58-4cd1-8a0d-e69cc954847a",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
1632,
112
],
"parameters": {
"numberInputs": 3
},
"typeVersion": 3.2
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "adcb521c-7b87-4c7d-b443-94ffb124ee23",
"connections": {
"If": {
"main": [
[
{
"node": "Extract Meeting Data",
"type": "main",
"index": 0
}
],
[
{
"node": "Error Response",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Success Response",
"type": "main",
"index": 0
}
]
]
},
"Webhook Trigger": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini AI": {
"ai_languageModel": [
[
{
"node": "AI Meeting Processor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Split Action Items": {
"main": [
[
{
"node": "Create Google Tasks",
"type": "main",
"index": 0
}
]
]
},
"Create Google Tasks": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"AI Meeting Processor": {
"main": [
[
{
"node": "Split Action Items",
"type": "main",
"index": 0
},
{
"node": "Split Follow-up Emails",
"type": "main",
"index": 0
},
{
"node": "Create Meeting Summary Document",
"type": "main",
"index": 0
}
]
]
},
"Extract Meeting Data": {
"main": [
[
{
"node": "AI Meeting Processor",
"type": "main",
"index": 0
}
]
]
},
"Send Follow-up Emails": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Split Follow-up Emails": {
"main": [
[
{
"node": "Send Follow-up Emails",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Meeting Processor",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Create Meeting Summary Document": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 2
}
]
]
}
}
}

In n8n Editor: paste with Ctrl+VWorkflow will be created