This workflow corresponds to n8n.io template #12664 — we link there as the canonical source.
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 →
{
"id": "kbyUAoUaSNMcfSc3",
"name": "My workflow",
"tags": [],
"nodes": [
{
"id": "5e1c0ff4-5482-4b6c-b385-56ec9e236ce3",
"name": "\ud83d\udccb Meeting Notes Distributor",
"type": "n8n-nodes-base.stickyNote",
"position": [
16,
0
],
"parameters": {
"width": 550,
"height": 658,
"content": "## How it works\nThis workflow converts raw meeting recordings or notes into concise, actionable summaries and distributes them automatically. After a manual trigger, a recording URL and basic metadata are set, then sent to a transcription API. Once the transcript is ready, an AI service produces a bullet-point summary and a separate list of action items. Both outputs are merged, stored in ClickUp as a new task for future reference, and simultaneously sent to the meeting participants via Microsoft Teams. If anything fails along the way, a separate error branch notifies the team so issues can be fixed quickly.\n\n## Setup steps\n1. Create credentials for your transcription API, OpenAI (or similar LLM), ClickUp, and Microsoft Teams in n8n.\n2. Replace placeholder URLs, IDs, and list IDs in the Set nodes with your real data.\n3. Configure the transcription and AI HTTP Request nodes with your preferred models and parameters.\n4. Update the ClickUp node with the correct workspace, space, and list IDs plus default assignees.\n5. Update the Teams node chat or channel IDs where you want alerts to appear.\n6. Test the workflow with a short meeting recording to confirm each branch succeeds.\n7. Fine-tune prompts, timeouts, or error handling to match your team\u2019s requirements."
},
"typeVersion": 1
},
{
"id": "e04f0f39-a519-4e70-b5ac-34e452f80987",
"name": "Trigger & Input",
"type": "n8n-nodes-base.stickyNote",
"position": [
688,
32
],
"parameters": {
"color": 7,
"width": 674,
"height": 622,
"content": "## Trigger & Input\nThis section kicks off the automation. A Manual Trigger lets users start the flow with one click\u2014ideal for ad-hoc processing or demo purposes. Immediately afterward, a Set node captures basic meeting metadata such as title, date, recording URL, and participant email list. Feel free to swap this Set node for a Webhook or form submission if you later want to automate ingestion. The HTTP Request node posts the recording URL to your transcription provider. The following IF node quickly checks the HTTP status code so we can branch into success or error logic right away. Keeping these first few nodes isolated makes troubleshooting simple while ensuring that bad inputs never propagate deeper into the workflow."
},
"typeVersion": 1
},
{
"id": "3b5a7001-d36b-4c97-bbdb-e069c9f0f54f",
"name": "Processing & Summarization",
"type": "n8n-nodes-base.stickyNote",
"position": [
1360,
16
],
"parameters": {
"color": 7,
"width": 706,
"height": 686,
"content": "## Processing & Summarization\nOnce the transcription service returns an identifier, a short Wait node allows background processing to finish before we poll for results. A second HTTP Request fetches the transcript, which a Code node reshapes into plain text and retains useful metadata. Another HTTP Request sends the cleaned transcript to an LLM that returns a structured JSON summary. A pair of Code nodes parse the LLM output and extract both a concise meeting overview and a separate list of action items. An IF node validates that the summary actually exists to protect downstream integrations. Finally, a Merge node combines summary and action-item objects so everything is available in one payload for storage and notifications."
},
"typeVersion": 1
},
{
"id": "a7a98caf-c7aa-47ae-aa1c-508126d4af50",
"name": "Notifications & Storage",
"type": "n8n-nodes-base.stickyNote",
"position": [
2304,
0
],
"parameters": {
"color": 7,
"width": 1202,
"height": 654,
"content": "## Notifications & Storage\nThis cluster of nodes prepares and delivers the final outputs. A Set node formats the merged summary into ClickUp-ready fields (task name, description, custom properties, assignees). The ClickUp node then creates a new task, giving your team a centralized place to review and track follow-ups. Another Set node crafts a Microsoft Teams message that mentions participants, embeds the summary, and links directly to the new ClickUp task. The Teams node pushes this message to the chosen channel or chat. Parallel error-handling nodes format and dispatch failure alerts so stakeholders know when manual intervention is required. This dual-storage plus real-time notification pattern keeps knowledge organized while ensuring important insights reach everyone instantly."
},
"typeVersion": 1
},
{
"id": "44c5cfeb-0371-4762-93af-a4724c3e3cbf",
"name": "Start Workflow",
"type": "n8n-nodes-base.manualTrigger",
"position": [
672,
400
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a3fb08a6-4b80-4892-bb7c-d8310fcc8b35",
"name": "Set Meeting Info",
"type": "n8n-nodes-base.set",
"position": [
864,
400
],
"parameters": {
"options": {}
},
"typeVersion": 3.4
},
{
"id": "da0fa8dc-704f-406f-87ef-915553a5bffb",
"name": "Send to Transcription API",
"type": "n8n-nodes-base.httpRequest",
"position": [
1040,
400
],
"parameters": {
"url": "https://api.exampletranscript.com/v1/transcribe",
"method": "POST",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "genericApiAuth"
},
"typeVersion": 4.2
},
{
"id": "f08a9650-67bd-4058-a19f-461a56ed1827",
"name": "Transcription Request OK?",
"type": "n8n-nodes-base.if",
"position": [
1216,
400
],
"parameters": {
"options": {},
"conditions": {
"number": [
{
"value1": "={{ $json.statusCode || 200 }}",
"value2": 299,
"operation": "smallerEqual"
}
]
}
},
"typeVersion": 2
},
{
"id": "dc43b1de-6caf-4d7a-beb6-907939ffa5b5",
"name": "Wait for Processing",
"type": "n8n-nodes-base.wait",
"position": [
1392,
208
],
"parameters": {
"unit": "seconds"
},
"typeVersion": 1
},
{
"id": "0bcd1a4f-8786-4dec-94ca-4c64caa262f3",
"name": "Fetch Transcript",
"type": "n8n-nodes-base.httpRequest",
"position": [
1584,
208
],
"parameters": {
"url": "={{ 'https://api.exampletranscript.com/v1/transcript/' + $json.id }}",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "genericApiAuth"
},
"typeVersion": 4.2
},
{
"id": "7d3c4697-b3c2-4a76-a331-8a376c3121c3",
"name": "Extract Transcript Text",
"type": "n8n-nodes-base.code",
"position": [
1760,
208
],
"parameters": {
"jsCode": "// Receive raw transcript response\nconst data = items[0].json;\nreturn [{\n json: {\n meetingTitle: $json.meetingTitle,\n participants: $json.participants,\n transcriptText: data.transcript || data.text || '',\n clickupListId: $json.clickupListId,\n teamsChannelId: $json.teamsChannelId\n }\n}];"
},
"typeVersion": 2
},
{
"id": "aa000fa1-ae5f-45fe-b825-99a176c47176",
"name": "AI Summarize",
"type": "n8n-nodes-base.httpRequest",
"position": [
1936,
208
],
"parameters": {
"url": "https://api.openai.com/v1/chat/completions",
"method": "POST",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "openAiApi"
},
"typeVersion": 4.2
},
{
"id": "28d7beea-1b20-42f9-89d9-d44ddf54b5c0",
"name": "Extract Summary JSON",
"type": "n8n-nodes-base.code",
"position": [
2112,
208
],
"parameters": {
"jsCode": "const resp = items[0].json;\nconst content = resp.choices?.[0]?.message?.content || '';\nlet summary = '';\nlet actionItems = '';\ntry {\n const parsed = JSON.parse(content);\n summary = parsed.summary || parsed.notes || '';\n actionItems = parsed.action_items || parsed.actions || '';\n} catch (e) {\n summary = content;\n}\nreturn [{ json: { summary, actionItems, meetingTitle: $json.meetingTitle, participants: $json.participants, clickupListId: $json.clickupListId, teamsChannelId: $json.teamsChannelId } }];"
},
"typeVersion": 2
},
{
"id": "f89f3a03-d2e7-4358-91c3-2ef1182e0ca8",
"name": "Summary Exists?",
"type": "n8n-nodes-base.if",
"position": [
2304,
208
],
"parameters": {
"options": {},
"conditions": {
"string": [
{
"value1": "={{ $json.summary }}",
"operation": "isEmpty"
}
]
}
},
"typeVersion": 2
},
{
"id": "af5368ed-1ab4-4b6a-bdbf-46ecf04bb8dd",
"name": "Generate Action Items",
"type": "n8n-nodes-base.code",
"position": [
2480,
272
],
"parameters": {
"jsCode": "// Ensure actionItems is array of strings\nlet actions = $json.actionItems;\nif (typeof actions === 'string') {\n actions = actions.split(/\\n|\u2022|-|\\*/).map(a => a.trim()).filter(Boolean);\n}\nreturn [{ json: { summary: $json.summary, actionItems: actions, meetingTitle: $json.meetingTitle, participants: $json.participants, clickupListId: $json.clickupListId, teamsChannelId: $json.teamsChannelId } }];"
},
"typeVersion": 2
},
{
"id": "642a198c-93a6-40ff-985e-21492d09913a",
"name": "Merge Summary & Actions",
"type": "n8n-nodes-base.merge",
"position": [
2656,
272
],
"parameters": {
"mode": "mergeByIndex",
"options": {}
},
"typeVersion": 2.1
},
{
"id": "8da032b2-8f99-4a3d-854b-118d7cbf1a2b",
"name": "Prepare ClickUp Task",
"type": "n8n-nodes-base.set",
"position": [
2832,
272
],
"parameters": {
"options": {}
},
"typeVersion": 3.4
},
{
"id": "4df4363f-1468-48e6-a11f-a4e15d015fd1",
"name": "Create ClickUp Task",
"type": "n8n-nodes-base.clickUp",
"position": [
3024,
272
],
"parameters": {
"name": "={{ $json.taskName }}",
"additionalFields": {
"assignees": "={{ $json.assignees }}"
}
},
"typeVersion": 1
},
{
"id": "de46c933-d729-4ad8-887c-38fe7df6ddd0",
"name": "Prepare Teams Message",
"type": "n8n-nodes-base.set",
"position": [
3200,
272
],
"parameters": {
"options": {}
},
"typeVersion": 3.4
},
{
"id": "2e49dd2e-a6ba-42d1-a4de-5a2508a2427d",
"name": "Send Summary to Teams",
"type": "n8n-nodes-base.microsoftTeams",
"position": [
3376,
272
],
"parameters": {
"chatId": {
"__rl": true,
"mode": "list",
"value": ""
},
"message": "={{ $json.messageHtml }}",
"options": {},
"resource": "chatMessage",
"contentType": "html"
},
"typeVersion": 2
},
{
"id": "23b1843c-d6d0-4f49-a8f5-87ca7241cd86",
"name": "Prepare Error Message",
"type": "n8n-nodes-base.set",
"position": [
1392,
528
],
"parameters": {
"options": {}
},
"typeVersion": 3.4
},
{
"id": "394cbb15-3bdb-49a4-b80f-e3480817c679",
"name": "Send Error to Teams",
"type": "n8n-nodes-base.microsoftTeams",
"position": [
1584,
528
],
"parameters": {
"chatId": {
"__rl": true,
"mode": "list",
"value": ""
},
"message": "={{ $json.errorText }}",
"options": {},
"resource": "chatMessage",
"contentType": "html"
},
"typeVersion": 2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "0882537f-4dd7-40af-bb73-52f68ba2e7de",
"connections": {
"AI Summarize": {
"main": [
[
{
"node": "Extract Summary JSON",
"type": "main",
"index": 0
}
]
]
},
"Start Workflow": {
"main": [
[
{
"node": "Set Meeting Info",
"type": "main",
"index": 0
}
]
]
},
"Summary Exists?": {
"main": [
[
{
"node": "Generate Action Items",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Error Message",
"type": "main",
"index": 0
}
]
]
},
"Fetch Transcript": {
"main": [
[
{
"node": "Extract Transcript Text",
"type": "main",
"index": 0
}
]
]
},
"Set Meeting Info": {
"main": [
[
{
"node": "Send to Transcription API",
"type": "main",
"index": 0
}
]
]
},
"Create ClickUp Task": {
"main": [
[
{
"node": "Prepare Teams Message",
"type": "main",
"index": 0
}
]
]
},
"Wait for Processing": {
"main": [
[
{
"node": "Fetch Transcript",
"type": "main",
"index": 0
}
]
]
},
"Extract Summary JSON": {
"main": [
[
{
"node": "Summary Exists?",
"type": "main",
"index": 0
}
]
]
},
"Prepare ClickUp Task": {
"main": [
[
{
"node": "Create ClickUp Task",
"type": "main",
"index": 0
}
]
]
},
"Generate Action Items": {
"main": [
[
{
"node": "Merge Summary & Actions",
"type": "main",
"index": 0
}
]
]
},
"Prepare Error Message": {
"main": [
[
{
"node": "Send Error to Teams",
"type": "main",
"index": 0
}
]
]
},
"Prepare Teams Message": {
"main": [
[
{
"node": "Send Summary to Teams",
"type": "main",
"index": 0
}
]
]
},
"Extract Transcript Text": {
"main": [
[
{
"node": "AI Summarize",
"type": "main",
"index": 0
}
]
]
},
"Send to Transcription API": {
"main": [
[
{
"node": "Transcription Request OK?",
"type": "main",
"index": 0
}
]
]
},
"Transcription Request OK?": {
"main": [
[
{
"node": "Wait for Processing",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Error Message",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow processes raw meeting recordings or handwritten notes, automatically transcribes and summarizes them, and then distributes the concise summary to all meeting participants via Microsoft Teams while also creating an action-item task in ClickUp. The goal is to save…
Source: https://n8n.io/workflows/12664/ — 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.
This Template gives the ability to monitor all uplinks for your Meraki Dashboard and then alert your team in a method you prefer. This example is a Teams notification to our Dispatch Channel
This workflow automates the synchronization of time tracked on ClickUp tasks directly to a custom project object in HubSpot, ensuring your project metrics are always accurate and up-to-date.
Automated system for monitoring and analyzing competitor activities, funding rounds, and market movements using CrunchBase data. Tracks competitor funding rounds Monitors leadership changes Analyzes i
This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t
[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.