Meeting notes → actions AI agent

Paste your meeting notes; the agent creates tasks with owners, drafts the follow-up email and posts a summary.

AI agentMedium Saves ~8 hours/month AI AgentsBy Flowngn team

Works with n8n · Make · Zapier

How it works

Trigger: Chat — you paste meeting notes or a transcript
  1. You paste the notes or transcript.
  2. The agent summarises decisions and open questions.
  3. It creates one Notion task per action item, with owner and due date.
  4. It drafts the follow-up email and posts the summary to Slack.

What it can do

Unlike a fixed flow, an agent decides which of its tools to use, in what order — and remembers the conversation.

  • Writes a short summary of decisions and open questions
  • Creates a Notion task for every action item, with owner and due date
  • Drafts a follow-up email to attendees (never sends it)
  • Posts the summary to your team's Slack channel

System prompt

The instructions that shape the agent. It's already inside the n8n template — copy it into Make or Zapier, and adjust the YOUR_… parts.

System prompt
You turn meeting notes or transcripts into action. Today is {{ $now.toFormat('d LLLL yyyy') }}.

When the user pastes notes:
1. Write a short summary: decisions made and open questions.
2. Find every action item with its owner and due date. Use "Create task" once per action item. If a due date isn't stated, leave it empty — don't guess.
3. If the user gives attendees' emails, use "Draft follow-up email" with the summary and action items.
4. Use "Post summary" to share the summary and action items with the team.

Rules:
- Only include what is in the notes. Never invent decisions, owners or dates.
- If something is unclear, list it under "Open questions".
- Finish by telling the user which tasks you created.

Safety rules

Built into the prompt and the tools:

  • Only uses what's in the notes — never invents owners or dates
  • Leaves unclear items as open questions
  • Email stays a draft until you send it

Uses your own AI key (Claude, OpenAI or another model). Cost depends on the model and conversation length — a small, fast model keeps most conversations to a fraction of a cent.

Diagram

Paste notesChat TriggerMeeting agentAI AgentClaude modelAnthropic Chat Mo…◷MemorySimple MemoryNCreate taskNotion ToolGDraft follow-u…Gmail ToolSPost summarySlack Tool
Trigger AI Agent tool

Build it

Pick your tool — same automation, step by step.

Copy and paste straight into an n8n canvas (Ctrl+V), or download and use Import from File. Then connect your own credentials and replace every YOUR_… placeholder. AI steps use a Claude model node — swap it for OpenAI, Gemini or Ollama if you prefer.

