AutomationFlowsAI & RAG › Health Monitoring System with Grok-3 AI Analysis and Family/doctor Email Alerts

Health Monitoring System with Grok-3 AI Analysis and Family/doctor Email Alerts

ByCheng Siong Chin @cschin on n8n.io

Automates patient health monitoring by analyzing submitted health data via AI, determining alert necessity, and notifying family and doctors when critical conditions detected.

Webhook trigger★★★★☆ complexityAI-powered17 nodesAgentOutput Parser StructuredEmail SendOpenRouter Chat
AI & RAG Trigger: Webhook Nodes: 17 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #10525 — we link there as the canonical source.

This workflow follows the Agent → Emailsend recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "9rQdx3QQnniDVxCy",
  "name": "AI-Powered Grok-3 Health Alert System with Family Notifications",
  "tags": [],
  "nodes": [
    {
      "id": "765f5740-a408-4a7c-91c2-bbb57c9b0999",
      "name": "Webhook - Submit Health Data",
      "type": "n8n-nodes-base.webhook",
      "position": [
        48,
        32
      ],
      "parameters": {
        "path": "health-monitor",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "f5ac1b49-b445-4041-8452-c029ce8c70cf",
      "name": "Extract Health Data",
      "type": "n8n-nodes-base.set",
      "position": [
        256,
        32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "patientName",
              "type": "string",
              "value": "={{ $json.body.patientName }}"
            },
            {
              "id": "a2",
              "name": "age",
              "type": "number",
              "value": "={{ $json.body.age }}"
            },
            {
              "id": "a3",
              "name": "bloodPressure",
              "type": "string",
              "value": "={{ $json.body.bloodPressure }}"
            },
            {
              "id": "a4",
              "name": "heartRate",
              "type": "number",
              "value": "={{ $json.body.heartRate }}"
            },
            {
              "id": "a5",
              "name": "weight",
              "type": "number",
              "value": "={{ $json.body.weight }}"
            },
            {
              "id": "a6",
              "name": "height",
              "type": "number",
              "value": "={{ $json.body.height }}"
            },
            {
              "id": "a7",
              "name": "dietLog",
              "type": "string",
              "value": "={{ $json.body.dietLog }}"
            },
            {
              "id": "a8",
              "name": "symptoms",
              "type": "string",
              "value": "={{ $json.body.symptoms }}"
            },
            {
              "id": "a9",
              "name": "familyEmail",
              "type": "string",
              "value": "={{ $json.body.familyEmail }}"
            },
            {
              "id": "a10",
              "name": "doctorEmail",
              "type": "string",
              "value": "={{ $json.body.doctorEmail }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "54e449f5-e947-48c0-b1a1-8909c2371943",
      "name": "AI Health Analysis Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        432,
        16
      ],
      "parameters": {
        "text": "=You are a health monitoring AI assistant. Analyze the following patient data and provide a comprehensive health assessment.\n\nPatient Information:\n- Name: {{ $json.patientName }}\n- Age: {{ $json.age }}\n- Blood Pressure: {{ $json.bloodPressure }}\n- Heart Rate: {{ $json.heartRate }} bpm\n- Weight: {{ $json.weight }} kg\n- Height: {{ $json.height }} cm\n- Recent Diet: {{ $json.dietLog }}\n- Symptoms: {{ $json.symptoms }}\n\nProvide your analysis in the following JSON format:\n{\n  \"healthStatus\": \"good/concerning/poor\",\n  \"riskLevel\": \"low/medium/high\",\n  \"healthSummary\": \"Brief overall assessment\",\n  \"dietAnalysis\": \"Analysis of dietary habits\",\n  \"vitalsConcerns\": \"Any concerns about vitals\",\n  \"recommendations\": \"Specific health recommendations\",\n  \"requiresImmediateAttention\": true/false,\n  \"alertFamily\": true/false,\n  \"alertDoctor\": true/false\n}\n\nBe thorough and consider BMI, blood pressure ranges, heart rate norms, and nutritional balance.",
        "options": {
          "systemMessage": "You are a medical AI assistant specializing in health monitoring and preventive care. Provide accurate, evidence-based assessments while being clear that you are not replacing professional medical advice."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "63fbd346-a5ed-4fbf-9017-c6b1049998eb",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        576,
        240
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "a4f56a13-b529-481f-bc91-2b038473ab46",
      "name": "Check If Alert Needed",
      "type": "n8n-nodes-base.if",
      "position": [
        704,
        16
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "c1",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.output.alertFamily }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "ce55fffe-20f2-4415-aabf-c0ee71431e49",
      "name": "Prepare Alert Data",
      "type": "n8n-nodes-base.set",
      "position": [
        928,
        -16
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "familyEmail",
              "type": "string",
              "value": "={{ $('Extract Health Data').item.json.familyEmail }}"
            },
            {
              "id": "a2",
              "name": "doctorEmail",
              "type": "string",
              "value": "={{ $('Extract Health Data').item.json.doctorEmail }}"
            },
            {
              "id": "a3",
              "name": "patientName",
              "type": "string",
              "value": "={{ $('Extract Health Data').item.json.patientName }}"
            },
            {
              "id": "a4",
              "name": "healthStatus",
              "type": "string",
              "value": "={{ $json.output.healthStatus }}"
            },
            {
              "id": "a5",
              "name": "riskLevel",
              "type": "string",
              "value": "={{ $json.output.riskLevel }}"
            },
            {
              "id": "a6",
              "name": "healthSummary",
              "type": "string",
              "value": "={{ $json.output.healthSummary }}"
            },
            {
              "id": "a7",
              "name": "recommendations",
              "type": "string",
              "value": "={{ $json.output.recommendations }}"
            },
            {
              "id": "a8",
              "name": "vitalsConcerns",
              "type": "string",
              "value": "={{ $json.output.vitalsConcerns }}"
            },
            {
              "id": "a9",
              "name": "dietAnalysis",
              "type": "string",
              "value": "={{ $json.output.dietAnalysis }}"
            },
            {
              "id": "a10",
              "name": "alertDoctor",
              "type": "boolean",
              "value": "={{ $json.output.alertDoctor }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9cfcd640-34b9-4ae8-8fa7-72f7cd7e8288",
      "name": "Send Email to Family",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1104,
        -16
      ],
      "parameters": {
        "options": {},
        "subject": "=\u26a0\ufe0f Health Alert for {{ $json.patientName }}",
        "toEmail": "={{ $json.familyEmail }}",
        "fromEmail": "user@example.com"
      },
      "typeVersion": 2.1
    },
    {
      "id": "cba5f6d2-1a84-416e-a2fb-720987cc2eb0",
      "name": "Check If Doctor Alert Needed",
      "type": "n8n-nodes-base.if",
      "position": [
        1280,
        -16
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "c1",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.alertDoctor }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "335af2a1-2235-4000-a4f7-23cb76812617",
      "name": "Send Email to Doctor",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1456,
        -80
      ],
      "parameters": {
        "options": {},
        "subject": "=Medical Alert: {{ $json.patientName }} - {{ $json.riskLevel.toUpperCase() }} Risk",
        "toEmail": "={{ $json.doctorEmail }}",
        "fromEmail": "user@example.com"
      },
      "typeVersion": 2.1
    },
    {
      "id": "c6a213de-e02f-40a9-905f-afefc6e2bb82",
      "name": "Merge Alert Results",
      "type": "n8n-nodes-base.set",
      "position": [
        1648,
        32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "status",
              "type": "string",
              "value": "alerts_sent"
            },
            {
              "id": "a2",
              "name": "familyAlerted",
              "type": "boolean",
              "value": "={{ $('Send Email to Family').item.json.success || false }}"
            },
            {
              "id": "a3",
              "name": "doctorAlerted",
              "type": "boolean",
              "value": "={{ $('Send Email to Doctor').item.json.success || false }}"
            },
            {
              "id": "a4",
              "name": "message",
              "type": "string",
              "value": "Health alerts have been sent successfully"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5f8c81da-5b99-4548-a038-44ec743523e0",
      "name": "No Alert Required",
      "type": "n8n-nodes-base.set",
      "position": [
        1152,
        160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "status",
              "type": "string",
              "value": "no_alert_needed"
            },
            {
              "id": "a2",
              "name": "message",
              "type": "string",
              "value": "Health status is within normal parameters. No alerts required."
            },
            {
              "id": "a3",
              "name": "healthStatus",
              "type": "string",
              "value": "={{ $json.output.healthStatus }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e77eff85-7797-4c7b-b17f-af13f50c90c1",
      "name": "Combine Results",
      "type": "n8n-nodes-base.merge",
      "position": [
        1808,
        144
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3
    },
    {
      "id": "877681a2-34e4-4615-b943-e62fe4a48b8e",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1968,
        144
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ { \"success\": true, \"analysisComplete\": true, \"healthStatus\": $json.healthStatus || $('AI Health Analysis Agent').item.json.output.healthStatus, \"alertsSent\": $json.status === 'alerts_sent', \"message\": $json.message } }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "16378fbf-436a-4105-bacb-19c8a233ed46",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        400,
        240
      ],
      "parameters": {
        "model": "x-ai/grok-3",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5e920ef8-b1a3-4438-bcfa-aa26f055a5e8",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -448
      ],
      "parameters": {
        "width": 544,
        "height": 432,
        "content": "## Introduction\nAutomates patient health monitoring by analyzing submitted health data via AI, determining alert necessity, and notifying family and doctors when critical conditions detected.  \n\n## How It Works\nWebhook receives health data, AI agent analyzes vitals using OpenRouter with structured parsing. Conditional logic checks alert necessity. If yes: prepares data, emails family, checks doctor criteria, sends doctor email, merges results. If no: skips alerts. Combines outcomes and responds to webhook.\n\n## Workflow Template\nWebhook \u2192 Extract Data \u2192 AI Agent \u2192 [OpenRouter + Memory + Parser] \u2192 Check Alert \u2192 [Prepare + Email Family + Check Doctor + Email Doctor] OR [No Alert] \u2192 Merge \u2192 Combine \u2192 Respond\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9c5fdbe1-805a-4256-97fe-bee6ecee4ed7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        -448
      ],
      "parameters": {
        "color": 3,
        "width": 928,
        "height": 320,
        "content": "## Use Cases\n**Chronic Disease:** Diabetic submits glucose readings. AI detects >250mg/dL, alerts family and endocrinologist. **Elderly Care:** Senior's vitals monitored via wearable. AI identifies irregular rhythm, emails caregiver and cardiologist.  \n\n## Customization\nAdjust thresholds by demographics. Add vital types (O2, glucose trends). Customize AI prompts for conditions. Integrate SMS via Twilio. Add escalation logic. Include medication tracking. Connect EHR systems. Implement frequency limits. Add dashboard reporting.\n\n## Benefits\n**Rapid Response:** Detects emergencies in seconds. **Intelligent Filtering:** Prevents false alarms. **Family Peace:** Automated notifications keep loved ones informed. **Clinical Efficiency:** "
      },
      "typeVersion": 1
    },
    {
      "id": "faebc33f-0151-401c-95a1-f9195e64c33a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        -448
      ],
      "parameters": {
        "color": 5,
        "width": 672,
        "height": 432,
        "content": "\n## Workflow Steps\n1. **Reception & Extraction:** Webhook receives vitals/symptoms, parses JSON payload\n2. **AI Analysis:** OpenRouter analyzes vitals against ranges, accesses history via Memory Tool, formats assessment via Output Parser\n3. **Routing & Notification:** Conditional logic checks severity. Alert path emails family/doctor if critical. No alert logs status\n4. **Consolidation:** Merges outcomes, sends webhook response\n\n## Setup Instructions\nConfigure webhook endpoint with auth token. Add OpenRouter API key and select model. Set up AI Agent with Memory Tool and Output Parser. Connect Gmail/SMTP for notifications with recipient addresses. Configure alert thresholds (temp >38.5\u00b0C, BP >140/90, HR <60/>100). Set doctor notification criteria.\n\n## Prerequisites\nn8n instance, OpenRouter API key, AI model access, Patient database, Gmail/SMTP credentials, Family contacts, Doctor contacts, Webhook authentication"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7d5284a7-cef4-4526-ad6f-02cbf608ef9c",
  "connections": {
    "Combine Results": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Alert Required": {
      "main": [
        [
          {
            "node": "Combine Results",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Prepare Alert Data": {
      "main": [
        [
          {
            "node": "Send Email to Family",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Health Data": {
      "main": [
        [
          {
            "node": "AI Health Analysis Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Alert Results": {
      "main": [
        [
          {
            "node": "Combine Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email to Doctor": {
      "main": [
        [
          {
            "node": "Merge Alert Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email to Family": {
      "main": [
        [
          {
            "node": "Check If Doctor Alert Needed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Alert Needed": {
      "main": [
        [
          {
            "node": "Prepare Alert Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Alert Required",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Health Analysis Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "AI Health Analysis Agent": {
      "main": [
        [
          {
            "node": "Check If Alert Needed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Health Analysis Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Check If Doctor Alert Needed": {
      "main": [
        [
          {
            "node": "Send Email to Doctor",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge Alert Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook - Submit Health Data": {
      "main": [
        [
          {
            "node": "Extract Health Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Automates patient health monitoring by analyzing submitted health data via AI, determining alert necessity, and notifying family and doctors when critical conditions detected.

Source: https://n8n.io/workflows/10525/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

leads. Uses supabase, gmail, formTrigger, httpRequest. Webhook trigger; 62 nodes.

Supabase, Gmail, Form Trigger +13
AI & RAG

Transform your WhatsApp group conversations into actionable business intelligence through automated AI analysis and daily reporting. This workflow eliminates manual conversation monitoring by capturin

OpenRouter Chat, Output Parser Autofixing, Agent +6
AI & RAG

MiniBear Webhook. Uses httpRequest, stickyNote, lmChatOpenRouter, agent. Webhook trigger; 45 nodes.

HTTP Request, OpenRouter Chat, Agent +4
AI & RAG

This workflow template, "Personal Assistant to Note Messages and Extract Namecard Information" is designed to streamline the processing of incoming messages on the LINE messaging platform. It integrat

HTTP Request, OpenRouter Chat, Agent +4
AI & RAG

This workflow is designed for legal professionals, policy analysts, and compliance teams who need to: Research case law, legislation, and regulatory developments on specific topics Build comprehensive

HTTP Request Tool, Tool Http Request, Tool Think +5