{
  "workflow": {
    "id": 7042,
    "name": "Student absence alerts via email & WhatsApp with attendance tracking",
    "views": 856,
    "recentViews": 0,
    "totalViews": 856,
    "createdAt": "2025-08-06T08:40:41.583Z",
    "description": "## 📘 Student Absence Alerts & Attendance Tracking Automation\n\nAutomatically alerts parents about student absences and tracks 30-day attendance patterns to identify risks and trends.\n\n\n## 🔧 Main Components\n\n* **Daily Attendance Check – 10:30 AM**\n  Triggers the workflow every day at 10:30 AM.\n\n* **Read Today’s Attendance**\n  Retrieves current-day attendance records from the source Excel or database.\n\n* **Read Student Contacts**\n  Reads contact details (email, phone) of students for alert delivery.\n\n* **Process Absent Students**\n  Identifies students who are absent and unexcused for the day.\n\n* **Prepare Absence Email**\n  Generates customized email content for absent students.\n\n* **Send Absence Email**\n  Sends an absence alert email to the student’s parent/guardian.\n\n* **Prepare Absence SMS**\n  Formats WhatsApp-friendly message for alerts.\n\n* **Send Absence WhatsApp**\n  Sends the WhatsApp message using API (e.g., Facebook Graph).\n\n* **Generate Attendance Report**\n  Prepares a daily attendance summary with absence level classifications.\n\n* **Save Attendance Report**\n  Appends the generated report to a historical attendance sheet.\n\n\n## ⚠️ Alert Logic\n\nBased on the past 30-day absence pattern, the system classifies students into:\n\n| Level     | Absences in 30 Days | Status         |\n| --------- | ------------------- | -------------- |\n| 🔴 High   | 5+                  | Critical Alert |\n| 🟡 Medium | 3–4                 | Warning        |\n| 🟢 Low    | 1–2                 | Low Risk       |\n\n\n## 📊 Tracking Features\n\n* 🔢 **Attendance Rate Calculation** – Tracks each student's attendance percentage\n* 🔍 **Pattern Analysis** – Detects recurring absenteeism trends\n* 🚨 **Risk Identification** – Flags high-risk students for early intervention\n* 📈 **Historical Reporting** – Maintains daily logs for future reference\n\n\n## ✅ Essential Prerequisites\n\n* Excel sheet or database with daily attendance logs\n* Excel sheet or database with student contact details\n* SMTP credentials for sending emails\n* WhatsApp API integration (e.g., Facebook Graph or Twilio)\n* Storage access for saving attendance reports\n\n\n## 📁 Required Excel File Structures\n\n### Attendance Sheet (`daily_attendance.xlsx`)\n\n| Student ID | Date       | Status |\n| ---------- | ---------- | ------ |\n| ST101      | 2025-08-06 | Absent |\n\n### Contacts Sheet (`student_contacts.xlsx`)\n\n| Student ID | Name       | Email                                         | Phone         |\n| ---------- | ---------- | --------------------------------------------- | ------------- |\n| ST101      | Aryan Shah | [aryan@example.com](mailto:aryan@example.com) | +919123456789 |\n\n\n## 🧾 Expected Input Format Example\n\n```json\n{\n  \"studentId\": \"ST101\",\n  \"name\": \"Aryan Shah\",\n  \"email\": \"aryan@example.com\",\n  \"phone\": \"+919123456789\",\n  \"status\": \"Absent\",\n  \"date\": \"2025-08-06\"\n}\n```\n\n\n## 🚀 Key Features\n\n* ⏰ **Scheduled Daily Execution** – Automated tracking at 10:30 AM\n* ✉️ **Multi-Channel Notifications** – Email + WhatsApp alerts to parents\n* 📊 **Absence Pattern Monitoring** – 30-day trend analysis\n* 🧠 **Risk-Based Alerts** – Smart classification into alert levels\n* 🗂️ **Daily Reports** – Easy to audit attendance summary logs\n\n\n## ⚙️ Quick Setup Guide\n\n1. **Import Workflow JSON** into n8n.\n2. Configure schedule trigger at 10:30 AM.\n3. Set Excel file paths in \"Read Today’s Attendance\" and \"Read Student Contacts\".\n4. Customize absence thresholds in the “Process Absent Students” node.\n5. Add SMTP details for the “Send Absence Email” node.\n6. Integrate WhatsApp API in the “Send Absence WhatsApp” node.\n7. Test with mock data and review reports.\n8. Activate the workflow.\n\n\n## 🔧 Parameters to Configure\n\n| Parameter              | Description                            |\n| ---------------------- | -------------------------------------- |\n| `attendance_file_path` | Path to today's attendance records     |\n| `contacts_file_path`   | Path to student contacts sheet         |\n| `smtp_user`            | Email username for SMTP server         |\n| `smtp_password`        | Password for SMTP server               |\n| `whatsapp_api_url`     | Endpoint for sending WhatsApp messages |\n| `alert_thresholds`     | Absence count thresholds for alerts    |\n\n\n",
    "workflow": {
      "id": "2IRMZQsCHLw3s6RW",
      "meta": {
        "instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
        "templateCredsSetupCompleted": true
      },
      "name": "Student Absence Alerts & Attendance Tracking Automation",
      "tags": [],
      "nodes": [
        {
          "id": "50cc2f6f-e04f-4852-9b42-1247f72995ab",
          "name": "Daily Attendance Check - 10:30 AM",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            40,
            500
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "triggerAtHour": 10,
                  "triggerAtMinute": 30
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "9bb5b16b-c820-4c62-aec5-56588dc1fdb8",
          "name": "Read Today's Attendance",
          "type": "n8n-nodes-base.microsoftExcel",
          "position": [
            260,
            400
          ],
          "parameters": {
            "filters": {
              "fields": [
                {
                  "value": "={{new Date().toISOString().split('T')[0]}}",
                  "column": "Date"
                }
              ]
            },
            "resource": "worksheet",
            "workbook": {
              "__rl": true,
              "mode": "id",
              "value": "=attendance-workbook"
            }
          },
          "credentials": {
            "microsoftExcelOAuth2Api": {
              "id": "credential-id",
              "name": "microsoftExcelOAuth2Api Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "64bec200-5b08-45be-ba98-0a810910dce5",
          "name": "Read Student Contacts",
          "type": "n8n-nodes-base.microsoftExcel",
          "position": [
            260,
            600
          ],
          "parameters": {
            "filters": {},
            "resource": "worksheet",
            "workbook": {
              "__rl": true,
              "mode": "id",
              "value": "=student-records-workbook"
            }
          },
          "credentials": {
            "microsoftExcelOAuth2Api": {
              "id": "credential-id",
              "name": "microsoftExcelOAuth2Api Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "abfdb5ea-24d9-4f08-8150-0f8c7258f829",
          "name": "Process Absent Students",
          "type": "n8n-nodes-base.code",
          "position": [
            480,
            500
          ],
          "parameters": {
            "jsCode": "const attendanceRecords = $('Read Today\\'s Attendance').all();\nconst studentContacts = $('Read Student Contacts').all();\n\nconst absentStudents = [];\nconst today = new Date().toISOString().split('T')[0];\n\nfor (const record of attendanceRecords) {\n  const attendance = record.json;\n  \n  if (attendance.status === 'Absent' && !attendance.excused) {\n    const student = studentContacts.find(s => s.json.studentId === attendance.studentId);\n    \n    if (student) {\n      const studentData = student.json;\n      \n      // Calculate recent absence pattern (last 30 days)\n      const recentAbsences = attendanceRecords.filter(r => {\n        const recordDate = new Date(r.json.date);\n        const thirtyDaysAgo = new Date();\n        thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);\n        return r.json.studentId === attendance.studentId && \n               r.json.status === 'Absent' && \n               recordDate >= thirtyDaysAgo;\n      }).length;\n      \n      absentStudents.push({\n        studentId: attendance.studentId,\n        studentName: studentData.studentName,\n        className: studentData.className,\n        parentName: studentData.parentName,\n        parentEmail: studentData.parentEmail,\n        parentPhone: studentData.parentPhone,\n        absentDate: today,\n        recentAbsences: recentAbsences,\n        attendanceRate: Math.round(((30 - recentAbsences) / 30) * 100),\n        alertLevel: recentAbsences >= 5 ? 'High' : recentAbsences >= 3 ? 'Medium' : 'Low'\n      });\n    }\n  }\n}\n\nreturn absentStudents.map(item => ({ json: item }));"
          },
          "typeVersion": 2
        },
        {
          "id": "d4606ae7-8ac2-4648-bf59-caa601ac1b22",
          "name": "Prepare Absence Email",
          "type": "n8n-nodes-base.code",
          "position": [
            700,
            300
          ],
          "parameters": {
            "jsCode": "const studentData = $input.first().json;\n\nconst alertIcon = studentData.alertLevel === 'High' ? '🚨' : studentData.alertLevel === 'Medium' ? '⚠️' : 'ℹ️';\n\nconst emailSubject = `${alertIcon} Absence Alert: ${studentData.studentName} - ${studentData.absentDate}`;\nconst emailBody = `Dear ${studentData.parentName},\n\nWe are writing to inform you that ${studentData.studentName} was marked absent today (${studentData.absentDate}).\n\nAttendance Summary:\n- Student: ${studentData.studentName}\n- Class: ${studentData.className}\n- Absent Date: ${studentData.absentDate}\n- Recent Absences (30 days): ${studentData.recentAbsences}\n- Attendance Rate: ${studentData.attendanceRate}%\n- Alert Level: ${studentData.alertLevel}\n\n${studentData.alertLevel === 'High' ? \n  '⚠️ ATTENTION: Your child has exceeded the acceptable absence limit. Please contact the school office immediately to discuss this matter.' :\n  studentData.alertLevel === 'Medium' ? \n  '📋 NOTICE: Your child\\'s attendance needs attention. Please ensure regular attendance to avoid academic impact.' :\n  '📝 INFORMATION: This is a routine absence notification. Please ensure your child attends school regularly.'}\n\nIf this absence was due to illness or other valid reason, please contact the school office with appropriate documentation.\n\nFor attendance concerns, contact: user@example.com or (555) 123-4567\n\nBest regards,\nSchool Attendance Office`;\n\nreturn [{\n  json: {\n    to: studentData.parentEmail,\n    subject: emailSubject,\n    body: emailBody,\n    studentName: studentData.studentName,\n    parentName: studentData.parentName,\n    alertLevel: studentData.alertLevel\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "902d1502-2d1e-43d0-b41f-4b2ce68298ac",
          "name": "Prepare Absence SMS",
          "type": "n8n-nodes-base.code",
          "position": [
            700,
            700
          ],
          "parameters": {
            "jsCode": "const studentData = $input.first().json;\n\nconst alertEmoji = studentData.alertLevel === 'High' ? '🚨' : studentData.alertLevel === 'Medium' ? '⚠️' : '📋';\n\nconst whatsappMessage = `${alertEmoji} *Absence Alert*\\n\\nDear ${studentData.parentName},\\n\\n👤 Student: *${studentData.studentName}*\\n🏫 Class: ${studentData.className}\\n📅 Absent Date: ${studentData.absentDate}\\n\\n📊 *Attendance Summary:*\\n• Recent Absences (30 days): ${studentData.recentAbsences}\\n• Attendance Rate: ${studentData.attendanceRate}%\\n• Alert Level: *${studentData.alertLevel}*\\n\\n${studentData.alertLevel === 'High' ? \n  '🚨 *URGENT:* Please contact school office immediately regarding excessive absences.' :\n  studentData.alertLevel === 'Medium' ? \n  '⚠️ *ATTENTION:* Please ensure regular attendance to avoid academic impact.' :\n  '📝 *NOTICE:* Routine absence notification. Please ensure regular attendance.'}\n\nIf excused, please contact school office with documentation.\\n\\n📞 Contact: (555) 123-4567\\n📧 user@example.com\\n\\n_School Attendance Office_`;\n\nreturn [{\n  json: {\n    phone: studentData.parentPhone,\n    message: whatsappMessage,\n    studentName: studentData.studentName,\n    parentName: studentData.parentName,\n    alertLevel: studentData.alertLevel\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "14d0d2c1-9082-4ba6-ab6f-cccefb2b7b35",
          "name": "Send Absence Email",
          "type": "n8n-nodes-base.emailSend",
          "position": [
            920,
            300
          ],
          "webhookId": "58f2f75e-edd7-48dc-b2d1-605f31c45e77",
          "parameters": {
            "text": "={{$json.body}}",
            "options": {},
            "subject": "={{$json.subject}}",
            "toEmail": "={{$json.to}}",
            "fromEmail": "user@example.com",
            "emailFormat": "text"
          },
          "credentials": {
            "smtp": {
              "id": "credential-id",
              "name": "smtp Credential"
            }
          },
          "typeVersion": 2.1
        },
        {
          "id": "0fabc892-b164-4a89-bf2c-41474484e012",
          "name": "Send Absence WhatsApp",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            920,
            700
          ],
          "parameters": {
            "url": "https://graph.facebook.com/v17.0/FROM_PHONE_NUMBER_ID/messages",
            "options": {},
            "jsonBody": "={\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"{{ $json.phone }}\",\n  \"type\": \"text\",\n  \"text\": {\n    \"body\": \"{{ $json.message }}\"\n  }\n}",
            "sendBody": true,
            "sendHeaders": true,
            "specifyBody": "json",
            "headerParameters": {
              "parameters": [
                {
                  "name": "Authorization",
                  "value": "Bearer YOUR_TOKEN_HERE"
                },
                {
                  "name": "Content-Type",
                  "value": "application/json"
                }
              ]
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "d483ca47-cd98-423b-8a34-ef7360e18677",
          "name": "Generate Attendance Report",
          "type": "n8n-nodes-base.code",
          "position": [
            700,
            500
          ],
          "parameters": {
            "jsCode": "const absentStudents = $input.all();\nconst today = new Date().toISOString().split('T')[0];\n\nconst attendanceReport = {\n  date: today,\n  totalAbsences: absentStudents.length,\n  highAlerts: absentStudents.filter(s => s.json.alertLevel === 'High').length,\n  mediumAlerts: absentStudents.filter(s => s.json.alertLevel === 'Medium').length,\n  lowAlerts: absentStudents.filter(s => s.json.alertLevel === 'Low').length,\n  averageAttendanceRate: Math.round(\n    absentStudents.reduce((sum, s) => sum + s.json.attendanceRate, 0) / absentStudents.length\n  ),\n  studentsAtRisk: absentStudents.filter(s => s.json.recentAbsences >= 5).map(s => ({\n    studentName: s.json.studentName,\n    className: s.json.className,\n    recentAbsences: s.json.recentAbsences,\n    attendanceRate: s.json.attendanceRate\n  }))\n};\n\nreturn [{ json: attendanceReport }];"
          },
          "typeVersion": 2
        },
        {
          "id": "a1e55a21-3a65-4249-a613-703291679483",
          "name": "Save Attendance Report",
          "type": "n8n-nodes-base.microsoftExcel",
          "position": [
            920,
            500
          ],
          "parameters": {
            "options": {},
            "dataMode": "autoMap",
            "resource": "worksheet",
            "workbook": {
              "__rl": true,
              "mode": "id",
              "value": "=attendance-reports-workbook"
            },
            "operation": "append",
            "worksheet": {
              "__rl": true,
              "mode": "id",
              "value": "=w234t5yhyt43e"
            }
          },
          "credentials": {
            "microsoftExcelOAuth2Api": {
              "id": "credential-id",
              "name": "microsoftExcelOAuth2Api Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "0e92d559-fcb7-4f32-83cb-645bdfd6c32e",
          "name": "Workflow Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -300,
            -40
          ],
          "parameters": {
            "color": 5,
            "width": 360,
            "height": 500,
            "content": "### **Absence Tracking Workflow**\n\n**🕙 Schedule:** Daily at 10:30 AM\n\n**📊 Process:**\n1. Check today's attendance records\n2. Identify absent students (unexcused)\n3. Calculate 30-day absence patterns\n4. Send alerts via Email & WhatsApp\n5. Generate daily attendance reports\n\n**🚦 Alert Levels:**\n- **High (🚨):** 5+ absences in 30 days\n- **Medium (⚠️):** 3-4 absences in 30 days  \n- **Low (📋):** 1-2 absences in 30 days\n\n**📈 Tracking:**\n- Attendance rates calculation\n- Pattern analysis\n- Risk identification\n- Historical reporting"
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "36d284ba-f45d-484e-a7a3-cee26d0160c1",
      "connections": {
        "Prepare Absence SMS": {
          "main": [
            [
              {
                "node": "Send Absence WhatsApp",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Prepare Absence Email": {
          "main": [
            [
              {
                "node": "Send Absence Email",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Read Student Contacts": {
          "main": [
            [
              {
                "node": "Process Absent Students",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Process Absent Students": {
          "main": [
            [
              {
                "node": "Prepare Absence Email",
                "type": "main",
                "index": 0
              },
              {
                "node": "Prepare Absence SMS",
                "type": "main",
                "index": 0
              },
              {
                "node": "Generate Attendance Report",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Read Today's Attendance": {
          "main": [
            [
              {
                "node": "Process Absent Students",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate Attendance Report": {
          "main": [
            [
              {
                "node": "Save Attendance Report",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Daily Attendance Check - 10:30 AM": {
          "main": [
            [
              {
                "node": "Read Today's Attendance",
                "type": "main",
                "index": 0
              },
              {
                "node": "Read Student Contacts",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 11,
      "nodeTypes": {
        "n8n-nodes-base.code": {
          "count": 4
        },
        "n8n-nodes-base.emailSend": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 1
        },
        "n8n-nodes-base.httpRequest": {
          "count": 1
        },
        "n8n-nodes-base.microsoftExcel": {
          "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": 19,
        "icon": "file:httprequest.svg",
        "name": "n8n-nodes-base.httpRequest",
        "codex": {
          "data": {
            "alias": [
              "API",
              "Request",
              "URL",
              "Build",
              "cURL"
            ],
            "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/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-pulling-and-visualizing-data-with-n8n/",
                  "icon": "📈",
                  "label": "Automatically pulling and visualizing data with n8n"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/",
                  "icon": "✍️",
                  "label": "Learn how to automatically cross-post your content with n8n"
                },
                {
                  "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/running-n8n-on-ships-an-interview-with-maranics/",
                  "icon": "🛳",
                  "label": "Running n8n on ships: An interview with Maranics"
                },
                {
                  "url": "https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/",
                  "icon": " 🪢",
                  "label": "What are APIs and how to use them with no code"
                },
                {
                  "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/world-poetry-day-workflow/",
                  "icon": "📜",
                  "label": "Celebrating World Poetry Day with a daily poem in Telegram"
                },
                {
                  "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/automate-designs-with-bannerbear-and-n8n/",
                  "icon": "🎨",
                  "label": "Automate Designs with Bannerbear and n8n"
                },
                {
                  "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/building-an-expense-tracking-app-in-10-minutes/",
                  "icon": "📱",
                  "label": "Building an expense tracking app in 10 minutes"
                },
                {
                  "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/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/",
                  "icon": "🧰",
                  "label": "How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/",
                  "icon": "🦄",
                  "label": "Learn how to use webhooks with Mattermost slash commands"
                },
                {
                  "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/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/",
                  "icon": "📈",
                  "label": "A low-code bitcoin ticker built with QuestDB and n8n.io"
                },
                {
                  "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/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                },
                {
                  "url": "https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/",
                  "icon": "🤟",
                  "label": "Creating scheduled text affirmations with n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                },
                {
                  "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.httprequest/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "HTTP Request",
          "color": "#0004F5"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="
        },
        "displayName": "HTTP Request",
        "typeVersion": 4,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 322,
        "icon": "file:excel.svg",
        "name": "n8n-nodes-base.microsoftExcel",
        "codex": {
          "data": {
            "alias": [
              "_Excel",
              "Excel",
              "Sheet",
              "CSV",
              "Spreadsheet"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.microsoftexcel/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/microsoft/"
                }
              ]
            },
            "categories": [
              "Data & Storage",
              "Productivity"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Microsoft Excel 365"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0iIzAyNzIzQiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik00My4xIDIwLjIyN2g5LjUxMnY0LjY5MmgtOS41MTN6bTAtNy4wMzRoOS41MTJ2NC42OWgtOS41MTN6bTAgMTQuMjI3aDkuNTEydjQuNjkxaC05LjUxM3ptMCA3LjAzNmg5LjUxMnY0LjY5MWgtOS41MTN6Ii8+PHBhdGggZD0iTTQzLjEgNDEuNjQ5aDkuNTEydjQuNjloLTkuNTEzek01OC4wNyA2Ljc4SDM1LjE0NlYuMzdMLjM3IDYuNDY3djQ3LjIybDM0Ljc3NiA1Ljk0MnYtNy4xODZINTguMDdjLjkzNSAwIDEuNTU5LS43ODEgMS41NTktMS41NTVWOC4zNDRjMC0uNzgxLS42MjQtMS41NTUtMS41Ni0xLjU1NVY2Ljc4ek0yMC4wMTggNDAuNTU0bC0zLjI3NC04LjU5M2gtLjE0OGMwIC4xNDktMy4yNzUgOC4xMy0zLjI3NSA4LjEzbC00LjM2Ni0uMzEyTDE0LjEgMjkuNjE2IDkuNDIyIDE5LjQ1M2w0LjM2Ny0uMzEyIDIuOTYzIDcuOTc0aC4xNDhjMC0uMTQ4IDMuMjc0LTguMjg3IDMuMjc0LTguMjg3bDQuNTIyLS4zMTItNS40NTcgMTEuMTAxIDUuNjE0IDExLjEwMi00LjgzNC0uMTQ5ek01Ny42IDUwLjcxN0gzNS4xNDZ2LTQuMzdoNS40NTh2LTQuNjkxaC01LjQ1OHYtMi4zNTJoNS40NTh2LTQuNjloLTUuNDU4di0yLjM0N2g1LjQ1OHYtNC42OWgtNS40NThWMjUuMjNoNS40NTh2LTQuNjloLTUuNDU4di0yLjM0NWg1LjQ1OHYtNC42OTJoLTUuNDU4di00LjY5aDIyLjQ1NnY0MS45MDNoLS4wMDF6Ii8+PHBhdGggZD0iTTQyLjcyOSAxOS44NTdoOS41MTJ2NC42OTFINDIuNzN6bTAtNy4wMzVoOS41MTJ2NC42OTFINDIuNzN6bTAgMTQuMjI4aDkuNTEydjQuNjlINDIuNzN6bTAgNy4wMzZoOS41MTJ2NC42OTFINDIuNzN6Ii8+PHBhdGggZD0iTTQyLjcyOSA0MS4yNzloOS41MTJ2NC42OUg0Mi43M3pNNTcuNjk5IDYuNDFIMzQuNzc2VjBMMCA2LjA5OHY0Ny4yMmwzNC43NzYgNS45NDF2LTcuMTg1aDIyLjkyM2MuOTM2IDAgMS41Ni0uNzgxIDEuNTYtMS41NTVWNy45NzRjMC0uNzgxLS42MjQtMS41NTUtMS41Ni0xLjU1NXpNMTkuNjQ3IDQwLjE4NGwtMy4yNzQtOC41OTNoLS4xNDhjMCAuMTQ4LTMuMjc0IDguMTMtMy4yNzQgOC4xM2wtNC4zNjctLjMxMiA1LjE0Ni0xMC4xNjMtNC42NzgtMTAuMTYzIDQuMzY3LS4zMTMgMi45NjIgNy45NzRoLjE0OWMwLS4xNDggMy4yNzQtOC4yODYgMy4yNzQtOC4yODZsNC41MjItLjMxMy01LjQ1OCAxMS4xMDIgNS42MTUgMTEuMTAxLTQuODM0LS4xNDh6TTU3LjIzIDUwLjM0N0gzNC43NzZ2LTQuMzdoNS40NTd2LTQuNjkyaC01LjQ1N3YtMi4zNTJoNS40NTd2LTQuNjloLTUuNDU3di0yLjM0N2g1LjQ1N3YtNC42OWgtNS40NTdWMjQuODZoNS40NTd2LTQuNjloLTUuNDU3di0yLjM0Nmg1LjQ1N3YtNC42OTJoLTUuNDU3di00LjY5aDIyLjQ1NnY0MS45MDR6Ii8+PC9nPjwvc3ZnPg=="
        },
        "displayName": "Microsoft Excel 365",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          },
          {
            "id": 4,
            "name": "Productivity"
          }
        ]
      },
      {
        "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": 35,
        "name": "Document Extraction"
      }
    ],
    "image": []
  }
}