This workflow follows the OpenAI Chat → Notion 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 →
{
"name": "meeting-intelligence-openai",
"nodes": [
{
"id": "d3e4f5a6-0001-4000-8000-000000000001",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
0,
300
],
"parameters": {
"httpMethod": "POST",
"path": "meeting-intelligence",
"responseMode": "onReceived",
"options": {}
}
},
{
"id": "d3e4f5a6-0002-4000-8000-000000000002",
"name": "Extract Action Items",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1,
"position": [
220,
300
],
"parameters": {
"model": "gpt-4o",
"messages": {
"values": [
{
"role": "system",
"content": "You are a meeting intelligence assistant. Analyze the meeting transcript and extract structured information. Return ONLY valid JSON with no additional text:\n{\n \"summary\": \"2-3 sentence meeting summary\",\n \"decisions\": [\"decision 1\", \"decision 2\"],\n \"action_items\": [\n {\"task\": \"task description\", \"owner\": \"person name or Unknown\", \"due\": \"due date or TBD\"}\n ],\n \"next_meeting\": \"date or Not scheduled\"\n}"
},
{
"role": "user",
"content": "Meeting title: {{ $json.meeting_title }}\nDate: {{ $json.meeting_date }}\nAttendees: {{ $json.attendees }}\n\nTranscript:\n{{ $json.transcript }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"id": "d3e4f5a6-0003-4000-8000-000000000003",
"name": "Parse Intelligence",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
440,
300
],
"parameters": {
"mode": "manual",
"fields": {
"values": [
{
"name": "summary",
"type": "expression",
"value": "={{ JSON.parse($json.message.content).summary }}"
},
{
"name": "decisions",
"type": "expression",
"value": "={{ JSON.parse($json.message.content).decisions }}"
},
{
"name": "action_items",
"type": "expression",
"value": "={{ JSON.parse($json.message.content).action_items }}"
},
{
"name": "next_meeting",
"type": "expression",
"value": "={{ JSON.parse($json.message.content).next_meeting }}"
},
{
"name": "meeting_title",
"type": "expression",
"value": "={{ $('Webhook Trigger').item.json.meeting_title }}"
},
{
"name": "meeting_date",
"type": "expression",
"value": "={{ $('Webhook Trigger').item.json.meeting_date }}"
},
{
"name": "attendees",
"type": "expression",
"value": "={{ $('Webhook Trigger').item.json.attendees }}"
}
]
}
}
},
{
"id": "d3e4f5a6-0004-4000-8000-000000000004",
"name": "Format Summary Email",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1,
"position": [
660,
300
],
"parameters": {
"model": "gpt-4o",
"messages": {
"values": [
{
"role": "system",
"content": "You are an executive assistant. Format a clean meeting summary email from the structured data provided. Use plain prose, bullet points for action items, and keep it under 250 words. Do not use em-dashes. Start with a one-line summary, then decisions, then action items with owners and due dates, then next steps."
},
{
"role": "user",
"content": "Meeting: {{ $json.meeting_title }}\nDate: {{ $json.meeting_date }}\nAttendees: {{ $json.attendees }}\n\nSummary: {{ $json.summary }}\n\nDecisions: {{ $json.decisions }}\n\nAction items: {{ JSON.stringify($json.action_items) }}\n\nNext meeting: {{ $json.next_meeting }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"id": "d3e4f5a6-0005-4000-8000-000000000005",
"name": "Log to Notion",
"type": "n8n-nodes-base.notion",
"typeVersion": 2,
"position": [
880,
300
],
"parameters": {
"operation": "create",
"databaseId": "YOUR_NOTION_DATABASE_ID",
"title": "={{ $('Parse Intelligence').item.json.meeting_title + ' - ' + $('Parse Intelligence').item.json.meeting_date }}",
"propertiesUi": {
"propertyValues": [
{
"key": "Summary",
"type": "rich_text",
"textContent": "={{ $('Parse Intelligence').item.json.summary }}"
},
{
"key": "Date",
"type": "date",
"date": "={{ $('Parse Intelligence').item.json.meeting_date }}"
},
{
"key": "Attendees",
"type": "rich_text",
"textContent": "={{ $('Parse Intelligence').item.json.attendees }}"
},
{
"key": "Status",
"type": "select",
"selectValue": "Processed"
}
]
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
}
},
{
"id": "d3e4f5a6-0006-4000-8000-000000000006",
"name": "Send Summary to Slack",
"type": "n8n-nodes-base.slack",
"typeVersion": 2,
"position": [
1100,
300
],
"parameters": {
"operation": "post",
"select": "channel",
"channelId": {
"value": "#meeting-summaries"
},
"text": "Meeting summary: {{ $('Parse Intelligence').item.json.meeting_title }} ({{ $('Parse Intelligence').item.json.meeting_date }})\n\n{{ $('Format Summary Email').item.json.message.content }}",
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Extract Action Items",
"type": "main",
"index": 0
}
]
]
},
"Extract Action Items": {
"main": [
[
{
"node": "Parse Intelligence",
"type": "main",
"index": 0
}
]
]
},
"Parse Intelligence": {
"main": [
[
{
"node": "Format Summary Email",
"type": "main",
"index": 0
}
]
]
},
"Format Summary Email": {
"main": [
[
{
"node": "Log to Notion",
"type": "main",
"index": 0
}
]
]
},
"Log to Notion": {
"main": [
[
{
"node": "Send Summary to Slack",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"staticData": null,
"tags": [],
"triggerCount": 1,
"updatedAt": "2026-05-17T00:00:00.000Z",
"versionId": "v1"
}
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.
notionApiopenAiApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
meeting-intelligence-openai. Uses lmChatOpenAi, notion, slack. Webhook trigger; 6 nodes.
Source: https://github.com/sondersos/n8n-workflows/blob/main/workflows/02-meeting-intelligence/meeting-intelligence-openai.json — 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.
strategy-generator-openai. Uses lmChatOpenAi, notion, slack. Webhook trigger; 5 nodes.
Categories: AI, Productivity, Career
cold-outbound-engine-openai. Uses httpRequest, lmChatOpenAi, airtable, slack. Webhook trigger; 10 nodes.
prompt-qa-lab-openai. Uses lmChatOpenAi, slack. Webhook trigger; 7 nodes.
meeting-intelligence-claude. Uses lmChatAnthropic, notion, slack. Webhook trigger; 6 nodes.