Tell parents on WhatsApp when a student is absent

When a teacher marks a student absent in the attendance sheet, the parent gets a WhatsApp message right away.

Easy Saves ~6 hours/month Education & TrainingBy Flowngn team

Works with n8n · Make · Zapier

How it works

Trigger: Google Sheets — new row in Attendance
  1. A teacher adds a row (date, student, class, status, parent phone).
  2. Continue only when the status is "absent".
  3. Send the parent an approved WhatsApp template with the student's name, class and date.

Diagram

trueGNew attendance rowGoogle Sheets Trigger⑂Absent?IfWTell the parentWhatsApp Business Cloud
Trigger App Logic

Build it

Pick your tool — same automation, step by step.

Copy and paste straight into an n8n canvas (Ctrl+V), or download and use Import from File. Then connect your own credentials and replace every YOUR_… placeholder.

Workflow JSON
Show code (154 lines)
{
  "name": "Tell parents on WhatsApp when a student is absent (Flowngn)",
  "nodes": [
    {
      "parameters": {
        "content": "## Tell parents on WhatsApp when a student is absent\nWhen a teacher marks a student absent in the attendance sheet, the parent gets a WhatsApp message right away.\n\n**Setup**\n1. Open each node and connect your own credentials.\n2. Replace every YOUR_… placeholder.\n3. Test once, then activate.\n\nFree template from Flowngn",
        "height": 260,
        "width": 340
      },
      "id": "458223d5-1806-40b3-a72e-e767d2a77d69",
      "name": "Setup notes",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -420,
        -60
      ]
    },
    {
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "documentId": {
          "__rl": true,
          "value": "YOUR_SPREADSHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "Attendance",
          "mode": "name"
        },
        "event": "rowAdded",
        "options": {}
      },
      "id": "458223d5-1806-40b3-a72e-e767d2a77d69",
      "name": "New attendance row",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "c1",
              "leftValue": "={{ String($json.status).trim().toLowerCase() }}",
              "rightValue": "absent",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "458223d5-1806-40b3-a72e-e767d2a77d69",
      "name": "Absent?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        300,
        0
      ]
    },
    {
      "parameters": {
        "operation": "sendTemplate",
        "phoneNumberId": "YOUR_PHONE_NUMBER_ID",
        "recipientPhoneNumber": "={{ String($json.parent_phone).replace(/[^0-9]/g, '') }}",
        "template": "YOUR_ABSENCE_TEMPLATE|ar",
        "components": {
          "component": [
            {
              "type": "body",
              "bodyParameters": {
                "parameter": [
                  {
                    "type": "text",
                    "text": "={{ $json.student }}"
                  },
                  {
                    "type": "text",
                    "text": "={{ $json.date }}"
                  },
                  {
                    "type": "text",
                    "text": "={{ $json.class }}"
                  }
                ]
              }
            }
          ]
        }
      },
      "id": "458223d5-1806-40b3-a72e-e767d2a77d69",
      "name": "Tell the parent",
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1,
      "position": [
        600,
        0
      ]
    }
  ],
  "connections": {
    "New attendance row": {
      "main": [
        [
          {
            "node": "Absent?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Absent?": {
      "main": [
        [
          {
            "node": "Tell the parent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "tags": []
}

Open in the playground to edit →

Tips

  • Use a Google Form for teachers; its answers land in the sheet as new rows.

Related flows