{
  "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
          }
        ]
      ]
    }
  }
}