AutomationFlows β€Ί AI & RAG β€Ί Automate Google Meet Notes with Gpt-4.1-mini, Notion, Slack & Gmail Distribution

Automate Google Meet Notes with Gpt-4.1-mini, Notion, Slack & Gmail Distribution

ByAtharva @atharva-dragonβœ“ on n8n.io

🧾 An intelligent automation system that turns Google Meet recordings into structured meeting notes β€” integrating Fireflies.ai, OpenAI GPT-4.1-mini, Notion, Slack, Google Drive, and Gmail via n8n.

Webhook triggerβ˜…β˜…β˜…β˜…β˜† complexityAI-powered22 nodesGoogle DriveOpenAI ChatOutput Parser StructuredAgentNotionOpenAIOutput Parser AutofixingGoogle Calendar
AI & RAG Trigger: Webhook Nodes: 22 Complexity: β˜…β˜…β˜…β˜…β˜† AI nodes: yes Added:

This workflow corresponds to n8n.io template #9849 β€” we link there as the canonical source.

This workflow follows the Agent β†’ Gmail 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": "fbe887ed-d018-457b-ab11-5ca446e517a4",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        96,
        -128
      ],
      "parameters": {
        "path": "b9bbfae5-c81e-4897-8abe-5b4dd7c629df",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "fdad3e23-afed-478e-95c8-5cb4c73e57e6",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        768,
        -128
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "raw_text"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bf500941-c25c-416a-af6a-4e319a2e0df8",
      "name": "Create file from text",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        96,
        -352
      ],
      "parameters": {
        "name": "={{$now}}.txt",
        "content": "={{ $('Aggregate').item.json.raw_text }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive",
          "cachedResultName": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "11dIJvWSuqnNJ-spUwYsgBJZXWVD3M_9V",
          "cachedResultUrl": "https://drive.google.com/drive/folders/11dIJvWSuqnNJ-spUwYsgBJZXWVD3M_9V",
          "cachedResultName": "Transcripts"
        },
        "operation": "createFromText"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "c82fac71-7390-43b0-8b6b-e143cbcb5012",
      "name": "Share file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        320,
        -352
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "share",
        "permissionsUi": {
          "permissionsValues": {
            "role": "reader",
            "type": "anyone"
          }
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "18a7b91e-5094-4db9-b9a4-a4829e58c956",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        992,
        96
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "09b4a23b-876a-4554-9e44-874ca56c55c2",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1312,
        288
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\"title\": \"...\",\n\"summary\": \"...\",\n\"decisions\": \"- Decision 1\\n- Decision 2\",\n\"action_items\": \"- Action 1\\n- Action 2\\n- Action 3\",\n\"risks\": \"- Risk 1\\n- Risk 2\",\n\"questions\": \"- Question 1\\n- Question 2\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "2c2a233b-5369-4e7a-bc83-1291c2dca525",
      "name": "Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1024,
        -128
      ],
      "parameters": {
        "text": "=You are given a transcript of a meeting. Extract and structure the output into a single JSON object.  \n\nRules:  \n- Output only one JSON object.  \n- Do not use arrays.  \n- For multiple items (decisions, action_items, risks, questions), join them into a single string separated by line breaks (\"\\n\").  \n- Each item must start with a dash and a space (\"- \") to make it a bullet list.  \n- Required fields: title, summary, decisions, action_items, risks, questions.  \n- title and summary = plain strings.  \n- decisions, action_items, risks, questions = single strings with line breaks between items, each prefixed by \"- \".  \n- Do not include any explanatory text outside of the JSON.  \n\nFormat:\n{\n\"title\": \"...\",\n\"summary\": \"...\",\n\"decisions\": \"- Decision 1\\n- Decision 2\",\n\"action_items\": \"- Action 1\\n- Action 2\\n- Action 3\",\n\"risks\": \"- Risk 1\\n- Risk 2\",\n\"questions\": \"- Question 1\\n- Question 2\"\n}\n\nInput: {{ $('Aggregate').item.json.raw_text }}\n",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "4943665f-6531-4bc5-91c8-e06a8d4d8e07",
      "name": "Drive Link",
      "type": "n8n-nodes-base.set",
      "position": [
        544,
        -352
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "b3e8727e-a919-4274-90fe-3f1569a396fa",
              "name": "drive_link",
              "type": "string",
              "value": "=https://drive.google.com/file/d/{{ $('Create file from text').item.json.id }}/view\n"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "1fe34a67-f2f8-4dbc-80c0-6776c57e5731",
      "name": "Notion Page",
      "type": "n8n-nodes-base.notion",
      "position": [
        768,
        -352
      ],
      "parameters": {
        "title": "={{ $('Agent').item.json.output.title }}",
        "pageId": {
          "__rl": true,
          "mode": "url",
          "value": "https://www.notion.so/Meeting-Notes-25d0bc030f3680d4887de58ac734569b"
        },
        "blockUi": {
          "blockValues": [
            {
              "type": "heading_2",
              "textContent": "\ud83d\udccbSummary "
            },
            {
              "textContent": "={{ $('Agent').item.json.output.summary }}"
            },
            {
              "type": "heading_2",
              "textContent": "\u2705Decisions "
            },
            {
              "textContent": "={{ $('Agent').item.json.output.decisions }}"
            },
            {
              "type": "heading_2",
              "textContent": "\ud83d\udcccAction Items"
            },
            {
              "textContent": "={{ $('Agent').item.json.output.action_items }}"
            },
            {
              "type": "heading_2",
              "textContent": "\u26a0\ufe0fRisks"
            },
            {
              "textContent": "={{ $('Agent').item.json.output.risks }}"
            },
            {
              "type": "heading_2",
              "textContent": "\u2753Questions"
            },
            {
              "textContent": "={{ $('Agent').item.json.output.questions }}"
            },
            {
              "textContent": "=Transcript Link:  {{ $json.drive_link }}"
            }
          ]
        },
        "options": {}
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "31b0557c-521c-47f1-93b8-55ee2bee144f",
      "name": "Generate Slack Message",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1056,
        -352
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are given a structured meeting JSON (title, summary, decisions, action_items, risks, questions).\n\nTask:  \nWrite a short, well-formatted Slack message for the #meeting-notes channel.\n\nRules: \n-Follow the format correctly\n-Use relvent emojis for Key Decisions points \n-do not add anything in notion and drive link it should be consistent no extra brackets \nExample 1:\n\ud83d\udcdd Sprint Review and Release Planning Meeting\nThe team reviewed last sprint's achievements including the client dashboard integration and QA completion on staging.\n\n\u2728 Key Decisions:\n\u2022 \ud83d\ude80 Release dashboard tomorrow at 2:00pm\n\u2022 \ud83d\udcca Analytics module release to follow in next sprint\n\n\ud83d\udd17 Notion: https://www.notion.so/Sprint-Review-and-Release-Planning-Meeting-25d0bc030f368127bfd2fa0bc5fa29a6\n\n\ud83d\udcc2 Drive: https://drive.google.com/file/d/1ypTXN47oqRFHKXK4G6lTjpRfFIQp3o3f/view\n\nActual Input\nTitle:{{ $('Agent').item.json.output.title }}\nSummary: {{ $('Agent').item.json.output.summary }}\nNotion Link:{{ $json.url }}\nDrive Link:{{ $('Drive Link').item.json.drive_link }}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "efdb1905-bbad-438f-a470-359adcba63b2",
      "name": "Auto-fixing Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
      "position": [
        1120,
        96
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "d230a94a-8b22-45b6-a51b-63f4f1441d87",
      "name": "Get many events",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        320,
        -576
      ],
      "parameters": {
        "limit": 1,
        "options": {},
        "timeMax": "={{ $now }}",
        "timeMin": "={{ $now.minus(20, 'minute') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "operation": "getAll"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "5f599b54-2ad5-4c1e-9009-dc563293ccaf",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        544,
        -576
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "attendees"
      },
      "typeVersion": 1
    },
    {
      "id": "65109e8c-6e90-411e-9e98-56072ebf4ee1",
      "name": "Send a message #meeting",
      "type": "n8n-nodes-base.slack",
      "position": [
        96,
        -576
      ],
      "parameters": {
        "text": "={{ $json.message.content }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09D8N1SFQQ",
          "cachedResultName": "meeting"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "899dee6e-e233-4002-9fc7-b791c683aec8",
      "name": "DMs to Attendees",
      "type": "n8n-nodes-base.slack",
      "onError": "continueRegularOutput",
      "position": [
        1216,
        -576
      ],
      "parameters": {
        "text": "={{ $('Generate Slack Message').item.json.message.content }}",
        "user": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.user.id }}"
        },
        "select": "user",
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "7b82e37f-600b-45ae-a8a3-375a29aaeae3",
      "name": "Email to Attendees",
      "type": "n8n-nodes-base.gmail",
      "position": [
        768,
        -576
      ],
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "={{ $('Generate Slack Message').item.json.message.content }}",
        "options": {},
        "subject": "=Meeting Recap:  {{ $('Agent').item.json.output.title }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "0aed74dd-741d-4305-ab5e-c31e9eacbb04",
      "name": "Get Transcript",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        320,
        -128
      ],
      "parameters": {
        "url": "https://api.fireflies.ai/graphql",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"query\": \"query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { id title duration sentences { speaker_name text raw_text start_time end_time } speakers { id name } meeting_attendees { name displayName email } } }\",\n  \"variables\": {\n    \"transcriptId\": \"{{ $json.body.meetingId }}\"\n  }\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "97685c75-70d6-464c-903d-f7524cccbb3b",
      "name": "Get Slack Username",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        992,
        -576
      ],
      "parameters": {
        "url": "=https://slack.com/api/users.lookupByEmail?email={{ $('Split Out').item.json.email }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d56f4326-5576-4ef9-bc2f-635d5034d20d",
      "name": "Split Out2",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        544,
        -128
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "data.transcript.sentences"
      },
      "typeVersion": 1
    },
    {
      "id": "04cc731a-d05d-40ae-9b00-253b52a4c6a6",
      "name": "OpenAI Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1136,
        304
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "53fcbd21-51da-4db3-8589-fa505df6726a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -624
      ],
      "parameters": {
        "width": 1600,
        "height": 1056,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "63ff360f-c2b4-4a69-ae95-67f1b5d537ff",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        80
      ],
      "parameters": {
        "color": 3,
        "width": 928,
        "height": 448,
        "content": "# \u26a1 Google Meet Notes Generator & Distributor\u2014Setup\n## \ud83d\udee0 Tools & Credentials\n### \ud83e\udd16 Fireflies.ai API\nFetch Google Meet transcripts via webhook.\n### \ud83e\udde0 OpenAI API\nSummarize transcripts into: **title**, **summary**, **decisions**, **action_items**, **risks**, **questions**\n### \ud83d\udcd3 Notion API\nCreate structured Notion pages with meeting data.\n### \ud83d\udcac Slack OAuth / Bot Token\nPost summaries in `#meeting` and DM attendees.\n### \ud83d\uddc2 Google Drive OAuth2\nStore transcripts as text files and generate shareable links.\n### \u2709\ufe0f Gmail OAuth2\nSend email recaps to all attendees.\n\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Agent": {
      "main": [
        [
          {
            "node": "Create file from text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Get Transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Email to Attendees",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Drive Link": {
      "main": [
        [
          {
            "node": "Notion Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Share file": {
      "main": [
        [
          {
            "node": "Drive Link",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out2": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notion Page": {
      "main": [
        [
          {
            "node": "Generate Slack Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Transcript": {
      "main": [
        [
          {
            "node": "Split Out2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get many events": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Email to Attendees": {
      "main": [
        [
          {
            "node": "Get Slack Username",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Slack Username": {
      "main": [
        [
          {
            "node": "DMs to Attendees",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Auto-fixing Output Parser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Create file from text": {
      "main": [
        [
          {
            "node": "Share file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Slack Message": {
      "main": [
        [
          {
            "node": "Send a message #meeting",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message #meeting": {
      "main": [
        [
          {
            "node": "Get many events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Auto-fixing Output Parser",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Auto-fixing Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Agent",
            "type": "ai_outputParser",
            "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

🧾 An intelligent automation system that turns Google Meet recordings into structured meeting notes β€” integrating Fireflies.ai, OpenAI GPT-4.1-mini, Notion, Slack, Google Drive, and Gmail via n8n.

Source: https://n8n.io/workflows/9849/ β€” 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 n8n workflow orchestrates a powerful suite of AI Agents and automations to manage and optimize various aspects of an e-commerce operation, particularly for platforms like Shopify. It leverages La

Google Sheets, HTTP Request, Slack +10
AI & RAG

This workflow automatically processes new free-trial / lead sign-ups in real time: Catches a webhook from any source (Webflow form, Intercom, custom agent, etc.) Filters out personal / disposable / .e

Output Parser Structured, Agent, HTTP Request +7
AI & RAG

Public-facing professionals (developer advocates, founders, marketers, content creators) who get bombarded with LinkedIn messages that aren't actually for them - support requests when you're in market

Slack, HTTP Request, Agent +4
AI & RAG

🧾 Short Description

Agent, OpenAI Chat, Output Parser Structured +4
AI & RAG

This workflow turns raw product inputs into a complete, launch-ready AI-generated social media campaign package. It accepts product details via webhook, sanitizes messy fields, generates a strategic c

Agent, Output Parser Structured, OpenAI Chat +4