Workflow JSON
Show code (239 lines)
{
  "name": "Meeting notes → actions AI agent (Flowngn)",
  "nodes": [
    {
      "parameters": {
        "content": "## Meeting notes → actions AI agent\nPaste your meeting notes; the agent creates tasks with owners, drafts the follow-up email and posts a summary.\n\n**Setup**\n1. Open each node and connect your own credentials.\n2. Replace every YOUR_… placeholder.\n3. Test once, then activate.\n\nFree template from Flowngn",
        "height": 260,
        "width": 340
      },
      "id": "2f782c3a-d667-4b30-a367-e87c52c39ad5",
      "name": "Setup notes",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -420,
        -60
      ]
    },
    {
      "parameters": {
        "public": true,
        "mode": "hostedChat",
        "initialMessages": "Paste your meeting notes or transcript (and attendees' emails if you want a follow-up draft).",
        "options": {
          "responseMode": "lastNode"
        }
      },
      "id": "2f782c3a-d667-4b30-a367-e87c52c39ad5",
      "name": "Paste notes",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        0,
        0
      ],
      "webhookId": "2f782c3a-d667-4b30-a367-e87c52c39ad5"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "=You turn meeting notes or transcripts into action. Today is {{ $now.toFormat('d LLLL yyyy') }}.\n\nWhen the user pastes notes:\n1. Write a short summary: decisions made and open questions.\n2. Find every action item with its owner and due date. Use \"Create task\" once per action item. If a due date isn't stated, leave it empty — don't guess.\n3. If the user gives attendees' emails, use \"Draft follow-up email\" with the summary and action items.\n4. Use \"Post summary\" to share the summary and action items with the team.\n\nRules:\n- Only include what is in the notes. Never invent decisions, owners or dates.\n- If something is unclear, list it under \"Open questions\".\n- Finish by telling the user which tasks you created."
        }
      },
      "id": "2f782c3a-d667-4b30-a367-e87c52c39ad5",
      "name": "Meeting agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.9,
      "position": [
        300,
        0
      ]
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "claude-sonnet-5",
          "mode": "list"
        },
        "options": {}
      },
      "id": "2f782c3a-d667-4b30-a367-e87c52c39ad5",
      "name": "Claude model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.3,
      "position": [
        -40,
        220
      ]
    },
    {
      "parameters": {
        "contextWindowLength": 10
      },
      "id": "2f782c3a-d667-4b30-a367-e87c52c39ad5",
      "name": "Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        130,
        220
      ]
    },
    {
      "parameters": {
        "descriptionType": "manual",
        "toolDescription": "Creates one task in the Notion tasks database.",
        "resource": "databasePage",
        "operation": "create",
        "databaseId": {
          "__rl": true,
          "value": "YOUR_TASKS_DATABASE_ID",
          "mode": "id"
        },
        "title": "={{ $fromAI('task', \"Clear, short task title\", 'string') }}",
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Owner|rich_text",
              "textContent": "={{ $fromAI('owner', \"Who is responsible, as named in the notes\", 'string') }}"
            },
            {
              "key": "Due|date",
              "date": "={{ $fromAI('due', \"Due date YYYY-MM-DD, or empty if not stated\", 'string') }}"
            }
          ]
        },
        "options": {}
      },
      "id": "2f782c3a-d667-4b30-a367-e87c52c39ad5",
      "name": "Create task",
      "type": "n8n-nodes-base.notionTool",
      "typeVersion": 2.2,
      "position": [
        300,
        220
      ]
    },
    {
      "parameters": {
        "descriptionType": "manual",
        "toolDescription": "Saves a follow-up email to the attendees as a Gmail draft. It is never sent automatically.",
        "resource": "draft",
        "operation": "create",
        "subject": "={{ $fromAI('subject', \"Email subject, e.g. Follow-up: <meeting name>\", 'string') }}",
        "message": "={{ $fromAI('body', \"Email body with the summary and action items\", 'string') }}",
        "options": {
          "sendTo": "={{ $fromAI('to', \"Attendees' emails, comma separated\", 'string') }}"
        }
      },
      "id": "2f782c3a-d667-4b30-a367-e87c52c39ad5",
      "name": "Draft follow-up email",
      "type": "n8n-nodes-base.gmailTool",
      "typeVersion": 2.1,
      "position": [
        470,
        220
      ]
    },
    {
      "parameters": {
        "descriptionType": "manual",
        "toolDescription": "Posts the meeting summary and action items to the team's Slack channel.",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "#meetings",
          "mode": "name"
        },
        "text": "={{ $fromAI('summary', \"Summary, decisions and action items\", 'string') }}",
        "otherOptions": {}
      },
      "id": "2f782c3a-d667-4b30-a367-e87c52c39ad5",
      "name": "Post summary",
      "type": "n8n-nodes-base.slackTool",
      "typeVersion": 2.2,
      "position": [
        640,
        220
      ]
    }
  ],
  "connections": {
    "Paste notes": {
      "main": [
        [
          {
            "node": "Meeting agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude model": {
      "ai_languageModel": [
        [
          {
            "node": "Meeting agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Memory": {
      "ai_memory": [
        [
          {
            "node": "Meeting agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Create task": {
      "ai_tool": [
        [
          {
            "node": "Meeting agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Draft follow-up email": {
      "ai_tool": [
        [
          {
            "node": "Meeting agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Post summary": {
      "ai_tool": [
        [
          {
            "node": "Meeting agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "tags": []
}

Open in the playground to edit →

Tips

  • Works with transcripts from Zoom, Google Meet or Teams — paste the text in.

Related flows