This workflow corresponds to n8n.io template #4447 — we link there as the canonical source.
This workflow follows the Chainllm → Emailsend 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "fc0f2155-ac48-4cd0-97d2-3eb81dac1757",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-840,
120
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash"
},
"typeVersion": 1
},
{
"id": "992c9e1b-ec91-4470-887f-e43c899cfb8c",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
1080,
-280
],
"parameters": {
"color": 4,
"width": 500,
"height": 1280,
"content": "=======================================\n WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n\nAuthor:\nYaron Been\n"
},
"typeVersion": 1
},
{
"id": "4c76ce3a-6c1d-493b-b648-12c0d56fd9d8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-820,
-640
],
"parameters": {
"width": 580,
"content": "This workflow retrieves support ticket data from Google Sheets, counts how many tickets fall into each category, and sends a summary report via email."
},
"typeVersion": 1
},
{
"id": "ab24dd90-ae20-496d-a963-6c89a65d2340",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-960,
-180
],
"parameters": {
"width": 170,
"height": 80,
"content": "Triggers the workflow to start the summary process."
},
"typeVersion": 1
},
{
"id": "968d3213-dafc-415f-8760-31e0fb55d94a",
"name": "Form Trigger",
"type": "n8n-nodes-base.typeformTrigger",
"position": [
-940,
-380
],
"parameters": {
"formId": "lwldQPTN"
},
"typeVersion": 1.1
},
{
"id": "d57b9477-f789-4ee2-a664-eba7f787a750",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-680,
-160
],
"parameters": {
"width": 190,
"height": 100,
"content": "Uses Gemini model to classify or tag each support request into predefined categories."
},
"typeVersion": 1
},
{
"id": "bb7ae6f3-5c32-47a3-a91b-97e4e4b4e0b1",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
-160
],
"parameters": {
"width": 170,
"height": 100,
"content": "Parses Gemini's response to extract only the relevant category label from the output."
},
"typeVersion": 1
},
{
"id": "b7eb9e53-916f-4c34-babf-c8b23641b8a2",
"name": "AI Categorization",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-740,
-380
],
"parameters": {
"text": "=Classify the support request below:\nMessage: {{ $json['Your message'] }}\n\nReturn output with 'category' and 'sentiment' columns of JSON FILE:\n{\n \"category\": one of [\"Billing\", \"Bug Report\", \"Feature Request\", \"How-To\", \"Complaint\"],\n \"sentiment\": one of [\"Positive\", \"Neutral\", \"Negative\"]\n}\n ",
"promptType": "define"
},
"typeVersion": 1.5
},
{
"id": "eb3c3d0a-cdad-4792-a954-1de022d968dd",
"name": "Extract Category",
"type": "n8n-nodes-base.code",
"position": [
-360,
-380
],
"parameters": {
"jsCode": "// Get the input string\nconst inputString = $json.text;\n\n// Remove code block markers using regex\nconst cleaned = inputString.replace(/```json|```/g, '').trim();\n\n// Parse the JSON\nconst data = JSON.parse(cleaned);\n\n// Extract the values\nconst category = data.category;\nconst sentiment = data.sentiment;\n\n// Return as output\nreturn [{ category, sentiment }];"
},
"typeVersion": 2
},
{
"id": "b3c418d7-9113-46eb-af0a-2372de5a3eec",
"name": "Store Data",
"type": "n8n-nodes-base.googleSheets",
"position": [
-120,
-380
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Form Trigger').item.json['Enter your name'] }}",
"Email": "={{ $('Form Trigger').item.json['Enter your email'] }}",
"Message": "={{ $('Form Trigger').item.json['Your message'] }}",
"Category": "={{ $json.category }}",
"Sentiment": "={{ $json.sentiment }}",
"Timestamp": "={{$now}}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Message",
"type": "string",
"display": true,
"required": false,
"displayName": "Message",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Sentiment",
"type": "string",
"display": true,
"required": false,
"displayName": "Sentiment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"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/1SY1fCAbsvyTzIBbmwZpdktbUFN4jKNIpF4GJ9lFKvPM/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1SY1fCAbsvyTzIBbmwZpdktbUFN4jKNIpF4GJ9lFKvPM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SY1fCAbsvyTzIBbmwZpdktbUFN4jKNIpF4GJ9lFKvPM/edit?usp=drivesdk",
"cachedResultName": "Support"
}
},
"typeVersion": 4.5
},
{
"id": "51ef2daa-2c2e-409c-a103-6f915d3ef0d0",
"name": "Fetch Support Ticket Data",
"type": "n8n-nodes-base.googleSheets",
"position": [
100,
-380
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SY1fCAbsvyTzIBbmwZpdktbUFN4jKNIpF4GJ9lFKvPM/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1SY1fCAbsvyTzIBbmwZpdktbUFN4jKNIpF4GJ9lFKvPM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SY1fCAbsvyTzIBbmwZpdktbUFN4jKNIpF4GJ9lFKvPM/edit?usp=drivesdk",
"cachedResultName": "Support"
}
},
"typeVersion": 4.5
},
{
"id": "b3258a29-9bfa-4361-83d3-804aac76e976",
"name": "Increment Counter",
"type": "n8n-nodes-base.code",
"position": [
300,
-380
],
"parameters": {
"jsCode": "const items = $input.all();\nconst counts = {};\nitems.forEach(item => {\n const cat = item.json.Category;\n if (cat) {\n counts[cat] = (counts[cat] || 0) + 1;\n }\n});\nreturn [{ json: { summary: counts } }];"
},
"typeVersion": 2
},
{
"id": "5c8193a0-6fab-494a-bd40-b26188c319b0",
"name": "Email Ticket Summary",
"type": "n8n-nodes-base.emailSend",
"position": [
500,
-380
],
"parameters": {
"text": "=Hello,\n\nHere is the updated count of categorized support tickets:\n\nBilling: {{$json.summary.Billing || 0}}\nBug Report: {{$json.summary['Bug Report'] || 0}}\nFeature Request: {{$json.summary['Feature Request'] || 0}}\nHow-To: {{$json.summary['How-To'] || 0}}\nComplaint: {{$json.summary.Complaint || 0}}\n\nBest regards,\nSupport Tracker",
"options": {},
"subject": "Support Ticket Summary",
"toEmail": "user@example.com",
"fromEmail": "you@example.com"
},
"typeVersion": 1
},
{
"id": "3827fa87-5669-4217-88fe-978328f0ec4c",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-140,
-180
],
"parameters": {
"width": 170,
"height": 120,
"content": "Appends each categorized and data ticket into a central Google Sheet for record keeping and later aggregation."
},
"typeVersion": 1
},
{
"id": "c515d231-f260-4c5a-9895-19fe0c229762",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
-180
],
"parameters": {
"width": 170,
"height": 120,
"content": "Fetches all categorized entries from the Google Sheet to compute ticket counts by category."
},
"typeVersion": 1
},
{
"id": "f6eb3bd4-c4fa-4b98-bc58-1930118e3b25",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
300,
-180
],
"parameters": {
"width": 170,
"height": 100,
"content": "Groups tickets by category and counts the total per group to prepare data for reporting."
},
"typeVersion": 1
},
{
"id": "5ec81b1c-14d1-4540-9acb-ad8c97632246",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
520,
-180
],
"parameters": {
"width": 170,
"height": 100,
"content": "Sends an email with the total number of tickets per category from today\u2019s run."
},
"typeVersion": 1
}
],
"connections": {
"Store Data": {
"main": [
[
{
"node": "Fetch Support Ticket Data",
"type": "main",
"index": 0
}
]
]
},
"Form Trigger": {
"main": [
[
{
"node": "AI Categorization",
"type": "main",
"index": 0
}
]
]
},
"Extract Category": {
"main": [
[
{
"node": "Store Data",
"type": "main",
"index": 0
}
]
]
},
"AI Categorization": {
"main": [
[
{
"node": "Extract Category",
"type": "main",
"index": 0
}
]
]
},
"Increment Counter": {
"main": [
[
{
"node": "Email Ticket Summary",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Categorization",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Fetch Support Ticket Data": {
"main": [
[
{
"node": "Increment Counter",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Transform chaotic support requests into organized, actionable insights automatically.
Source: https://n8n.io/workflows/4447/ — 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 end-to-end AI-powered recruitment automation workflow helps HR and talent acquisition teams automate the complete hiring pipeline—from resume intake and parsing to GPT-4-based evaluation, TA appr
This n8n workflow automates the collection, enrichment, and analysis of e-commerce product listings using Bright Data and AI, then delivers an HTML email report with the most competitive offers.
This workflow creates a multi-talented AI assistant named Simran that interacts with users via Telegram. It can handle text and voice messages, understand the user's intent, and perform various tasks.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Transform a single quote into a fully-rendered cinematic short video — with voice-over, visuals, and music — then publish it directly to TikTok, Instagram Reels, and YouTube Shorts. This isn’t just au