AutomationFlowsAI & RAG › Automate Release Notes From Clickup to Notion & Slack with Gpt-4o

Automate Release Notes From Clickup to Notion & Slack with Gpt-4o

ByRahul Joshi @rahul08 on n8n.io

This workflow automates the entire release note creation and announcement process whenever a task status changes in ClickUp. Using Azure OpenAI GPT-4o, Notion, Slack, Gmail, and Google Sheets, it converts technical task data into clear, structured, and branded release notes —…

Event trigger★★★★☆ complexityAI-powered20 nodesLm Chat Azure Open AiGoogle SheetsClickUp TriggerClickUpAgentNotionSlackGmail
AI & RAG Trigger: Event Nodes: 20 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #10332 — 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
{
  "id": "qIm89R0VoyFG5umx",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Release Notes-to-FAQ Stub (Jira/ClickUp):",
  "tags": [],
  "nodes": [
    {
      "id": "0a9f291a-fb5e-48d2-aef0-8b4cb3471228",
      "name": "Configure GPT-4o Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        160,
        128
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "296c2339-d34b-45b4-8c79-05a1ab1bb5e1",
      "name": "Log Errors in Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -288,
        544
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "error_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "error_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "error",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "error",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "error_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1338537721,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit#gid=1338537721",
          "cachedResultName": "error log sheet"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit?usp=drivesdk",
          "cachedResultName": "Interviewer Brief Pack "
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "a754bf62-8af5-43d5-8210-a9d451828bfa",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 528,
        "height": 368,
        "content": "## ClickUp Trigger & Validation\nListens for ClickUp task status changes and validates the webhook payload.  \nPrevents invalid or empty task events from being processed.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ae6259ca-a0d7-49c5-b33f-c122d087c856",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1664,
        -944
      ],
      "parameters": {
        "width": 576,
        "height": 576,
        "content": "## How it works\nThis automation turns ClickUp task updates into complete release-note workflows.  \nWhen a task\u2019s status changes in ClickUp (e.g., \u201cIn Review\u201d \u2192 \u201cComplete\u201d), the workflow fetches full task details, cleans them, and uses Azure OpenAI GPT-4o to generate structured, Markdown-style release notes.  \nThe notes are saved automatically in Notion under the \u201cRelease Notes\u201d database, then shared in Slack as a formatted announcement.  \nFinally, an HTML email acknowledgment is sent to the task owner confirming that the release is documented and live.  \nAny validation or API errors are logged in Google Sheets for traceability.\n\n## Setup steps\n1. Connect your credentials:  \n   - ClickUp (webhook + API)  \n   - Azure OpenAI API  \n   - Notion (database)  \n   - Slack  \n   - Gmail  \n   - Google Sheets (for error logging)\n2. Replace Notion DB ID, Slack user/channel, and Google Sheet ID with yours.  \n3. Confirm ClickUp team ID and event trigger (`taskStatusUpdated`).  \n4. Adjust the Gmail HTML message if desired.  \n5. Run a test task update to verify flow end-to-end.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "652ed9cf-0a37-4772-8b59-232706351ce2",
      "name": "ClickUp Task Status Trigger",
      "type": "n8n-nodes-base.clickUpTrigger",
      "position": [
        -944,
        -64
      ],
      "parameters": {
        "team": "9014872066",
        "events": [
          "taskStatusUpdated"
        ],
        "filters": {}
      },
      "credentials": {
        "clickUpApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f803efdb-39a1-44ad-bf1b-f93dbe68a29a",
      "name": "Validate ClickUp Payload",
      "type": "n8n-nodes-base.if",
      "position": [
        -688,
        -64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e2adb005-2b3c-4d1e-8445-442df1fe925a",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.task_id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "386b65fa-bf70-40ef-9a3b-00ca7e84d49d",
      "name": " Fetch Task Details from ClickUp",
      "type": "n8n-nodes-base.clickUp",
      "position": [
        -352,
        -80
      ],
      "parameters": {
        "id": "={{ $json.task_id }}",
        "operation": "get"
      },
      "credentials": {
        "clickUpApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9df1d658-7d5b-4ad9-a8c5-921cd84f0d7e",
      "name": "Parse Task Details in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        -112,
        -80
      ],
      "parameters": {
        "jsCode": "// Extract ClickUp task details safely\nconst task = $json;\n\n// Handle cases where arrays or fields might be empty\nconst assignee = (task.assignees && task.assignees.length > 0) ? task.assignees[0] : {};\nconst customFields = task.custom_fields || [];\n\n// Try to find the first field with a value (like a GitHub or docs link)\nconst linkField = customFields.find(f => f.value) || {};\n\nreturn [\n  {\n    json: {\n      title: task.name || \"Untitled Task\",\n      description: task.description || \"No description available.\",\n      status: task.status?.status || \"No status\",\n      priority: task.priority?.priority || \"Not set\",\n      due_date: task.due_date || \"No due date\",\n      assignee: assignee.username || \"Unassigned\",\n      email: assignee.email || \"No email\",\n      link: linkField.value || \"No link provided\",\n      url: task.url || \"No URL\",\n    },\n  },\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "0cea2e62-14b1-4b94-82f9-fad9d1039e42",
      "name": "Generate Release Notes FAQ (AI)",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        144,
        -80
      ],
      "parameters": {
        "text": "=Task Title: {{$json.title}}\nDescription: {{$json.description}}\nStatus: {{$json.status}}\nPriority: {{$json.priority}}\nDue Date: {{$json.due_date}}\nAssignee: {{$json.assignee}} ({{$json.email}})\nTask URL: {{$json.url}}\nReference Link: {{$json.link}}\n\nPlease create a brief FAQ in Markdown format using the 4 sections:\n1) What changed\n2) Why\n3) How to use\n4) Known issues\n",
        "options": {
          "systemMessage": "=You are a release notes editor. \nYour job is to turn technical task information into a clear, simple FAQ for users and internal teams. \nBe concise, non-marketing, and structured under these exact 4 sections:\n1) What changed\n2) Why\n3) How to use\n4) Known issues\n\nEach section should be 2\u20134 short bullet points.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "8928882c-2c88-43f3-9797-f6179f2bb841",
      "name": "Save Release Notes to Notion",
      "type": "n8n-nodes-base.notion",
      "position": [
        544,
        -80
      ],
      "parameters": {
        "title": "={{ $('Parse Task Details in JavaScript').item.json.title }}",
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "29a802b9-1fa0-804a-b406-e078961e0659",
          "cachedResultUrl": "https://www.notion.so/29a802b91fa0804ab406e078961e0659",
          "cachedResultName": "Release Notes"
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Task URL|rich_text",
              "textContent": "={{ $('Parse Task Details in JavaScript').item.json.url }}"
            },
            {
              "key": "Status|rich_text",
              "textContent": "={{ $('Parse Task Details in JavaScript').item.json.status }}"
            },
            {
              "key": "Priority|rich_text",
              "textContent": "={{ $('Parse Task Details in JavaScript').item.json.priority }}"
            },
            {
              "key": "Owner|rich_text",
              "textContent": "={{ $('Parse Task Details in JavaScript').item.json.assignee }}"
            },
            {
              "key": "FAQ Content|rich_text",
              "textContent": "={{ $json.output }}"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "63000865-c681-490a-8ce0-f8faf3c89e01",
      "name": "Announce Release in Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1184,
        -80
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "user": {
          "__rl": true,
          "mode": "list",
          "value": "U09HMPVD466",
          "cachedResultName": "newscctv22"
        },
        "select": "user",
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "add680c8-a40a-489c-bc5f-34cac0a078a0",
      "name": "Configure GPT-4o Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        816,
        128
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1d91b3cc-e61d-419d-a15e-8dfe2a9a4dd5",
      "name": "Generate Slack Release Announcement (AI)",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        800,
        -80
      ],
      "parameters": {
        "text": "=Create a Slack release announcement message using this task information:\n\nTask Title:{{ $(' Fetch Task Details from ClickUp').item.json.name }}\nDescription: {{ $(' Fetch Task Details from ClickUp').item.json.description }}\nStatus: {{ $(' Fetch Task Details from ClickUp').item.json.status }}\nPriority:{{ $json.properties }}\nAssignee: {{ $(' Fetch Task Details from ClickUp').item.json.assignees[0].email }}\nTask URL: {{$json.url}}\n\nFormat it as a professional Slack message with emojis, proper formatting, and a clickable task link.",
        "options": {
          "systemMessage": "=You are a Slack message formatter for release announcements.\n\nYour job is to take ClickUp task information and create a visually appealing, professional Slack message.\n\nRequirements:\n1. Use Slack markdown formatting (bold with *, italics with _, code blocks with ```)\n2. Include appropriate emojis for visual appeal\n3. Keep it concise and scannable\n4. Structure: Header \u2192 Key Details \u2192 Task Link \u2192 Release Date \u2192 Footer\n5. Use bullet points or clean formatting for readability\n6. Add a clickable link to the ClickUp task\n7. Include automation signature at the bottom\n\nReturn ONLY the formatted Slack message text, no JSON, no explanations"
        },
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "be95e9d0-6750-477a-b4a2-d1a097aac9fd",
      "name": " Send Acknowledgment Email to Assignee",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1536,
        -80
      ],
      "parameters": {
        "sendTo": "={{ $('Parse Task Details in JavaScript').item.json.email }}",
        "message": "=<!DOCTYPE html>\n<html>\n<head>\n    <style>\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            max-width: 600px;\n            margin: 0 auto;\n            padding: 20px;\n        }\n        .header {\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            color: white;\n            padding: 30px;\n            border-radius: 10px 10px 0 0;\n            text-align: center;\n        }\n        .header h1 {\n            margin: 0;\n            font-size: 24px;\n        }\n        .content {\n            background: #f8f9fa;\n            padding: 30px;\n            border-radius: 0 0 10px 10px;\n        }\n        .info-box {\n            background: white;\n            padding: 20px;\n            border-radius: 8px;\n            margin: 20px 0;\n            border-left: 4px solid #667eea;\n        }\n        .info-row {\n            margin: 12px 0;\n            display: flex;\n            align-items: center;\n        }\n        .label {\n            font-weight: 600;\n            color: #667eea;\n            min-width: 120px;\n        }\n        .value {\n            color: #333;\n        }\n        .priority-urgent { color: #dc3545; font-weight: bold; }\n        .priority-high { color: #fd7e14; font-weight: bold; }\n        .priority-normal { color: #ffc107; }\n        .priority-low { color: #28a745; }\n        .status-ready { color: #28a745; font-weight: bold; }\n        .cta-button {\n            display: inline-block;\n            background: #667eea;\n            color: white !important;\n            padding: 14px 30px;\n            text-decoration: none;\n            border-radius: 6px;\n            margin: 20px 0;\n            font-weight: 600;\n            text-align: center;\n        }\n        .cta-button:hover {\n            background: #5568d3;\n        }\n        .faq-section {\n            background: white;\n            padding: 20px;\n            border-radius: 8px;\n            margin: 20px 0;\n        }\n        .faq-section h3 {\n            color: #667eea;\n            margin-top: 0;\n        }\n        .footer {\n            text-align: center;\n            padding: 20px;\n            color: #6c757d;\n            font-size: 12px;\n            border-top: 1px solid #dee2e6;\n            margin-top: 30px;\n        }\n        .emoji {\n            font-size: 18px;\n            margin-right: 8px;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"header\">\n        <h1>\ud83d\ude80 Your Release is Ready!</h1>\n    </div>\n    \n    <div class=\"content\">\n        <p>Hi <strong>{{ $('Parse Task Details in JavaScript').item.json.assignee }}</strong>,</p>\n        \n        <p>Great news! Your feature release has been processed and documented. Here are the details:</p>\n        \n        <div class=\"info-box\">\n            <div class=\"info-row\">\n                <span class=\"label\">\ud83d\udccb Feature:</span>\n                <span class=\"value\">{{ $('Parse Task Details in JavaScript').item.json.title }}</span>\n            </div>\n            <div class=\"info-row\">\n                <span class=\"label\">\u26a1 Priority:</span>\n                <span class=\"value priority-{{ $('Parse Task Details in JavaScript').item.json.priority.toLowerCase() }}\">\n                    {{ $('Parse Task Details in JavaScript').item.json.priority }}\n                </span>\n            </div>\n            <div class=\"info-row\">\n                <span class=\"label\">\u2705 Status:</span>\n                <span class=\"value status-ready\">{{ $('Parse Task Details in JavaScript').item.json.status }}</span>\n            </div>\n            <div class=\"info-row\">\n                <span class=\"label\">\ud83d\udcc5 Release Date:</span>\n                <span class=\"value\">{{ $now.toFormat('MMMM dd, yyyy') }}</span>\n            </div>\n        </div>\n\n        <center>\n            <a href=\"{{ $('Save Release Notes to Notion').item.json.url }}\" class=\"cta-button\">\n                \ud83d\udcd6 View Full Release Notes in Notion\n            </a>\n        </center>\n\n        <div class=\"faq-section\">\n            <h3>\ud83d\udcdd Release Notes Preview</h3>\n            <p style=\"white-space: pre-line; color: #495057; line-height: 1.8;\">{{ $('Generate Release Notes FAQ (AI)').item.json.output.substring(0, 500) }}...</p>\n        </div>\n\n        <div class=\"info-box\" style=\"border-left-color: #28a745;\">\n            <p style=\"margin: 0;\"><strong>\ud83d\udd17 Quick Links:</strong></p>\n            <ul style=\"margin: 10px 0;\">\n                <li><a href=\"{{ $('Parse Task Details in JavaScript').item.json.url }}\" style=\"color: #667eea;\">View ClickUp Task</a></li>\n                <li><a href=\"{{ $('Save Release Notes to Notion').item.json.url }}\" style=\"color: #667eea;\">View Notion Documentation</a></li>\n                {{ $('Parse Task Details in JavaScript').item.json.link !== 'No link provided' ? '<li><a href=\"' + $('Parse Task Details in JavaScript').item.json.link + '\" style=\"color: #667eea;\">Reference Link</a></li>' : '' }}\n            </ul>\n        </div>\n\n        <p style=\"margin-top: 30px;\">The team has been notified via Slack, and this release is now live in our knowledge base.</p>\n        \n        <p>If you have any questions or need to update the documentation, please reach out to the team.</p>\n        \n        <p style=\"margin-top: 30px;\">\n            Best regards,<br>\n            <strong>Release Automation Team</strong>\n        </p>\n    </div>\n\n    <div class=\"footer\">\n        <p>\ud83e\udd16 This is an automated message generated by our n8n workflow.</p>\n        <p>If you believe you received this in error, please contact your system administrator.</p>\n    </div>\n</body>\n</html>",
        "options": {},
        "subject": "=\u2705 Release Ready: {{ $('Parse Task Details in JavaScript').item.json.title }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "56486d5f-7142-4092-8808-d95961f28ac8",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -304
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 464,
        "content": "## Task Data Fetching & Parsing\nRetrieves detailed ClickUp task info and converts it into clean JSON fields.  \nEnsures consistent input for AI-based release-note generation.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "26dd72fa-2822-41ad-8eee-f8b8fb4a1cda",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -288
      ],
      "parameters": {
        "color": 7,
        "width": 352,
        "height": 576,
        "content": "## AI Release-Note Generation\nUses GPT-4o to summarize task details into a four-section FAQ format.  \nEach section highlights what changed, why, how to use it, and any known issues.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e7920945-1bac-4cdc-b0bf-8aaa731e271f",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        -352
      ],
      "parameters": {
        "color": 7,
        "height": 640,
        "content": "## Notion Documentation & Record Keeping\nAutomatically creates a new Notion entry under \u201cRelease Notes.\u201d  \nCaptures all key fields: title, owner, priority, status, and generated FAQ.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4a84e45d-17b4-4ec9-96bf-4c6ec252e393",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -304
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 592,
        "content": "## Slack Announcement & AI Formatting\nFormats a professional, emoji-enhanced Slack message using GPT-4o.  \nPosts it to the team channel to announce the new release instantly.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0f1b231a-9a08-4e5b-8344-01aa0f8ae8c8",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        -256
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 400,
        "content": "## Email Acknowledgment & Closure\nSends a confirmation email to the task assignee.  \nIncludes release details, links to Notion & ClickUp, and a preview of the AI-generated notes.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ad64298d-dcf6-45e5-86a0-dadef7539b6c",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        320
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 464,
        "content": "## Error Handling & Logging\nLogs any missing payloads or API failures to Google Sheets.  \nProvides visibility into workflow issues for easy debugging.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1ca088d6-1491-407d-b2c4-a74e0d2ac92c",
  "connections": {
    "Configure GPT-4o Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Release Notes FAQ (AI)",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Configure GPT-4o Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Slack Release Announcement (AI)",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Validate ClickUp Payload": {
      "main": [
        [
          {
            "node": " Fetch Task Details from ClickUp",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Errors in Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Announce Release in Slack": {
      "main": [
        [
          {
            "node": " Send Acknowledgment Email to Assignee",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ClickUp Task Status Trigger": {
      "main": [
        [
          {
            "node": "Validate ClickUp Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Release Notes to Notion": {
      "main": [
        [
          {
            "node": "Generate Slack Release Announcement (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Release Notes FAQ (AI)": {
      "main": [
        [
          {
            "node": "Save Release Notes to Notion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    " Fetch Task Details from ClickUp": {
      "main": [
        [
          {
            "node": "Parse Task Details in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Task Details in JavaScript": {
      "main": [
        [
          {
            "node": "Generate Release Notes FAQ (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Slack Release Announcement (AI)": {
      "main": [
        [
          {
            "node": "Announce Release in Slack",
            "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 entire release note creation and announcement process whenever a task status changes in ClickUp. Using Azure OpenAI GPT-4o, Notion, Slack, Gmail, and Google Sheets, it converts technical task data into clear, structured, and branded release notes —…

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

Automatically capture customer onboarding help requests from Typeform, log them in Google Sheets, validate email addresses, and send a professional HTML welcome email via Gmail. Ensures smooth onboard

Typeform Trigger, Google Sheets, Gmail +6
AI & RAG

Automate your weekly social media analytics with this end-to-end AI reporting workflow. 📊🤖 This system collects real-time Twitter (X) and Facebook metrics, merges and validates data, formats it with J

Lm Chat Azure Open Ai, HTTP Request, Google Sheets +4
AI & RAG

Automate your developer onboarding quality checks with this n8n workflow template. Whenever a new onboarding task is created in ClickUp, the workflow logs it to Google Sheets, evaluates its completene

ClickUp Trigger, Google Sheets, Agent +3
AI & RAG

This end-to-end automation transforms developer support emails into actionable FAQs and sentiment insights using Azure OpenAI GPT-4o, Gmail, Notion, Slack, and Google Sheets. It not only classifies an

Lm Chat Azure Open Ai, Gmail Trigger, Agent +4
AI & RAG

This workflow automates end-to-end validation, assessment, and reporting of n8n workflow JSON templates using Google Drive, Azure OpenAI GPT-4o, Gmail, and Slack. It retrieves workflows from a Drive f

Memory Buffer Window, Lm Chat Azure Open Ai, Output Parser Structured +5