This workflow corresponds to n8n.io template #13289 β we link there as the canonical source.
This workflow follows the Gmail β Gmail 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 β
{
"id": "ow1EnH1AKiC91DcYrb-pE",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Customer Support Triage",
"tags": [],
"nodes": [
{
"id": "199f158d-0076-4ff5-b454-e45b6a5db767",
"name": "Validate AI Response",
"type": "n8n-nodes-base.code",
"position": [
832,
0
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const data = $input.item.json;\n\n// Valid options\nconst validCategories = [\n \"Bug Report\", \n \"Feature Request\", \n \"Billing Question\", \n \"General Inquiry\", \n \"Technical Support\", \n \"Marketing Email\"\n];\n\nconst validUrgencies = [\"Low\", \"Medium\", \"High\", \"Critical\"];\n\n// Validation and auto-fix\nlet validationIssues = [];\n\n// Validate category\nif (!data.category || !validCategories.includes(data.category)) {\n validationIssues.push(`Invalid category: ${data.category}`);\n data.category = \"General Inquiry\";\n}\n\n// Validate urgency\nif (!data.urgency || !validUrgencies.includes(data.urgency)) {\n validationIssues.push(`Invalid urgency: ${data.urgency}`);\n data.urgency = \"Medium\";\n}\n\n// Validate summary\nif (!data.summary || data.summary.length < 10) {\n validationIssues.push(\"Summary too short or missing\");\n data.summary = \"AI analysis incomplete - requires manual review\";\n data.requires_manual_review = true;\n}\n\n// Validate suggested_action\nif (!data.suggested_action || data.suggested_action.length < 5) {\n validationIssues.push(\"Suggested action missing\");\n data.suggested_action = \"Review ticket and respond accordingly\";\n}\n\n// Add validation metadata\ndata.validation_status = validationIssues.length > 0 ? \"fixed\" : \"passed\";\ndata.validation_issues = validationIssues.length > 0 ? validationIssues.join(\"; \") : \"none\";\n\nreturn { json: data };"
},
"typeVersion": 2
},
{
"id": "2c004822-6367-4ac2-b46d-df62e732d061",
"name": "Smart Assignment & SLA",
"type": "n8n-nodes-base.code",
"position": [
1040,
0
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const ticket = $input.item.json;\n\n// ========================================\n// ASSIGNMENT RULES\n// ========================================\n\nlet assignTo = \"\";\nlet assignToEmail = \"\";\nlet priority = \"\";\nlet tags = [];\n\n// Category-based assignment\nif (ticket.category === \"Bug Report\") {\n assignTo = \"Engineering Team\";\n assignToEmail = \"user@example.com\";\n priority = ticket.urgency === \"Critical\" ? \"urgent\" : \"high\";\n tags = [\"bug\", \"technical\"];\n \n} else if (ticket.category === \"Billing Question\") {\n assignTo = \"Billing Team\";\n assignToEmail = \"user@example.com\";\n priority = \"normal\";\n tags = [\"billing\", \"finance\"];\n \n} else if (ticket.category === \"Feature Request\") {\n assignTo = \"Product Team\";\n assignToEmail = \"user@example.com\";\n priority = \"low\";\n tags = [\"feature-request\", \"product\"];\n \n} else if (ticket.category === \"Technical Support\") {\n assignTo = \"Support Team\";\n assignToEmail = \"user@example.com\";\n priority = ticket.urgency === \"Critical\" ? \"urgent\" : \"normal\";\n tags = [\"support\", \"technical\"];\n \n} else {\n assignTo = \"General Support\";\n assignToEmail = \"user@example.com\";\n priority = \"normal\";\n tags = [\"general\"];\n}\n\n// ========================================\n// SLA CALCULATION\n// ========================================\n\nconst slaHours = {\n \"Critical\": 1,\n \"High\": 4,\n \"Medium\": 24,\n \"Low\": 48\n};\n\nconst now = new Date();\nconst deadline = new Date(now);\ndeadline.setHours(deadline.getHours() + slaHours[ticket.urgency]);\n\n// ========================================\n// ESCALATION FLAGS\n// ========================================\n\nlet requiresEscalation = false;\nlet escalationReason = \"\";\n\n// Check for angry keywords\nconst text = (ticket.subject + \" \" + ticket.summary).toLowerCase();\nif (text.includes(\"angry\") || text.includes(\"frustrated\") || \n text.includes(\"terrible\") || text.includes(\"worst\")) {\n requiresEscalation = true;\n escalationReason = \"Negative sentiment detected\";\n}\n\n// Check for churn risk\nif (text.includes(\"cancel\") || text.includes(\"refund\") || \n text.includes(\"competitor\") || text.includes(\"switching\")) {\n requiresEscalation = true;\n escalationReason = escalationReason ? escalationReason + \"; Churn risk\" : \"Churn risk\";\n tags.push(\"churn-risk\");\n}\n\n// Critical urgency always escalates\nif (ticket.urgency === \"Critical\") {\n requiresEscalation = true;\n escalationReason = escalationReason ? escalationReason + \"; Critical urgency\" : \"Critical urgency\";\n}\n\n// ========================================\n// RETURN ENRICHED DATA\n// ========================================\n\nreturn {\n json: {\n ...ticket,\n assigned_to: assignTo,\n assigned_to_email: assignToEmail,\n clickup_priority: priority,\n clickup_tags: tags,\n sla_deadline: deadline.toISOString(),\n sla_deadline_readable: deadline.toLocaleString('en-US', { \n dateStyle: 'medium', \n timeStyle: 'short' \n }),\n sla_hours: slaHours[ticket.urgency],\n requires_escalation: requiresEscalation,\n escalation_reason: escalationReason || \"None\"\n }\n};"
},
"typeVersion": 2
},
{
"id": "7208dd18-645f-4edf-bf11-c914315c15ac",
"name": "Parse AI Response",
"type": "n8n-nodes-base.code",
"position": [
608,
0
],
"parameters": {
"jsCode": "// Get AI response\nconst aiResponse = $input.first().json.choices[0].message.content;\n\n// Parse JSON\nconst parsed = JSON.parse(aiResponse);\n\n// Get email data from Edit Fields node\nconst emailData = $('Assign Email Values').first().json;\n\n// Return combined data\nreturn {\n json: {\n timestamp: new Date().toISOString(),\n from: emailData.from,\n subject: emailData.subject,\n emailId: emailData.emailId,\n category: parsed.category,\n urgency: parsed.urgency,\n summary: parsed.summary,\n suggested_action: parsed.suggested_action\n }\n};"
},
"typeVersion": 2
},
{
"id": "a6ea2d0c-473f-46ef-9e34-b0ef2f838266",
"name": "Analysis with Grok",
"type": "n8n-nodes-base.httpRequest",
"position": [
400,
0
],
"parameters": {
"url": "https://api.groq.com/openai/v1/chat/completions",
"method": "POST",
"options": {},
"jsonBody": "={\n \"model\": \"llama-3.1-8b-instant\",\n \"messages\": [{\n \"role\": \"user\",\n \"content\": \"Analyze this email and respond with ONLY valid JSON:\\n\\nFrom: {{ $json.from }}\\nSubject: {{ $json.subject }}\\nBody: {{ $json.body }}\\n\\nRespond with:\\n{\\n \\\"category\\\": \\\"Bug Report, Feature Request, Billing Question, General Inquiry, Technical Support, or Marketing Email\\\",\\n \\\"urgency\\\": \\\"Low, Medium, High, or Critical\\\",\\n \\\"summary\\\": \\\"brief summary\\\",\\n \\\"suggested_action\\\": \\\"what to do next\\\"\\n}\"\n }],\n \"temperature\": 0.3\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "groqApi"
},
"credentials": {
"groqApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "4eeb255c-ffee-4cbb-ab2d-34b91bd5b1f6",
"name": "Assign Email Values",
"type": "n8n-nodes-base.set",
"position": [
192,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c783f414-0169-4cbc-a428-d20c50492a89",
"name": "from",
"type": "string",
"value": "={{ $json.From }}"
},
{
"id": "70353e0b-68b1-4797-8469-c6aefe43506f",
"name": "subject",
"type": "string",
"value": "={{ $json.Subject }}"
},
{
"id": "0f2ae1ff-aa19-46f1-9fcd-09fc5b5d6c68",
"name": "body",
"type": "string",
"value": "={{ $json.snippet }}"
},
{
"id": "89a92bfb-cbfe-4cb2-a4b4-a5ed05409693",
"name": "emailid",
"type": "string",
"value": "={{ $json.id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d54bd655-8630-4e75-b810-7341efb802e0",
"name": "Get Clickup Task URL",
"type": "n8n-nodes-base.code",
"position": [
1472,
0
],
"parameters": {
"jsCode": "const previousData = $('Smart Assignment & SLA').first().json;\nconst clickupResponse = $input.first().json;\n\nreturn {\n json: {\n ...previousData,\n clickup_task_id: clickupResponse.id,\n clickup_task_url: clickupResponse.url,\n clickup_task_created: true\n }\n};"
},
"typeVersion": 2
},
{
"id": "fa0fa3c2-05e0-4009-938a-333022e7aabe",
"name": "Fetch Support Email list",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
-48,
0
],
"parameters": {
"filters": {
"labelIds": [
"Label_7038236549786244180"
],
"readStatus": "read"
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 1.3,
"alwaysOutputData": true
},
{
"id": "60192d85-11aa-427e-8af8-c017f289b5e5",
"name": "Create a Clickup task",
"type": "n8n-nodes-base.clickUp",
"position": [
1280,
0
],
"parameters": {
"list": "901613190616",
"name": "={{ $json.subject }}",
"team": "90161453486",
"space": "90166145857",
"folderless": true,
"additionalFields": {
"tags": "={{ $json.clickup_tags }}",
"status": "new ticket",
"content": "=**\ud83d\udce7 Email Details**\nFrom: {{ $json.from }}\n\n**\ud83c\udfab Ticket Information**\nCategory: {{ $json.category }}\nUrgency: {{ $json.urgency }}\nPriority: {{ $json.clickup_priority }}\n\n**\ud83d\udc64 Assignment**\nAssigned To: {{ $json.assigned_to }}\nTeam Email: {{ $json.assigned_to_email }}\n\n**\ud83d\udcca Analysis**\nSummary: {{ $json.summary }}\n\nSuggested Action: {{ $json.suggested_action }}\n\n**\u23f0 SLA Information**\nDeadline: {{ $json.sla_deadline_readable }}\nResponse Time Required: {{ $json.sla_hours }} hours\n\n{{ $json.requires_escalation ? '\ud83d\udea8 **ESCALATION REQUIRED** - Reason: ' + $json.escalation_reason : '' }}\n\n**\u2705 Validation**\nStatus: {{ $json.validation_status }}\n{{ $json.validation_issues !== 'none' ? 'Issues: ' + $json.validation_issues : '' }}\n\n---\nAuto-created by n8n Email Triage System\nTimestamp: {{ $json.timestamp }}",
"dueDate": "={{ $json.sla_deadline_readable }}"
}
},
"credentials": {
"clickUpApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "52273516-f8d3-4df8-95fc-64c59521a538",
"name": "Escalation Notification",
"type": "n8n-nodes-base.slack",
"position": [
1104,
304
],
"parameters": {
"text": "=\ud83d\udea8\ud83d\udea8\ud83d\udea8 *URGENT ESCALATION NEEDED* \ud83d\udea8\ud83d\udea8\ud83d\udea8 \n*Ticket:* {{ $json.Subject }} \n*From:* {{ $json.From }} \n*Urgency:* {{ $json.Urgency }} \n\n*Escalation Reason:* {{ $json['Escalation Reason'] }} \n*Category:* {{ $json.Category }}\n\n*Summary:* {{ $json.Summary }} \n\n*Suggested Action:* {{ $json.Action }} *\u23f0 SLA Deadline:* {{ $json[\"SLA Deadline\"] }}\n\n*\ud83d\udd17 ClickUp Task:* {{ $json[\"ClickUp Task URL\"] }}\n\n@channel - Immediate attention required!\n\n\n--- _Auto-escalated at {{ $json.Timestamp }}_",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0AAKJ02EMR",
"cachedResultName": "escalations"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "a3cb1e23-85f1-4ccb-a33a-9d5b32302e7c",
"name": "Support Team Notification",
"type": "n8n-nodes-base.slack",
"position": [
1664,
0
],
"parameters": {
"text": "=\ud83c\udfab *New Support Ticket Created*\n\n*From:* {{ $json[\"from\"] }}\n*Subject:* {{ $json[\"subject\"] }}\n\n*\ud83d\udcc1 Category:* {{ $json[\"category\"] }}\n*\u26a1 Urgency:* {{ $json[\"urgency\"] }}\n*\ud83c\udfaf Priority:* {{ $json[\"clickup_priority\"] || \"normal\" }}\n*\ud83d\udc64 Assigned To:* {{ $json[\"assigned_to\"] || \"Support Team\" }}\n*\u23f0 SLA Deadline:* {{ $json[\"sla_deadline\"] }}\n\n{{ $json[\"Requires Escalation\"] === true ? '\ud83d\udea8 *ESCALATION REQUIRED*: ' + $json[\"Escalation Reason\"] + '\\n' : '' }}\n*\ud83d\udcdd Summary:*\n{{ $json[\"summary\"] }}\n\n*\ud83d\udca1 Suggested Action:*\n{{ $json[\"suggested_action\"] }}\n\n*\ud83d\udd17 ClickUp Task:* {{ $json[\"clickup_task_url\"] }}\n\n---\n*Validation:* {{ $json.validation_status }}\n_Auto-triaged at {{ $json[\"timestamp\"] }}_",
"user": {
"__rl": true,
"mode": "list",
"value": "U0ABJEE9E0G",
"cachedResultName": "vivek120891"
},
"select": "user",
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "50dd5c57-05e2-4d38-9ebb-8d8209c39996",
"name": "If Urgent?",
"type": "n8n-nodes-base.if",
"position": [
832,
432
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "59f1c01c-a431-4fb1-974e-82627e3c8d04",
"operator": {
"type": "boolean",
"operation": "equals"
},
"leftValue": "={{ $json[\"Requires Escalation\"] }}",
"rightValue": true
}
]
}
},
"typeVersion": 2.3
},
{
"id": "c8cd6c40-e088-413c-aafa-468f370c3cb9",
"name": "Email Acknowledgement",
"type": "n8n-nodes-base.gmail",
"position": [
1104,
528
],
"parameters": {
"sendTo": "={{ $json.From }}",
"message": "=<html>\n<body style=\"font-family: Arial, sans-serif; line-height: 1.6; color: #333;\">\n <div style=\"max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #ddd; border-radius: 8px;\">\n \n <h2 style=\"color: #2563eb; border-bottom: 2px solid #2563eb; padding-bottom: 10px;\">\n \ud83c\udfab New Support Ticket Assigned\n </h2>\n \n {{ $json.requires_escalation ? '<div style=\"background-color: #fee; border-left: 4px solid #dc2626; padding: 15px; margin: 20px 0;\"><strong>\ud83d\udea8 ESCALATION REQUIRED</strong><br>Reason: ' + $json.escalation_reason + '</div>' : '' }}\n \n <div style=\"background-color: #f9fafb; padding: 15px; border-radius: 6px; margin: 20px 0;\">\n <p><strong>From:</strong> {{ $json.From }}</p>\n <p><strong>Subject:</strong> {{ $json.Subject }}</p>\n <p><strong>Category:</strong> {{ $json.Category }}</p>\n <p><strong>Urgency:</strong> <span style=\"background-color: {{ $json.urgency === 'Critical' ? '#dc2626' : $json.urgency === 'High' ? '#ea580c' : $json.urgency === 'Medium' ? '#facc15' : '#22c55e' }}; color: white; padding: 2px 8px; border-radius: 4px;\">{{ $json.Urgency }}</span></p>\n\n <p><strong>SLA Deadline:</strong>{{ $json[\"SLA Deadline\"] }} </p>\n </div>\n \n <h3 style=\"color: #2563eb; margin-top: 25px;\">\ud83d\udcdd Summary</h3>\n <p style=\"background-color: #f9fafb; padding: 15px; border-radius: 6px;\">{{ $json.Summary }}</p>\n \n <h3 style=\"color: #2563eb; margin-top: 25px;\">\ud83d\udca1 Suggested Action</h3>\n <p style=\"background-color: #f9fafb; padding: 15px; border-radius: 6px;\">{{ $json.Action }}</p>\n \n <div style=\"margin-top: 30px; padding: 20px; background-color: #eff6ff; border-radius: 6px;\">\n <p style=\"margin: 0;\"><strong>\ud83d\udd17 ClickUp Task:</strong> <a href=\"{{ $json[\"ClickUp Task URL\"] }}\" style=\"color: #2563eb;\">View in ClickUp</a></p>\n </div>\n \n <hr style=\"margin: 30px 0; border: none; border-top: 1px solid #ddd;\">\n \n <p style=\"font-size: 12px; color: #666; text-align: center;\">\n Auto-generated by n8n Email Triage System<br>\n {{ $json.Timestamp }}\n </p>\n \n </div>\n</body>\n</html>",
"options": {},
"subject": "=[Case#{{ Math.floor(Math.random() * 9000) + 1000 }}] New Support Ticket Assigned: {{ $json.Subject }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "ba60e880-3b23-4484-b814-c5abd19a7368",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-112,
-128
],
"parameters": {
"color": 7,
"width": 864,
"height": 368,
"content": "## Email intake & AI analysis\nFetch emails and analyze with Grok AI"
},
"typeVersion": 1
},
{
"id": "cd94ec44-d976-4d18-8849-1044d96e6f04",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
-128
],
"parameters": {
"color": 7,
"width": 448,
"height": 368,
"content": "## Validation & assignment\nValidate AI output and assign to teams"
},
"typeVersion": 1
},
{
"id": "a200d2c7-5569-4676-abda-14a3620ff4b2",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1232,
-128
],
"parameters": {
"color": 7,
"width": 624,
"height": 368,
"content": "## Task creation & notifications\nCreate ClickUp tasks and notify via Slack"
},
"typeVersion": 1
},
{
"id": "d453544e-a366-482c-b074-5635b47839ad",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
416,
272
],
"parameters": {
"color": 7,
"width": 928,
"height": 432,
"content": "## Logging & customer response\nLog to Google Sheets and send acknowledgment emails"
},
"typeVersion": 1
},
{
"id": "a8d0955f-0436-47de-8369-79a16a390d3b",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-896,
-128
],
"parameters": {
"width": 735,
"height": 833,
"content": "## Customer support triage automation with AI, ClickUp and Google Sheets\n\nThis workflow automates customer support ticket triage by analyzing incoming emails with AI, categorizing them, creating tasks in ClickUp, and notifying your team via Slack.\n\n## How it works\n\n1. **Email ingestion**: Fetches new support emails from Outlook inbox\n2. **AI analysis**: Uses Grok AI to classify tickets by category (Bug Report, Feature Request, Billing, etc.) and urgency level (Low, Medium, High, Critical)\n3. **Validation**: Ensures AI outputs meet required format and quality standards\n4. **Smart assignment**: Routes tickets to appropriate teams based on category and calculates SLA deadlines\n5. **Task creation**: Creates organized tasks in ClickUp with proper priority, tags, and descriptions\n6. **Tracking**: Logs all tickets to Google Sheets for reporting and analytics\n7. **Notifications**: Alerts support team via Slack, with special escalation channel for urgent issues\n8. **Customer acknowledgment**: Sends automated email replies with ticket details and tracking links\n\n## Setup steps\n\n1. **Connect Outlook**: Authenticate your support email account in the \"Fetch Support Email list\" node\n2. **Configure Grok AI**: Add your xAI API credentials in the \"Analysis with Grok\" node\n3. **Set up ClickUp**: Connect your ClickUp workspace and select the list where tasks should be created\n4. **Link Google Sheets**: Connect your Google account and create a spreadsheet with columns matching the workflow (Timestamp, Subject, From, Category, Urgency, etc.)\n5. **Configure Slack**: Add Slack credentials and set up two channels - one for general notifications (#support) and one for escalations (#support-escalation)\n6. **Set up Gmail**: Connect Gmail for sending acknowledgment emails to customers\n7. **Customize assignment rules**: Edit the \"Smart Assignment & SLA\" node to match your team structure and SLA policies\n8. **Test the workflow**: Run manually with a test email before activating\n\nOnce configured, this workflow runs automatically whenever new emails arrive, handling the complete triage process from intake to notification."
},
"typeVersion": 1
},
{
"id": "db741fe0-447b-4a02-a78b-c38bb64fce0c",
"name": "Log in Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
592,
432
],
"parameters": {
"columns": {
"value": {
"From": "={{ $json.from }}",
"Action": "={{ $json.suggested_action }}",
"Subject": "={{ $json.subject }}",
"Summary": "={{ $json.summary }}",
"Urgency": "={{ $json.urgency }}",
"Category": "={{ $json.category }}",
"Timestamp": "={{ $json.timestamp }}",
"SLA Deadline": "={{ $json.sla_deadline_readable }}",
"ClickUp Task ID": "={{ $json.clickup_task_id }}",
"ClickUp Task URL": "={{ $json.clickup_task_url }}",
"Escalation Reason": "={{ $json.escalation_reason }}",
"Validation Issues": "={{ $json.validation_issues }}",
"Validation Status": "={{ $json.validation_status }}",
"Requires Escalation": "={{ $json.requires_escalation }}"
},
"schema": [
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "From",
"type": "string",
"display": true,
"required": false,
"displayName": "From",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Subject",
"type": "string",
"display": true,
"required": false,
"displayName": "Subject",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Urgency",
"type": "string",
"display": true,
"required": false,
"displayName": "Urgency",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"type": "string",
"display": true,
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Action",
"type": "string",
"display": true,
"required": false,
"displayName": "Action",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Validation Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Validation Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Validation Issues",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Validation Issues",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "ClickUp Task ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ClickUp Task ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "ClickUp Task URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ClickUp Task URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "SLA Deadline",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "SLA Deadline",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Requires Escalation",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Requires Escalation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Escalation Reason",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Escalation Reason",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-c-1AXq0e3YoLxpKt7d0PxBY1dOUPc3ECfkf3lb9Wkw/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1-c-1AXq0e3YoLxpKt7d0PxBY1dOUPc3ECfkf3lb9Wkw",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-c-1AXq0e3YoLxpKt7d0PxBY1dOUPc3ECfkf3lb9Wkw/edit?usp=drivesdk",
"cachedResultName": "Support Tickets Tracker"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
}
],
"active": true,
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"timeSavedMode": "dynamic",
"availableInMCP": false,
"executionOrder": "v1",
"executionTimeout": 3600
},
"versionId": "7ca3eb41-7074-40c2-8b1c-cda65bb9ac0f",
"connections": {
"If Urgent?": {
"main": [
[
{
"node": "Escalation Notification",
"type": "main",
"index": 0
},
{
"node": "Email Acknowledgement",
"type": "main",
"index": 0
}
],
[
{
"node": "Email Acknowledgement",
"type": "main",
"index": 0
}
]
]
},
"Parse AI Response": {
"main": [
[
{
"node": "Validate AI Response",
"type": "main",
"index": 0
}
]
]
},
"Analysis with Grok": {
"main": [
[
{
"node": "Parse AI Response",
"type": "main",
"index": 0
}
]
]
},
"Assign Email Values": {
"main": [
[
{
"node": "Analysis with Grok",
"type": "main",
"index": 0
}
]
]
},
"Log in Google Sheet": {
"main": [
[
{
"node": "If Urgent?",
"type": "main",
"index": 0
}
]
]
},
"Get Clickup Task URL": {
"main": [
[
{
"node": "Log in Google Sheet",
"type": "main",
"index": 0
},
{
"node": "Support Team Notification",
"type": "main",
"index": 0
}
]
]
},
"Validate AI Response": {
"main": [
[
{
"node": "Smart Assignment & SLA",
"type": "main",
"index": 0
}
]
]
},
"Create a Clickup task": {
"main": [
[
{
"node": "Get Clickup Task URL",
"type": "main",
"index": 0
}
]
]
},
"Email Acknowledgement": {
"main": [
[]
]
},
"Smart Assignment & SLA": {
"main": [
[
{
"node": "Create a Clickup task",
"type": "main",
"index": 0
}
]
]
},
"Escalation Notification": {
"main": [
[]
]
},
"Fetch Support Email list": {
"main": [
[
{
"node": "Assign Email Values",
"type": "main",
"index": 0
}
]
]
},
"Support Team Notification": {
"main": [
[]
]
}
}
}
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.
clickUpApigmailOAuth2googleSheetsOAuth2ApigroqApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
π Description
Source: https://n8n.io/workflows/13289/ β original creator credit. Request a take-down β
More Email & Gmail workflows β Β· Browse all categories β
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This template is built to be customized for your specific needs. This template has the core logic and n8n node specific references sorted to work with dynamic file names throughout the workflow. Store
This workflow automatically detects duplicate invoices from Gmail. Incoming PDF attachments are scanned by the easybits AI Extractor, then checked against the Master Finance File in Google Sheets. Dup
This workflow automates the tracking and follow-up process for pending payments. It pulls lead payment data from Google Sheets, checks whether the status is βOpen,β and then routes actions accordingly
Receive any business document via email. The attachment is automatically classified (Invoice, Contract, or Purchase Order) using easybits Extractor, then routed down the correct path where a second Ex
This workflow automatically detects bounced or invalid email addresses from your Gmail inbox and updates their status in Google Sheets. It fetches bounce notifications, extracts failed email addresses