This workflow corresponds to n8n.io template #10222 — 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": "SO3XFrXNyQTjwils",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Employee Recognition Automation with Slack, Sheets & Gmail",
"tags": [],
"nodes": [
{
"id": "ac6a4d39-86ab-4325-810f-50910cb09d40",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
160,
272
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "3685995a-dacf-4395-b0a8-3154189bb234",
"name": "New Row Added",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
-48,
0
],
"parameters": {
"event": "rowAdded",
"options": {
"dataLocationOnSheet": {
"values": {
"range": "A:D",
"rangeDefinition": "specifyRangeA1"
}
}
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "id",
"value": "YOUR_SHEET_ID"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "YOUR_DOC_ID"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "f6cc7e9c-e5b1-4c38-9424-95bb34138328",
"name": "Format Employee Data",
"type": "n8n-nodes-base.code",
"position": [
208,
0
],
"parameters": {
"jsCode": "return items.map(item => ({\n json: {\n name: item.json[\"Name\"],\n dept: item.json[\"Department\"],\n reason: item.json[\"Reason\"],\n date: item.json[\"Date\"],\n message: `${item.json[\"Name\"]} from ${item.json[\"Department\"]} has been recognized for ${item.json[\"Reason\"]}! \ud83c\udf89`\n }\n}));\n"
},
"typeVersion": 2
},
{
"id": "dfa27ba6-112e-45cc-8167-c54635a42cda",
"name": "Generate Personalized Message",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
416,
0
],
"parameters": {
"options": {
"systemMessage": "Write a short, friendly recognition message for {name} from the {dept} department who was recognized for {reason}. \nMake it sound genuine and positive, under 2 sentences.\n"
}
},
"typeVersion": 2.2
},
{
"id": "20a36671-cd34-42c1-982d-3d4c69370768",
"name": "Post Message to #general",
"type": "n8n-nodes-base.slack",
"position": [
768,
0
],
"parameters": {
"text": "=\ud83c\udf89 Employee Spotlight \ud83c\udf89 \n{{ $json.name }} from {{ $json.dept }} has been recognized for {{ $json.reason }}! \nGreat work! \ud83d\udc4f\n",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "YOUR_CHANNEL_ID"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "b844e4af-e142-4caa-a1c5-9eeb477a3add",
"name": "Update Row (Status)",
"type": "n8n-nodes-base.googleSheets",
"position": [
976,
0
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "id",
"value": "SHEET_ID"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "DOC_ID"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "cd49e9b2-635e-46ad-aacf-f91d01eeeac8",
"name": "Send Thank You Email",
"type": "n8n-nodes-base.gmail",
"position": [
1184,
0
],
"parameters": {
"sendTo": "={{ $json.email }}",
"message": "=Hi {{ $json.name }},\n\nCongratulations on being recognized for your excellent work in {{ $json.dept }}! \nWe truly appreciate your contribution and dedication.\n\nKeep shining,\nHR Team \ud83c\udf1f\n",
"options": {},
"subject": "=Thank you for your amazing work, {{ $json.name }}!"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "3eb68a1d-4d46-4fa6-9486-4b53ca04dcb9",
"name": "Notify HR privately",
"type": "n8n-nodes-base.slack",
"position": [
1392,
0
],
"parameters": {
"text": "=\u2705 Recognition completed for {{ $json.name }} \nPosted to #general and sent thank-you email.\n",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "CHANNEL_ID"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "8290462d-2504-4be0-8bd9-a069ccb6067f",
"name": "Check if Email Sent Successfully",
"type": "n8n-nodes-base.if",
"position": [
1600,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "64e06d12-cba1-44f4-ad2f-67fa619d9378",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.gmail.status.toLowerCase }}",
"rightValue": "success"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "7f7481b6-b7a7-43e7-a22d-99fdbb7d2dec",
"name": "Alert HR if Email Fails",
"type": "n8n-nodes-base.slack",
"position": [
1808,
144
],
"parameters": {
"text": "=\u26a0\ufe0f Failed to send email to {{ $json.name }}. \nPlease check Gmail node or update manually.\n",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "CHANNEL_ID"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "9fb98a56-a9ab-4d6b-8d59-a1f6fe2ab937",
"name": "Update Row (Email Status)",
"type": "n8n-nodes-base.googleSheets",
"position": [
1808,
-160
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "810f8d54-e39d-4cc0-85e4-8171f486bc07",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
256
],
"parameters": {
"color": 5,
"width": 1136,
"height": 944,
"content": "# Employee Recognition Bot\n\n## Problem\n\nManually recognizing employees is inconsistent. HR often forgets to announce wins, send thank-you emails, or update sheets \u2014 hurting morale and culture.\n\n## Solution\n\nThis **n8n workflow automates recognition** from Google Sheets \u2192 Slack \u2192 Gmail.\nAdd a new entry in Google Sheets, and it will:\n\n* Announce it instantly in Slack\n* Send a personalized thank-you email\n* Update the sheet automatically\n\nZero manual work. 100% consistent recognition.\n\n## What It Does\n\n* Watches Google Sheets for new recognitions\n* Sends Slack announcements & thank-you emails\n* Marks each as \u201cAnnounced\u201d and \u201cEmail Sent\u201d\n* Notifies HR if any step fails\n* (Optional) Uses AI to write personalized messages\n\n## For Who\n\nHR teams, founders, or managers who want an **automated, zero-cost** way to boost morale and culture.\n\n## Setup (Simple)\n\n1. Create Google Sheet \u2192 `Name | Department | Reason | Date | Email | Status | EmailStatus`\n2. Connect Google Sheets, Slack, and Gmail in n8n\n3. Add your Slack channel and Gmail email template\n4. (Optional) Add OpenAI node for AI-written messages\n5. Activate workflow \u2192 Recognition runs on autopilot\n"
},
"typeVersion": 1
},
{
"id": "ed928903-f6dc-4dcf-bee2-a197fa5f7450",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-96
],
"parameters": {
"color": 3,
"height": 320,
"content": "## Trigger"
},
"typeVersion": 1
},
{
"id": "98d256e2-aa52-4d31-ae6a-d76df030a708",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-96
],
"parameters": {
"color": 3,
"width": 560,
"height": 320,
"content": "## Message Generator"
},
"typeVersion": 1
},
{
"id": "9752768e-604e-43cb-8e36-2b51fedfc70e",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
-96
],
"parameters": {
"color": 3,
"width": 816,
"height": 320,
"content": "## Notify"
},
"typeVersion": 1
},
{
"id": "88245e07-15be-4321-a8bc-a0701561a992",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1568,
-208
],
"parameters": {
"color": 3,
"width": 496,
"height": 544,
"content": "## Logging\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "d5c1fe07-cd45-4e77-97f5-3ccf0e5b09bd",
"connections": {
"New Row Added": {
"main": [
[
{
"node": "Format Employee Data",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate Personalized Message",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Notify HR privately": {
"main": [
[
{
"node": "Check if Email Sent Successfully",
"type": "main",
"index": 0
}
]
]
},
"Update Row (Status)": {
"main": [
[
{
"node": "Send Thank You Email",
"type": "main",
"index": 0
}
]
]
},
"Format Employee Data": {
"main": [
[
{
"node": "Generate Personalized Message",
"type": "main",
"index": 0
}
]
]
},
"Send Thank You Email": {
"main": [
[
{
"node": "Notify HR privately",
"type": "main",
"index": 0
}
]
]
},
"Post Message to #general": {
"main": [
[
{
"node": "Update Row (Status)",
"type": "main",
"index": 0
}
]
]
},
"Generate Personalized Message": {
"main": [
[
{
"node": "Post Message to #general",
"type": "main",
"index": 0
}
]
]
},
"Check if Email Sent Successfully": {
"main": [
[
{
"node": "Update Row (Email Status)",
"type": "main",
"index": 0
}
],
[
{
"node": "Alert HR if Email Fails",
"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.
gmailOAuth2googleSheetsOAuth2ApigoogleSheetsTriggerOAuth2ApiopenAiApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Turn employee recognition into an automated system.
Source: https://n8n.io/workflows/10222/ — 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.
Consultants, agencies, freelancers, and project managers who want to ensure proposals, emails, and tasks are followed up on time.
Automated Book Generation System. Uses googleSheetsTrigger, gmail, lmChatOpenAi, outputParserStructured. Event-driven trigger; 43 nodes.
Stop manually sending follow-ups. This workflow automates your entire cold email outreach with AI-powered personalization, smart scheduling, and automatic reply detection.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Gmail users report spending significant time manually sorting email, so this tool helps alleviate that burden. Gmail Trigger monitors unread emails every 2 minutes Once an email arrives, the content i