{
  "workflow": {
    "id": 10106,
    "name": "Track employee attendance with analytics, email reports & Slack alerts using Google Sheets",
    "views": 202,
    "recentViews": 0,
    "totalViews": 202,
    "createdAt": "2025-10-24T07:16:44.738Z",
    "description": "Transform your attendance management with this enterprise-grade automated workflow featuring AI-powered analytics, multi-dimensional insights, and intelligent alerting. Running hourly, it integrates multiple data sources (attendance logs + employee master data), performs sophisticated statistical analysis, detects anomalies, generates department-specific insights, and delivers beautiful HTML reports via email and Slack. Get real-time visibility into attendance patterns, punctuality trends, and actionable alerts for HR, management, and department heads. 📊🎯✨\n\n## Good to Know\n* **Intelligent Scheduling**: Runs hourly but only sends management alerts when critical thresholds are breached\n* **Multi-Source Integration**: Combines attendance logs with employee master data for enriched context\n* **Smart Analytics**: Calculates attendance rate, punctuality rate, absenteeism rate, and department-wise metrics\n* **Conditional Routing**: Management emails are triggered only for high-priority alerts (no email fatigue!)\n* **Production-Ready**: Includes error handling, data validation, and comprehensive logging\n* **Scalable Design**: Handles multiple departments, shifts, and employee types efficiently\n\n### How It Works\n\n1. **Automated Trigger** – Runs hourly to monitor attendance with zero manual effort.\n2. **Dual Data Ingestion** – Fetches attendance and employee master data, then merges them for enriched analytics.\n3. **Advanced Analytics Engine** – Analyzes attendance, calculates key metrics, detects anomalies, and generates alerts.\n4. **Smart Conditional Routing** – Validates data, prioritizes alerts, and routes notifications via email, Slack, and database.\n5. **Rich Email Reports** – Sends visually formatted reports with metrics, alerts, and detailed employee breakdowns.\n6. **Slack Block Kit Integration** – Delivers structured, real-time attendance alerts with visual indicators to team channels.\n7. **Data Persistence & Logging** – Logs daily summaries, maintains audit trails, and prepares data for trend analysis dashboards.\n\n\n## How to Use\n\n### Basic Setup\n1. **Import the Workflow**: Copy JSON → n8n → Import from File\n2. **Configure Credentials**: Add Google Sheets, SMTP, and Slack credentials\n3. **Update Spreadsheet IDs**: Replace all placeholder sheet IDs with your actual Google Sheet IDs\n4. **Set Email Addresses**: Update sender and recipient email addresses\n5. **Configure Slack Channel**: Replace channel ID with your team's attendance channel\n6. **Test**: Execute workflow manually to verify connections\n7. **Activate**: Turn on the Schedule Trigger for hourly execution\n\n### Advanced Configuration\n* **Adjust Alert Thresholds**: Modify the 10% (late) and 15% (absent) thresholds in Analytics Engine\n* **Customize Email Design**: Edit HTML in Format Email node for brand alignment\n* **Add More Channels**: Extend with Microsoft Teams, Discord, or SMS notifications\n* **Enhance Analytics**: Add shift-specific analysis, contractor vs. full-time breakdowns\n* **Integrate BI Tools**: Enable Power BI push dataset for real-time dashboards\n\n## Requirements\n\n### Google Sheets Setup\n\n#### Sheet 1: AttendanceLogs\n| Column | Type | Description | Example |\n|--------|------|-------------|---------|\n| EmployeeID | Text | Unique employee identifier | EMP001 |\n| EmployeeName | Text | Full name | John Doe |\n| Date | Date | Attendance date (YYYY-MM-DD) | 2025-01-15 |\n| Status | Text | Present/Absent/Late/Leave/WFH/Half-Day | Present |\n| CheckInTime | Time | Arrival time (HH:MM) | 09:15 |\n| CheckOutTime | Time | Departure time (HH:MM) | 18:00 |\n| Notes | Text | Optional comments | Doctor appointment |\n\n#### Sheet 2: Employees (Master Data)\n| Column | Type | Description | Example |\n|--------|------|-------------|---------|\n| EmployeeID | Text | Unique identifier (matches AttendanceLogs) | EMP001 |\n| EmployeeName | Text | Full name | John Doe |\n| Department | Text | Department name | Engineering |\n| Manager | Text | Reporting manager name | Jane Smith |\n| Shift | Text | Day/Night/Evening | Day |\n| Email | Email | Work email address | john.doe@company.com |\n| ContractType | Text | Full-Time/Part-Time/Contract | Full-Time |\n\n#### Sheet 3: DailySummary (Auto-populated by workflow)\n| Column | Type | Description |\n|--------|------|-------------|\n| Date | Date | Report date |\n| Hour | Number | Hour of day (0-23) |\n| Present | Number | Present count |\n| Absent | Number | Absent count |\n| Late | Number | Late count |\n| AttendanceRate | Number | Attendance percentage |\n\n### Credentials Needed\n\n1. **Google Sheets OAuth2 API**\n   - Enable Google Sheets API in Google Cloud Console\n   - Create service account credentials\n   - Share all 3 sheets with service account email\n\n2. **SMTP Email Account**\n   - Gmail: Enable \"App Passwords\" in Google Account settings\n   - Or use company SMTP server details\n   - Requires: Host, Port (587), Username, Password\n\n3. **Slack Bot Token**\n   - Create Slack App at api.slack.com/apps\n   - Enable permissions: `chat:write`, `chat:write.public`\n   - Install app to workspace\n   - Copy Bot User OAuth Token (starts with `xoxb-`)\n   - Invite bot to target channel\n\n### Placeholder Values to Replace\n\n| Placeholder | Where to Find | Example |\n|-------------|---------------|---------|\n| `YOUR_ATTENDANCE_SPREADSHEET_ID` | Google Sheets URL | 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms |\n| `YOUR_EMPLOYEE_SPREADSHEET_ID` | Google Sheets URL | 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms |\n| `YOUR_SUMMARY_SPREADSHEET_ID` | Google Sheets URL | 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms |\n| `C12345678` | Slack → Right-click channel → Copy link → Extract ID | C05XXXXXXXX |\n| `hr@company.com` | Your HR email | hr@yourcompany.com |\n| `management@company.com` | Management distribution list | leadership@yourcompany.com |\n\n## Customizing This Workflow\n\n### Modify Alert Thresholds\nIn the **Analytics Engine** node, find these lines:\n```javascript\nconst lateThreshold = metrics.totalEmployees * 0.1; // Change 0.1 to 0.15 for 15%\nconst absentThreshold = metrics.totalEmployees * 0.15; // Change to 0.20 for 20%\n```\n\n### Add New Status Types\nIn the **Analytics Engine** node, add to the switch statement:\n```javascript\ncase 'Remote':\n  statusCount.remote++;\n  break;\n```\n\n### Customize Email Template\nIn the **Format Email** node, modify the `emailHtml` variable:\n- Change gradient colors in the header div\n- Add company logo: `<img src=\"https://yourcompany.com/logo.png\" />`\n- Adjust grid columns: `grid-template-columns: repeat(5, 1fr);`\n\n### Add SMS Notifications\n1. Add **Twilio** or **Vonage** node after \"Critical Alerts\"\n2. Send to on-call manager for high-severity alerts\n3. Use message: `🚨 ${data.absent} employees absent today. Review required.`\n\n### Multi-Location Support\nModify **Analytics Engine** to group by `Location` field:\n```javascript\nconst locationMetrics = {};\ntodayRecords.forEach(record =&gt; {\n  const location = employee.location;\n  if (!locationMetrics[location]) {\n    locationMetrics[location] = { present: 0, absent: 0, late: 0 };\n  }\n  // ... aggregate by location\n});\n```\n\n### Shift-Specific Analysis\nAdd logic to compare check-in times against shift schedules:\n```javascript\nconst shiftTimes = {\n  'Day': '09:00',\n  'Night': '21:00',\n  'Evening': '14:00'\n};\nconst expectedTime = shiftTimes[employee.shift];\n```\n\n### Integration with HR Systems\nAdd **HTTP Request** node to push data to:\n- **Workday**: POST attendance records via REST API\n- **BambooHR**: Update employee time-off balances\n- **ADP**: Sync payroll-related attendance data\n- **SAP SuccessFactors**: Update time management module\n\n### Advanced Analytics\nAdd **Python** or **R** nodes for:\n- **Predictive Analytics**: ML models to predict absence patterns\n- **Sentiment Analysis**: Correlate attendance with employee surveys\n- **Seasonality Detection**: Identify patterns (Monday blues, pre-holiday trends)\n- **Correlation Analysis**: Link attendance with project deadlines, weather, events\n\n### Dashboard Integration\nExport data to visualization platforms:\n- **Power BI**: Use HTTP Request node to push to streaming dataset\n- **Tableau**: Write to database (PostgreSQL, MySQL) via Execute Query node\n- **Grafana**: Store in InfluxDB time-series database\n- **Custom Dashboard**: Build React app that reads from DailySummary sheet\n\n## Troubleshooting\n\n### Common Issues\n\n**\"Could not find node\"**\n- Ensure all data sources are fetched before Analytics Engine runs\n- Check node names match exactly in `$('Node Name').all()` syntax\n\n**\"No records found\"**\n- Verify Date column format is `YYYY-MM-DD` in Google Sheets\n- Check timezone settings in Schedule Trigger vs. Sheet locale\n- Confirm EmployeeID values match between AttendanceLogs and Employees sheets\n\n**\"Email not sending\"**\n- Verify SMTP credentials are correct\n- Check if \"Critical Alerts?\" condition is being met\n- Test email node independently with static data\n\n**\"Slack message failed\"**\n- Ensure bot is invited to the target channel\n- Verify channel ID format (starts with C, not # symbol)\n- Check bot has `chat:write` permission scope\n\n## Performance Optimization\n\n- **Large Datasets (&gt;1000 employees)**: Add pagination in Google Sheets fetch\n- **Multiple Departments**: Run parallel branches for each department\n- **Historical Analysis**: Schedule separate weekly/monthly summary workflows\n- **Reduce API Calls**: Cache employee master data in workflow static data\n\n## Security Best Practices\n\n- ✅ Use service account credentials (not personal OAuth)\n- ✅ Restrict sheet access to service account only\n- ✅ Store credentials in n8n credential store (encrypted)\n- ✅ Enable 2FA on all integrated accounts\n- ✅ Audit logs regularly for unauthorized access\n- ✅ Use HTTPS for all external API calls\n\n**Discover more workflows – [Get in touch with us](https://www.oneclickitsolution.com/contact-us/)**",
    "workflow": {
      "id": "QaExWEuXV0wzelZO",
      "meta": {
        "instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
        "templateCredsSetupCompleted": true
      },
      "name": "Employee Attendance Tracker with Daily Summary",
      "tags": [],
      "nodes": [
        {
          "id": "0e4bdcc5-f1e5-4bcd-8ebb-9345a564c334",
          "name": "Schedule Trigger",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            -1440,
            0
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "hours"
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "5f2a24aa-5e38-4296-8071-0c7630cc61fc",
          "name": "Fetch Attendance Records",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            -1216,
            -96
          ],
          "parameters": {
            "options": {},
            "sheetName": {
              "__rl": true,
              "mode": "name",
              "value": "AttendanceLogs"
            },
            "documentId": {
              "__rl": true,
              "mode": "id",
              "value": "YOUR_ATTENDANCE_SPREADSHEET_ID"
            },
            "authentication": "serviceAccount"
          },
          "credentials": {
            "googleApi": {
              "id": "credential-id",
              "name": "googleApi Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "0d136a8a-09d5-41bc-a74f-fe6e14a5686a",
          "name": "Fetch Employee Master Data",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            -1216,
            96
          ],
          "parameters": {
            "options": {},
            "sheetName": {
              "__rl": true,
              "mode": "name",
              "value": "Employees"
            },
            "documentId": {
              "__rl": true,
              "mode": "id",
              "value": "YOUR_EMPLOYEE_SPREADSHEET_ID"
            },
            "authentication": "serviceAccount"
          },
          "credentials": {
            "googleApi": {
              "id": "credential-id",
              "name": "googleApi Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "7a72aa69-8c3d-472c-86d6-b04b4dfa0913",
          "name": "Analytics Engine",
          "type": "n8n-nodes-base.code",
          "position": [
            -992,
            0
          ],
          "parameters": {
            "jsCode": "const attendanceData = $('Fetch Attendance Records').all();\nconst employeeData = $('Fetch Employee Master Data').all();\nconst now = new Date();\nconst today = now.toISOString().split('T')[0];\nconst currentHour = now.getHours();\n\nconst employeeMap = {};\nemployeeData.forEach(emp => {\n  employeeMap[emp.json.EmployeeID] = {\n    name: emp.json.EmployeeName,\n    department: emp.json.Department,\n    manager: emp.json.Manager,\n    shift: emp.json.Shift || 'Day',\n    email: emp.json.Email\n  };\n});\n\nconst todayRecords = attendanceData.filter(item => item.json.Date === today);\n\nconst statusCount = {\n  present: 0,\n  absent: 0,\n  late: 0,\n  leave: 0,\n  wfh: 0\n};\n\nconst statusLists = {\n  late: [],\n  absent: [],\n  wfh: []\n};\n\nconst deptMetrics = {};\n\ntodayRecords.forEach(record => {\n  const empId = record.json.EmployeeID;\n  const status = record.json.Status;\n  const checkIn = record.json.CheckInTime;\n  const employee = employeeMap[empId];\n  \n  if (!employee) return;\n  \n  const dept = employee.department;\n  if (!deptMetrics[dept]) {\n    deptMetrics[dept] = { present: 0, absent: 0, late: 0, total: 0 };\n  }\n  \n  deptMetrics[dept].total++;\n  \n  switch(status) {\n    case 'Present':\n      statusCount.present++;\n      deptMetrics[dept].present++;\n      break;\n    case 'Absent':\n      statusCount.absent++;\n      deptMetrics[dept].absent++;\n      statusLists.absent.push({ name: employee.name, department: dept, manager: employee.manager });\n      break;\n    case 'Late':\n      statusCount.late++;\n      deptMetrics[dept].late++;\n      statusLists.late.push({ name: employee.name, department: dept, checkIn: checkIn || 'N/A', lateBy: '15 min' });\n      break;\n    case 'Leave':\n      statusCount.leave++;\n      break;\n    case 'WFH':\n      statusCount.wfh++;\n      statusLists.wfh.push({ name: employee.name, department: dept });\n      break;\n  }\n});\n\nconst totalEmployees = Object.keys(employeeMap).length;\nconst activeEmployees = statusCount.present + statusCount.absent + statusCount.late;\nconst attendanceRate = activeEmployees > 0 ? ((statusCount.present + statusCount.late) / activeEmployees * 100).toFixed(2) : 0;\nconst punctualityRate = (statusCount.present + statusCount.late) > 0 ? (statusCount.present / (statusCount.present + statusCount.late) * 100).toFixed(2) : 0;\n\nconst alerts = [];\nif (statusCount.late > totalEmployees * 0.1) {\n  alerts.push({ type: 'warning', severity: 'medium', message: `High tardiness: ${statusCount.late} employees late`, action: 'Review shift timings' });\n}\n\nif (statusCount.absent > totalEmployees * 0.15) {\n  alerts.push({ type: 'alert', severity: 'high', message: `High absence rate: ${statusCount.absent} employees absent`, action: 'Investigate issues' });\n}\n\nreturn {\n  date: today,\n  timestamp: now.toISOString(),\n  hour: currentHour,\n  totalEmployees: totalEmployees,\n  recordsProcessed: todayRecords.length,\n  present: statusCount.present,\n  absent: statusCount.absent,\n  late: statusCount.late,\n  onLeave: statusCount.leave,\n  wfh: statusCount.wfh,\n  attendanceRate: parseFloat(attendanceRate),\n  punctualityRate: parseFloat(punctualityRate),\n  absenteeismRate: parseFloat(((statusCount.absent / totalEmployees) * 100).toFixed(2)),\n  lateEmployees: statusLists.late,\n  absentEmployees: statusLists.absent,\n  wfhEmployees: statusLists.wfh,\n  departmentBreakdown: deptMetrics,\n  alerts: alerts,\n  alertCount: alerts.length,\n  hasHighPriorityAlerts: alerts.some(a => a.severity === 'high'),\n  shouldNotifyManagement: alerts.length > 0 || statusCount.absent > 5\n};"
          },
          "typeVersion": 2
        },
        {
          "id": "7651642d-6966-49bd-b503-7b57369026d2",
          "name": "Records Available",
          "type": "n8n-nodes-base.if",
          "position": [
            -768,
            0
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "number": [
                {
                  "value1": "={{ $json.recordsProcessed }}",
                  "value2": 0,
                  "operation": "larger"
                }
              ]
            }
          },
          "typeVersion": 2
        },
        {
          "id": "bc5e3d2a-5946-4223-af9a-696f54b79828",
          "name": "Critical Alerts",
          "type": "n8n-nodes-base.if",
          "position": [
            -544,
            -192
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "boolean": [
                {
                  "value1": "={{ $json.shouldNotifyManagement }}",
                  "value2": true
                }
              ]
            }
          },
          "typeVersion": 2
        },
        {
          "id": "36732aa7-c12f-4af0-acfe-e94b4f64b5ca",
          "name": "Format Email",
          "type": "n8n-nodes-base.code",
          "position": [
            -320,
            -192
          ],
          "parameters": {
            "jsCode": "const data = $input.first().json;\n\nconst alertsHtml = data.alerts.length > 0 ? `\n  <div style=\"background: #fff3cd; border-left: 4px solid #ffc107; padding: 15px; margin: 20px 0;\">\n    <h3 style=\"color: #856404; margin-top: 0;\">⚠️ Alerts</h3>\n    ${data.alerts.map(alert => `<div style=\"margin: 10px 0;\"><strong>${alert.severity.toUpperCase()}</strong>: ${alert.message}</div>`).join('')}\n  </div>\n` : '';\n\nconst emailHtml = `\n<html>\n<body style=\"font-family: Arial, sans-serif; padding: 20px;\">\n  <div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center;\">\n    <h1>📊 Daily Attendance Report</h1>\n    <p>${data.date} • ${data.hour}:00</p>\n  </div>\n  <div style=\"padding: 20px;\">\n    ${alertsHtml}\n    <div style=\"display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; margin: 20px 0;\">\n      <div style=\"background: #e8f5e9; padding: 20px; text-align: center;\">\n        <div style=\"font-size: 32px; font-weight: bold; color: #2e7d32;\">${data.present}</div>\n        <div>✅ Present</div>\n      </div>\n      <div style=\"background: #fff3e0; padding: 20px; text-align: center;\">\n        <div style=\"font-size: 32px; font-weight: bold; color: #e65100;\">${data.late}</div>\n        <div>⏰ Late</div>\n      </div>\n      <div style=\"background: #ffebee; padding: 20px; text-align: center;\">\n        <div style=\"font-size: 32px; font-weight: bold; color: #c62828;\">${data.absent}</div>\n        <div>❌ Absent</div>\n      </div>\n      <div style=\"background: #e3f2fd; padding: 20px; text-align: center;\">\n        <div style=\"font-size: 32px; font-weight: bold; color: #1565c0;\">${data.onLeave}</div>\n        <div>🏖️ Leave</div>\n      </div>\n    </div>\n    <h3>📈 Key Metrics</h3>\n    <p><strong>Attendance Rate:</strong> ${data.attendanceRate}%</p>\n    <p><strong>Punctuality Rate:</strong> ${data.punctualityRate}%</p>\n    <p><strong>Total Employees:</strong> ${data.totalEmployees}</p>\n  </div>\n</body>\n</html>\n`;\n\nreturn {\n  ...data,\n  emailHtml: emailHtml,\n  emailSubject: `${data.hasHighPriorityAlerts ? '🚨 URGENT: ' : '📊'} Attendance Report - ${data.date}`\n};"
          },
          "typeVersion": 2
        },
        {
          "id": "c6b97279-622c-479a-94b9-7591ac89b885",
          "name": "Send Email",
          "type": "n8n-nodes-base.emailSend",
          "position": [
            -96,
            -192
          ],
          "webhookId": "a887bf69-69cb-4199-813b-eea241a81965",
          "parameters": {
            "options": {},
            "subject": "={{ $json.emailSubject }}",
            "toEmail": "user@example.com",
            "fromEmail": "user@example.com"
          },
          "credentials": {
            "smtp": {
              "id": "credential-id",
              "name": "smtp Credential"
            }
          },
          "typeVersion": 2.1
        },
        {
          "id": "674e5e0a-3f26-4980-be64-aeaf1cdc4b48",
          "name": "Format Slack",
          "type": "n8n-nodes-base.code",
          "position": [
            -544,
            0
          ],
          "parameters": {
            "jsCode": "const data = $input.first().json;\n\nconst lateList = data.lateEmployees.length > 0 ? data.lateEmployees.slice(0, 5).map(e => `• ${e.name} (${e.department})`).join('\\n') : 'None';\nconst absentList = data.absentEmployees.length > 0 ? data.absentEmployees.slice(0, 5).map(e => `• ${e.name} (${e.department})`).join('\\n') : 'None';\n\nconst blocks = [\n  {\n    type: \"header\",\n    text: { type: \"plain_text\", text: `📊 Attendance Report - ${data.date}`, emoji: true }\n  },\n  {\n    type: \"section\",\n    fields: [\n      { type: \"mrkdwn\", text: `*✅ Present*\\n${data.present}` },\n      { type: \"mrkdwn\", text: `*⏰ Late*\\n${data.late}` },\n      { type: \"mrkdwn\", text: `*❌ Absent*\\n${data.absent}` },\n      { type: \"mrkdwn\", text: `*🏖️ Leave*\\n${data.onLeave}` }\n    ]\n  },\n  { type: \"divider\" },\n  {\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*⏰ Late Arrivals*\\n${lateList}` }\n  },\n  {\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*❌ Absences*\\n${absentList}` }\n  }\n];\n\nreturn { ...data, slackBlocks: blocks };"
          },
          "typeVersion": 2
        },
        {
          "id": "39c44862-38ad-4c32-aa12-c55f1a3d1de6",
          "name": "Post to Slack",
          "type": "n8n-nodes-base.slack",
          "position": [
            -320,
            0
          ],
          "webhookId": "6549ed3c-d1f9-4ec9-b74c-d7469709511e",
          "parameters": {
            "text": "=Daily Attendance Report",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "id",
              "value": "C12345678"
            },
            "otherOptions": {}
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "69043dab-0525-462b-b2de-12ce885def34",
          "name": "Log Summary",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            -544,
            192
          ],
          "parameters": {
            "columns": {
              "value": {},
              "schema": [],
              "mappingMode": "autoMapInputData",
              "matchingColumns": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "append",
            "sheetName": {
              "__rl": true,
              "mode": "name",
              "value": "DailySummary"
            },
            "documentId": {
              "__rl": true,
              "mode": "id",
              "value": "YOUR_SUMMARY_SPREADSHEET_ID"
            },
            "authentication": "serviceAccount"
          },
          "credentials": {
            "googleApi": {
              "id": "credential-id",
              "name": "googleApi Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "b2f9027b-2c48-4e26-b175-081ee2fc73ea",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1472,
            -160
          ],
          "parameters": {
            "color": 3,
            "width": 150,
            "height": 288,
            "content": "Runs hourly to monitor attendance with zero manual effort."
          },
          "typeVersion": 1
        },
        {
          "id": "1cda22e2-28de-40fa-b380-80264166deb3",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1280,
            -224
          ],
          "parameters": {
            "color": 3,
            "width": 416,
            "height": 464,
            "content": "Fetches attendance and employee master data, then merges them for enriched analytics and analyzes attendance, calculates key metrics, detects anomalies, and generates alerts."
          },
          "typeVersion": 1
        },
        {
          "id": "e2fbe0c6-3e13-4509-a6cc-f941376979ae",
          "name": "Sticky Note3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -816,
            -304
          ],
          "parameters": {
            "color": 3,
            "width": 448,
            "height": 656,
            "content": "Validates data, prioritizes alerts, and routes notifications via email, Slack, and database and logs daily summaries, maintains audit trails, and prepares data for trend analysis dashboards."
          },
          "typeVersion": 1
        },
        {
          "id": "1dbde325-390a-4164-9e64-84f67fc6c1c8",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -352,
            -320
          ],
          "parameters": {
            "color": 3,
            "width": 416,
            "height": 464,
            "content": "Sends visually formatted reports with metrics, alerts, and detailed employee breakdowns."
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "ea71b953-3354-4852-af6f-5708906566fb",
      "connections": {
        "Format Email": {
          "main": [
            [
              {
                "node": "Send Email",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Format Slack": {
          "main": [
            [
              {
                "node": "Post to Slack",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Critical Alerts": {
          "main": [
            [
              {
                "node": "Format Email",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Analytics Engine": {
          "main": [
            [
              {
                "node": "Records Available",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Schedule Trigger": {
          "main": [
            [
              {
                "node": "Fetch Attendance Records",
                "type": "main",
                "index": 0
              },
              {
                "node": "Fetch Employee Master Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Records Available": {
          "main": [
            [
              {
                "node": "Critical Alerts",
                "type": "main",
                "index": 0
              },
              {
                "node": "Format Slack",
                "type": "main",
                "index": 0
              },
              {
                "node": "Log Summary",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Fetch Attendance Records": {
          "main": [
            [
              {
                "node": "Analytics Engine",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Fetch Employee Master Data": {
          "main": [
            [
              {
                "node": "Analytics Engine",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 15,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 2
        },
        "n8n-nodes-base.code": {
          "count": 3
        },
        "n8n-nodes-base.slack": {
          "count": 1
        },
        "n8n-nodes-base.emailSend": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 4
        },
        "n8n-nodes-base.googleSheets": {
          "count": 3
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Oneclick AI Squad",
      "username": "oneclick-ai",
      "bio": "The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations  from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.",
      "verified": true,
      "links": [
        "https://www.oneclickitsolution.com/"
      ],
      "avatar": "https://gravatar.com/avatar/848fca91367142f65f9e5c55d64e5c9952b160d7b060d103b52aa343c6bc7b3d?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 11,
        "icon": "fa:envelope",
        "name": "n8n-nodes-base.emailSend",
        "codex": {
          "data": {
            "alias": [
              "SMTP",
              "email",
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/sendemail/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Send Email",
          "color": "#00bb88"
        },
        "iconData": {
          "icon": "envelope",
          "type": "icon"
        },
        "displayName": "Send Email",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 18,
        "icon": "file:googleSheets.svg",
        "name": "n8n-nodes-base.googleSheets",
        "codex": {
          "data": {
            "alias": [
              "CSV",
              "Sheet",
              "Spreadsheet",
              "GS"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/",
                  "icon": "❤️",
                  "label": "Love at first sight: Ricardo’s n8n journey"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/",
                  "icon": "⏲",
                  "label": "Creating triggers for n8n workflows using polling"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/",
                  "icon": "📈",
                  "label": "Migrating Community Metrics to Orbit using n8n"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/",
                  "icon": "🍔",
                  "label": "How Honest Burgers Use Automation to Save $100k per year"
                },
                {
                  "url": "https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/",
                  "icon": "💻",
                  "label": "How a digital strategist uses n8n for online marketing"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Data & Storage",
              "Productivity"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\",\"output\"]",
        "defaults": {
          "name": "Google Sheets"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="
        },
        "displayName": "Google Sheets",
        "typeVersion": 5,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          },
          {
            "id": 4,
            "name": "Productivity"
          }
        ]
      },
      {
        "id": 20,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.if",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "Filter",
              "Condition",
              "Logic",
              "Boolean",
              "Branch"
            ],
            "details": "The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "If",
          "color": "#408000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "If",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 40,
        "icon": "file:slack.svg",
        "name": "n8n-nodes-base.slack",
        "codex": {
          "data": {
            "alias": [
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                },
                {
                  "url": "https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/slack/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Slack"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Slack",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 839,
        "icon": "fa:clock",
        "name": "n8n-nodes-base.scheduleTrigger",
        "codex": {
          "data": {
            "alias": [
              "Time",
              "Scheduler",
              "Polling",
              "Cron",
              "Interval"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\",\"schedule\"]",
        "defaults": {
          "name": "Schedule Trigger",
          "color": "#31C49F"
        },
        "iconData": {
          "icon": "clock",
          "type": "icon"
        },
        "displayName": "Schedule Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 17,
        "name": "HR"
      }
    ],
    "image": []
  }
}