AutomationFlowsAI & RAG › Extract Meeting To-do Lists From Audio with Google Gemini and Send to Slack

Extract Meeting To-do Lists From Audio with Google Gemini and Send to Slack

Byhigashiyama @kazushi on n8n.io

This workflow automates the process of converting audio meeting recordings into a structured to-do list. It listens for new audio files in a Google Drive folder, transcribes them, extracts action items using AI, and sends a formatted list to a designated Slack channel.

Event trigger★★★★☆ complexityAI-powered11 nodesGoogle Drive TriggerGoogle DriveGoogle GeminiSlack
AI & RAG Trigger: Event Nodes: 11 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Google Drive → Google Drive 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
{
  "id": "SrM0PcHuYRxXnVGS",
  "meta": {
    "templateId": "4370",
    "templateCredsSetupCompleted": true
  },
  "name": "Generate meeting to-do lists from audio files in Google Drive and send to Slack",
  "tags": [],
  "nodes": [
    {
      "id": "ab3309d9-cb3e-4b13-bb43-a214722c50b4",
      "name": "Looking for uploading file",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        2016,
        368
      ],
      "parameters": {
        "event": "fileUpdated",
        "options": {
          "fileType": "all"
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1LfNfyCnJ-XVCevq32rSULZfH0Zi6KgH8",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1LfNfyCnJ-XVCevq32rSULZfH0Zi6KgH8",
          "cachedResultName": "n8n"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6c7bed41-fcb2-46de-b764-f0df6bf15d72",
      "name": "Download file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        2240,
        368
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "da7cec5f-301d-456b-8ca6-f6b676579e2d",
      "name": "Get date",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        3088,
        368
      ],
      "parameters": {
        "options": {},
        "outputFieldName": "Date"
      },
      "typeVersion": 2
    },
    {
      "id": "b51f7dc9-2973-4f03-b160-90dc3ac0c0d2",
      "name": "Format date",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        3312,
        368
      ],
      "parameters": {
        "date": "={{ $json.Date }}",
        "options": {},
        "operation": "formatDate"
      },
      "typeVersion": 2
    },
    {
      "id": "cf384106-5413-4a92-9bdb-cce26b2452d4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1936,
        240
      ],
      "parameters": {
        "color": 7,
        "width": 500,
        "height": 300,
        "content": "## Download the file \nThese two nodes are responsible for looking and downloading the uploaded file"
      },
      "typeVersion": 1
    },
    {
      "id": "895c7888-8bf1-42e9-9f9c-a610c6297433",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2480,
        240
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 300,
        "content": "## Generate Summary \nThese two nodes are responsible for looking and downloading the uploaded file"
      },
      "typeVersion": 1
    },
    {
      "id": "29967247-97f9-4f38-8cca-b5448b7c179d",
      "name": "Transcribe a recording1",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        2592,
        368
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-pro",
          "cachedResultName": "models/gemini-2.5-pro"
        },
        "options": {},
        "resource": "audio",
        "inputType": "binary"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "233b4057-9713-4412-a41b-188cb933ea0c",
      "name": "Analyze document",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        2816,
        368
      ],
      "parameters": {
        "text": "=What's in this document\ud83e\udde0 System Prompt: Action Item Extractor (JSON Output)\n\nYou are a highly specialized AI assistant focused on task extraction. Your sole responsibility is to analyze the provided meeting transcript and extract all actionable tasks (To-Do items).\n\nYour output MUST be a valid JSON array of objects. Each object in the array represents a single action item and must contain the following keys:\n- \"task_description\": A clear and concise description of the task.\n- \"assigned_to\": The name of the person responsible. If not mentioned, use null.\n- \"deadline\": The due date for the task. If not mentioned, use null. Try to format it as YYYY-MM-DD.\n- \"priority\": The priority of the task (\"High\", \"Medium\", \"Low\"). Infer this from the context. If it's unclear, default to \"Medium\".\n\nCRITICAL RULES:\n- Only output the JSON array. Do not include any explanatory text, introductory sentences, or markdown formatting like ```json.\n- If no action items are found in the transcript, output an empty array: \u5bfe\u8c61\u8b70\u4e8b\u9332\u306a\u3057.\n- Do not include summaries, discussion points, or any information that is not a specific, actionable task.?\n\n{{ $('Transcribe a recording1').item.json.text }}",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "document"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ef304bb1-7724-407d-b813-cf3dcb8fee54",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        3536,
        368
      ],
      "parameters": {
        "text": "={{ $('Analyze document').item.json.content.parts[0].text }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09LK8LDW79",
          "cachedResultName": "\u8b70\u4e8b\u9332\u30fctodo\u30ea\u30b9\u30c8"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "8db74eff-3909-4b07-acfc-f4ad2c165f2b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3072,
        240
      ],
      "parameters": {
        "color": 7,
        "width": 816,
        "height": 304,
        "content": "## Format and Send Message\nThese three nodes are responsible for timestamping the result and sending it to your Slack channel.\n- **Get & Format Date:** Gets the current date and time to record when the to-do list was created.\n- **Send a message:** Sends the final to-do list extracted by the AI to your designated Slack channel."
      },
      "typeVersion": 1
    },
    {
      "id": "9335bba9-88d5-472f-86b0-caf369db834e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        -160
      ],
      "parameters": {
        "color": 3,
        "width": 768,
        "height": 1120,
        "content": "Generate meeting to-do lists from audio files in Google Drive and send to Slack\nThis workflow automates the process of converting audio meeting recordings into a structured to-do list. It listens for new audio files in a Google Drive folder, transcribes them, extracts action items using AI, and sends a formatted list to a designated Slack channel.\n\nWho\u2019s it for\nThis template is perfect for project managers, teams, and anyone who wants to save time on post-meeting administrative tasks. If you record your meetings and use Google Drive for storage and Slack for team communication, this workflow will streamline your follow-up process and ensure no action item is missed.\n\nWhat it does\nThis workflow automates the entire process of turning spoken words from a meeting into actionable tasks for your team.\n\nTrigger on New Audio: The workflow starts automatically when you upload a new audio file (e.g., MP3, M4A, WAV) to a specific folder in your Google Drive.\n\nTranscribe Audio: It takes the audio file and uses Google Gemini to generate a full text transcript of the recording.\n\nExtract To-Do Items: The transcript is then passed to another Google Gemini node with a specialized prompt. This prompt instructs the AI to carefully analyze the text and extract all action items.\n\nFormat Output: The AI formats the extracted tasks into a clean JSON array. Each task includes a description, the assigned person, a deadline, and its priority.\n\nSend to Slack: Finally, the workflow sends the structured to-do list as a message to your specified Slack channel, making it easy for the whole team to see and act upon.\n\nHow to set up\nConfigure Credentials: Ensure you have configured your credentials for Google Drive, Google Gemini, and Slack in n8n.\n\nSet Google Drive Folder: In the \"Looking for uploading file\" node, select the Google Drive folder you want the workflow to monitor.\n\nSet Slack Channel: In the \"Send a message\" node, choose the correct Slack account and select the channel where you want the to-do list to be posted.\n\nActivate Workflow: Save your changes and activate the workflow using the toggle at the top right.\n\nTest It: Upload a meeting recording to the designated Google Drive folder to see the magic happen!\n\nHow to customize the workflow\nChange AI Model: You can easily swap the Google Gemini nodes for other AI models like OpenAI or Anthropic to handle transcription and analysis based on your preference.\n\nModify the AI Prompt: Adjust the prompt in the \"Analyze document\" node to change the output format. For example, you could ask for a meeting summary in addition to the to-do list.\n\nChange Notification Service: Replace the Slack node with another notification service like Discord, Microsoft Teams, or an email node.\n\nArchive Results: Add a node (e.g., Google Sheets, Notion, Airtable) after the \"Analyze document\" node to save a history of all meeting transcripts and their corresponding action items."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "13655ad4-7ca3-487d-919a-305ae30f5589",
  "connections": {
    "Get date": {
      "main": [
        [
          {
            "node": "Format date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format date": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download file": {
      "main": [
        [
          {
            "node": "Transcribe a recording1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message": {
      "main": [
        []
      ]
    },
    "Analyze document": {
      "main": [
        [
          {
            "node": "Get date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe a recording1": {
      "main": [
        [
          {
            "node": "Analyze document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Looking for uploading file": {
      "main": [
        [
          {
            "node": "Download file",
            "type": "main",
            "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

This workflow automates the process of converting audio meeting recordings into a structured to-do list. It listens for new audio files in a Google Drive folder, transcribes them, extracts action items using AI, and sends a formatted list to a designated Slack channel.

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

Extract title deed data and score risk factors with AI. Uses googleDriveTrigger, googleDrive, n8n-nodes-pdfvector, googleSheets. Event-driven trigger; 10 nodes.

Google Drive Trigger, Google Drive, N8N Nodes Pdfvector +2
AI & RAG

W11 - Meeting Notes & Action Item Extractor. Uses googleDriveTrigger, googleDrive, n8n-nodes-pdfvector, googleSheets. Event-driven trigger; 9 nodes.

Google Drive Trigger, Google Drive, N8N Nodes Pdfvector +2
AI & RAG

Invoice Data Extraction Automation. Uses googleDriveTrigger, googleDrive, n8n-nodes-pdfvector, googleSheets. Event-driven trigger; 8 nodes.

Google Drive Trigger, Google Drive, N8N Nodes Pdfvector +2
AI & RAG

Use n8n to extract medical test data from diagnostic reports uploaded to Google Drive, automatically detect abnormal values, and generate personalized health advice. Upload a medical report (PDF or im

Google Drive, Google Drive Trigger, Mistral Ai +2
AI & RAG

Analyze Amazon product reviews with Gemini and save to Google Sheets

Slack, Google Sheets, Google Gemini +1