This workflow corresponds to n8n.io template #11855 — 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 →
{
"id": "EMZLBZJUwjoo9G5X",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "MCP Employee Performance & Productivity Insights Engine with Automated Manager",
"tags": [],
"nodes": [
{
"id": "4d32e812-a396-4b14-b159-7c43a37f879f",
"name": "Weekly Performance Analysis Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-448,
288
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.3
},
{
"id": "2323916d-89d9-493a-80fc-a319c6df222b",
"name": "Workflow Configuration",
"type": "n8n-nodes-base.set",
"position": [
-224,
288
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "pmToolApiUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__PM Tool API URL__>"
},
{
"id": "id-2",
"name": "codeRepoApiUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Code Repository API URL (e.g., GitHub, GitLab)__>"
},
{
"id": "id-3",
"name": "meetingLogsApiUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Meeting Logs API URL (e.g., Google Calendar, Zoom)__>"
},
{
"id": "id-4",
"name": "crmApiUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__CRM API URL (e.g., Salesforce, HubSpot)__>"
},
{
"id": "id-5",
"name": "managerEmail",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Manager Email Address__>"
},
{
"id": "id-6",
"name": "analysisTimeframe",
"type": "number",
"value": 7
},
{
"id": "id-7",
"name": "overloadThreshold",
"type": "number",
"value": 40
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "5293a47f-3174-46f0-8f20-0919c69b9712",
"name": "Fetch PM Tool Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
96
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.pmToolApiUrl }}",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "timeframe",
"value": "={{ $('Workflow Configuration').first().json.analysisTimeframe }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "a677ea17-29b2-4030-b77b-9e2d394da399",
"name": "Fetch Code Repo Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
240
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.codeRepoApiUrl }}",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "since",
"value": "={{ $now.minus({ days: $('Workflow Configuration').first().json.analysisTimeframe }).toISO() }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "b790582f-e107-4677-8c10-a9ec568e3a58",
"name": "Fetch Meeting Logs",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
384
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.meetingLogsApiUrl }}",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "timeMin",
"value": "={{ $now.minus({ days: $('Workflow Configuration').first().json.analysisTimeframe }).toISO() }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "f2ec9356-cf6c-4d8f-a3e3-c0aec87f838a",
"name": "Fetch CRM Activity",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
576
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "days",
"value": "={{ $('Workflow Configuration').first().json.analysisTimeframe }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "c34213e0-e5b4-43d6-810b-477580bedfec",
"name": "Combine All Data Sources",
"type": "n8n-nodes-base.aggregate",
"position": [
224,
288
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "allData"
},
"typeVersion": 1
},
{
"id": "6c084e52-b76c-47bb-8412-9e8aaab3fc7d",
"name": "Performance Analysis Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
480,
288
],
"parameters": {
"text": "={{ $json.allData }}",
"options": {
"systemMessage": "You are an Employee Performance & Productivity Insights Engine. Your task is to analyze employee performance data from multiple sources and generate comprehensive insights.\n\nAnalyze the provided data which includes:\n- Project management tool data (tasks, completion rates, deadlines)\n- Code repository data (commits, pull requests, code reviews)\n- Meeting logs (attendance, duration, frequency)\n- CRM activity (customer interactions, deals, response times)\n\nFor each employee, generate:\n1. Performance Summary: Overall productivity assessment with key metrics\n2. Strengths: Areas where the employee excels\n3. Bottlenecks: Specific issues causing delays or inefficiencies\n4. Workload Status: Current workload level (normal, high, overloaded)\n5. Recommendations: Specific suggestions for workload balancing or support\n6. Priority Actions: Immediate steps managers should take\n\nReturn structured data with employee name, performance score (0-100), workload level, bottlenecks array, and recommendations array."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3
},
{
"id": "70a37bb2-fff6-4a50-9bf4-05fd67932c37",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
480,
512
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "58f804db-62cc-4993-a663-ce51aafd6b7f",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
624,
496
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"employeeName\": {\n \"type\": \"string\"\n },\n \"performanceScore\": {\n \"type\": \"number\"\n },\n \"workloadLevel\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"high\", \"overloaded\"]\n },\n \"strengths\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"bottlenecks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"recommendations\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"priorityActions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n}"
},
"typeVersion": 1.3
},
{
"id": "3ef41f0c-3cec-4c94-96c3-bd6a4f9e50dc",
"name": "Process Performance Data",
"type": "n8n-nodes-base.code",
"position": [
800,
288
],
"parameters": {
"jsCode": "// Extract the performance analysis from the agent\nconst agentOutput = $input.all();\n\n// Process the structured output from the agent\nlet performanceData = [];\n\nfor (const item of agentOutput) {\n const analysis = item.json;\n \n // Check if there are any issues (bottlenecks, overload, low productivity)\n const hasIssues = \n (analysis.bottlenecks && analysis.bottlenecks.length > 0) ||\n (analysis.overloadedEmployees && analysis.overloadedEmployees.length > 0) ||\n (analysis.lowProductivity && analysis.lowProductivity.length > 0);\n \n performanceData.push({\n json: {\n ...analysis,\n hasIssues: hasIssues,\n timestamp: new Date().toISOString()\n }\n });\n}\n\nreturn performanceData;"
},
"typeVersion": 2
},
{
"id": "c9a63281-3be0-4fc3-973b-6334d7de9c78",
"name": "Check for Bottlenecks or Overload",
"type": "n8n-nodes-base.if",
"position": [
1024,
288
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "or",
"conditions": [
{
"id": "id-1",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.workloadLevel }}",
"rightValue": "overloaded"
},
{
"id": "id-2",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.workloadLevel }}",
"rightValue": "high"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "0623c8a7-f537-4518-b860-f45112ada9b8",
"name": "Create Manager Follow-up Tasks",
"type": "n8n-nodes-base.set",
"position": [
1248,
272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "taskTitle",
"type": "string",
"value": "=Follow-up: {{ $json.employeeName }} - Performance Review"
},
{
"id": "id-2",
"name": "taskDescription",
"type": "string",
"value": "=Performance Score: {{ $json.performanceScore }}\nWorkload Level: {{ $json.workloadLevel }}\n\nBottlenecks:\n{{ $json.bottlenecks.join('\\n- ') }}\n\nRecommendations:\n{{ $json.recommendations.join('\\n- ') }}\n\nPriority Actions:\n{{ $json.priorityActions.join('\\n- ') }}"
},
{
"id": "id-3",
"name": "taskPriority",
"type": "string",
"value": "high"
},
{
"id": "id-4",
"name": "taskDueDate",
"type": "string",
"value": "={{ $now.plus({ days: 3 }).toISO() }}"
},
{
"id": "id-5",
"name": "employeeData",
"type": "object",
"value": "={{ $json }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3e5fd815-d501-4afe-bdf9-c09ed91557fd",
"name": "Send Performance Summary to Manager",
"type": "n8n-nodes-base.gmail",
"position": [
1472,
192
],
"parameters": {
"sendTo": "={{ $('Workflow Configuration').first().json.managerEmail }}",
"message": "=<h2>Performance Analysis for {{ $json.employeeName }}</h2>\n\n<p><strong>Performance Score:</strong> {{ $json.performanceScore }}/100</p>\n<p><strong>Workload Level:</strong> {{ $json.workloadLevel }}</p>\n\n<h3>Strengths:</h3>\n<ul>\n{{ $json.strengths.map(s => '<li>' + s + '</li>').join('') }}\n</ul>\n\n<h3>Bottlenecks Identified:</h3>\n<ul>\n{{ $json.bottlenecks.map(b => '<li>' + b + '</li>').join('') }}\n</ul>\n\n<h3>Recommendations:</h3>\n<ul>\n{{ $json.recommendations.map(r => '<li>' + r + '</li>').join('') }}\n</ul>\n\n<h3>Priority Actions:</h3>\n<ul>\n{{ $json.priorityActions.map(a => '<li>' + a + '</li>').join('') }}\n</ul>\n\n<p>A follow-up task has been created in your PM tool.</p>",
"options": {},
"subject": "=Employee Performance Insights - {{ $json.employeeName }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "27aa988e-5df5-4a44-89be-bc1f198c09f0",
"name": "Create Tasks in PM Tool",
"type": "n8n-nodes-base.httpRequest",
"position": [
1472,
384
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.pmToolApiUrl }}/tasks",
"method": "POST",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "title",
"value": "={{ $json.taskTitle }}"
},
{
"name": "description",
"value": "={{ $json.taskDescription }}"
},
{
"name": "priority",
"value": "={{ $json.taskPriority }}"
},
{
"name": "dueDate",
"value": "={{ $json.taskDueDate }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "c473aee5-a09f-453b-a7ff-61f0e599ba29",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
992,
-352
],
"parameters": {
"color": 5,
"width": 384,
"height": 256,
"content": "## Customization\nReplace PM tool with Jira/Linear; swap OpenAI for Claude/Gemini; \n\n## Benefits\nReduces manual performance tracking by 6+ hours weekly; provides real-time visibility into team capacity; "
},
"typeVersion": 1
},
{
"id": "c32e78b3-ad99-408f-a3d9-32819fd802d3",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
496,
-352
],
"parameters": {
"color": 4,
"width": 480,
"height": 208,
"content": "## Prerequisites\nPM tool API access, GitHub/GitLab token, CRM credentials, OpenAI API key, Gmail OAuth connection \n\n## Use Cases\nTrack engineering team productivity weekly; identify code review bottlenecks; \n"
},
"typeVersion": 1
},
{
"id": "01ee2640-8a64-4fa6-892d-b34d8e294924",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
176,
-352
],
"parameters": {
"color": 3,
"width": 304,
"height": 256,
"content": "## Setup Steps\n1. Configure credentials: PM Tool API key\n2. Set the OpenAI API key.\n3. Connect your Gmail account \n4. In the Workflow Configuration node, adjust API endpoints and polling intervals.\n5. Map data field names \n6. Test data fetch nodes using sample queries."
},
"typeVersion": 1
},
{
"id": "e2e08636-e833-434b-895d-fba9fe4af224",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-512,
-352
],
"parameters": {
"width": 656,
"height": 208,
"content": "## How It Works\nThis workflow automates performance monitoring by aggregating data from PM tools, code repositories, meeting logs, and CRM systems. It processes team metrics using AI-powered analysis via OpenAI, identifies bottlenecks and workload issues, then creates manager follow-ups and tasks. The system runs weekly, collecting 4 data sources, combining them, analyzing trends, evaluating team capacity, and routing alerts to managers via Gmail. Managers receive structured summaries highlighting performance gaps and required actions. Target audience: Engineering managers and team leads monitoring team velocity, code quality, and capacity planning."
},
"typeVersion": 1
},
{
"id": "5f303117-a39d-4a1a-b780-e97a811745b1",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
-64
],
"parameters": {
"color": 7,
"width": 688,
"height": 784,
"content": "## Evaluate Team Capacity and Give Notification\n### What\nEvaluate team capacity thresholds and bottleneck indicators. Provide notification\n### Why\nDetermines if manager intervention is required for workload management and provide next action."
},
"typeVersion": 1
},
{
"id": "e3c3074e-2e04-476f-bd9d-e656fe09c450",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
-64
],
"parameters": {
"color": 7,
"width": 512,
"height": 784,
"content": "## Parse AI Output\n### What\nParse structured output from OpenAI analysis using a custom JSON parser.\n### Why\nExtracts actionable insights, such as bottlenecks and trends, into a structured format."
},
"typeVersion": 1
},
{
"id": "38133b25-316f-46cf-a4a8-479a9b57d3b1",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
176,
-64
],
"parameters": {
"color": 7,
"height": 784,
"content": "## Data Combination and Normalization\n### What\nCombine and normalize all data sources into a unified format.\n### Why\nCreates a consistent data structure for reliable AI analysis."
},
"typeVersion": 1
},
{
"id": "fa72dabc-6d2f-4f72-b363-122a40e73fbf",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-512,
-64
],
"parameters": {
"color": 7,
"width": 672,
"height": 784,
"content": "## Fetch Data from Multiple Sources\n### What\nFetch PM Tool, Code Repo, Meeting, and CRM data via four parallel API calls.\n### Why\nConsolidates performance metrics from all key business systems into a single workflow."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "27bcf5c3-295e-491c-a59d-8008e891aae1",
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Performance Analysis Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Fetch CRM Activity": {
"main": [
[
{
"node": "Combine All Data Sources",
"type": "main",
"index": 0
}
]
]
},
"Fetch Meeting Logs": {
"main": [
[
{
"node": "Combine All Data Sources",
"type": "main",
"index": 0
}
]
]
},
"Fetch PM Tool Data": {
"main": [
[
{
"node": "Combine All Data Sources",
"type": "main",
"index": 0
}
]
]
},
"Fetch Code Repo Data": {
"main": [
[
{
"node": "Combine All Data Sources",
"type": "main",
"index": 0
}
]
]
},
"Workflow Configuration": {
"main": [
[
{
"node": "Fetch PM Tool Data",
"type": "main",
"index": 0
},
{
"node": "Fetch Code Repo Data",
"type": "main",
"index": 0
},
{
"node": "Fetch Meeting Logs",
"type": "main",
"index": 0
},
{
"node": "Fetch CRM Activity",
"type": "main",
"index": 0
}
]
]
},
"Combine All Data Sources": {
"main": [
[
{
"node": "Performance Analysis Agent",
"type": "main",
"index": 0
}
]
]
},
"Process Performance Data": {
"main": [
[
{
"node": "Check for Bottlenecks or Overload",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Performance Analysis Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Performance Analysis Agent": {
"main": [
[
{
"node": "Process Performance Data",
"type": "main",
"index": 0
}
]
]
},
"Create Manager Follow-up Tasks": {
"main": [
[
{
"node": "Send Performance Summary to Manager",
"type": "main",
"index": 0
},
{
"node": "Create Tasks in PM Tool",
"type": "main",
"index": 0
}
]
]
},
"Check for Bottlenecks or Overload": {
"main": [
[
{
"node": "Create Manager Follow-up Tasks",
"type": "main",
"index": 0
}
]
]
},
"Weekly Performance Analysis Trigger": {
"main": [
[
{
"node": "Workflow Configuration",
"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.
gmailOAuth2openAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates performance monitoring by aggregating data from PM tools, code repositories, meeting logs, and CRM systems. It processes team metrics using AI-powered analysis via OpenAI, identifies bottlenecks and workload issues, then creates manager follow-ups and…
Source: https://n8n.io/workflows/11855/ — 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 n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform
Created by: Peyton Leveillee Last updated: October 2025
SEO Blog Article Generation Workflow. Uses outputParserStructured, httpRequest, agent, lmChatOpenAi. Scheduled trigger; 56 nodes.
This workflow was born out of a very real problem.
This workflow automates comprehensive real estate investment analysis by orchestrating specialized AI agents to evaluate property data, market trends, and financial metrics. Designed for real estate i