Workflow: Web Server Monitor.
Integrations: gmail, googleSheets, httpRequest, scheduleTrigger, stickyNote

{"id": "pcLi17oUJK9pSaee", "meta": {"instanceId": "workflow-08dc291a", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:52.182341", "updatedAt": "2025-09-29T07:07:52.182355", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Web Server Monitor.", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "014e1202-3822-4d3f-817e-31f64c8bd5f5", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-680, -440], "parameters": {"width": 560, "height": 540, "content": "\ud83d\udcd8 Node Descriptions for Your Web Server Monitor Workflow\n\n\u23f0 1. Schedule Trigger  \nTriggers the workflow every minute to initiate regular checks on server availability.\n\n\ud83d\udcc4 2. Web Servers List (Google Sheets)  \nFetches a list of server hostnames or IP addresses from a Google Sheet.  \nEach row is treated as one server. This makes server management easy \u2014 no need to edit the workflow to add/remove servers.\n\n\ud83c\udf10 3. Server Alive Check (HTTP) \nSends an HTTP GET request to each server (e.g., {{ $env.WEBHOOK_URL }}  \nIf the request fails, the error path is triggered.  \n\n\ud83d\udcdd 4. Web Server Alive Log (Google Sheets)  \nLogs successful server checks into a separate Sheet with a timestamp.\nThis log helps track uptime history, verify server health, and generate availability reports.\n\n\ud83d\udea8\ud83d\udce7 5. Server Down Notification (Gmail)  \nSends an alert email if a server does not respond or returns an error.  \nIncludes the server address and the timestamp of failure.\n\n\ud83d\udcdd 6. Web Server Down Log (Google Sheets)\nLogs the failed server checks into another Sheet with a timestamp.  \nUseful for uptime reporting, debugging, and audit tracking.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "94a3454c-69bd-4a5d-b169-8f3772a41321", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [0, 0], "parameters": {"rule": {"interval": [{"field": "minutes", "minutesInterval": 1}]}}, "typeVersion": 1.2, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "f92fcadf-0b13-42ac-abed-aaf169d0ed76", "name": "Server-Monitor", "type": "n8n-nodes-base.googleSheets", "position": [220, 0], "parameters": {"options": {}, "sheetName": {"__rl": true, "mode": "list", "value": 524060827, "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Server_List"}, "documentId": {"__rl": true, "mode": "list", "value": "1OiwBkf3bs3tcfi5cAIrOl_GrXw2EfQLdcPbh6SaBFKQ", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Server-Monitor"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "8cXGgTelVK5DewVr", "name": "Google Sheets account"}}, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "c168a1f9-1f3f-40b8-95d0-51f6259d8096", "name": "HTTP Request", "type": "n8n-nodes-base.httpRequest", "onError": "continueErrorOutput", "position": [440, 0], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "0ac82373-6958-4de9-8cf7-94b0005197ff", "name": "Server_Status_Alive", "type": "n8n-nodes-base.googleSheets", "position": [660, -180], "parameters": {"columns": {"value": {"Status": "Alive", "TimeStamp": "={{ $now.format('yyyy-MM-dd') }}", "Server IP Address": "={{ $('Server-Monitor').item.json.Server }}"}, "schema": [{"id": "TimeStamp", "type": "string", "display": true, "required": false, "displayName": "TimeStamp", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Server IP Address", "type": "string", "display": true, "required": false, "displayName": "Server IP Address", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Status", "type": "string", "display": true, "required": false, "displayName": "Status", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false}, "options": {}, "operation": "append", "sheetName": {"__rl": true, "mode": "list", "value": 303958634, "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Server_Status_Alive"}, "documentId": {"__rl": true, "mode": "list", "value": "1OiwBkf3bs3tcfi5cAIrOl_GrXw2EfQLdcPbh6SaBFKQ", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Server-Monitor"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "8cXGgTelVK5DewVr", "name": "Google Sheets account"}}, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "6dc31115-4ab6-44cf-ac4f-e2af82a5355e", "name": "Gmail", "type": "n8n-nodes-base.gmail", "position": [660, 100], "webhookId": "dec1def3-c858-4a43-b96e-2655d3fa3b77", "parameters": {"message": "=Hi Team,\n\nAt {{$now.format('yyyy-MM-dd HH:mm:ss')}}, the following server failed to respond to ping:\n\n\ud83d\udd3b Server Down: {{ $json[\"Server\"] }}  \n\nPlease investigate immediately to prevent service disruption. \n\nAutomated Monitoring System\n", "options": {}, "subject": "=\ud83d\udd3b Server Down: {{ $json[\"Server\"] }}: {{ $today.format('yyyy-MM-dd') }}"}, "credentials": {"gmailOAuth2": {"id": "C1RVeb9JgdvkMkP4", "name": "Gmail account 2"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "10262115-57a2-4c4d-9a10-89f4f6ee4ed7", "name": "Server_Status_Down", "type": "n8n-nodes-base.googleSheets", "position": [880, 100], "parameters": {"columns": {"value": {"Status": "Down", "TimeStamp": "={{$now.format('yyyy-MM-dd HH:mm:ss')}}", "Server IP Address": "={{ $('Server-Monitor').item.json.Server }}"}, "schema": [{"id": "TimeStamp", "type": "string", "display": true, "required": false, "displayName": "TimeStamp", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Server IP Address", "type": "string", "display": true, "required": false, "displayName": "Server IP Address", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Status", "type": "string", "display": true, "required": false, "displayName": "Status", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false}, "options": {}, "operation": "append", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Server_Status_Down"}, "documentId": {"__rl": true, "mode": "list", "value": "1OiwBkf3bs3tcfi5cAIrOl_GrXw2EfQLdcPbh6SaBFKQ", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Server-Monitor"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "8cXGgTelVK5DewVr", "name": "Google Sheets account"}}, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow."}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "21468219-4434-4a0c-a3c4-9068baccc3cc", "connections": {"c168a1f9-1f3f-40b8-95d0-51f6259d8096": {"main": [[{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096", "type": "main", "index": 0}], [{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096-87f90b09", "type": "main", "index": 0}], [{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096-c8b52e8e", "type": "main", "index": 0}], [{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096-ecd94a49", "type": "main", "index": 0}], [{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096-823cc42d", "type": "main", "index": 0}], [{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096-171f9604", "type": "main", "index": 0}], [{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096-4b491536", "type": "main", "index": 0}], [{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096-7a1f5be5", "type": "main", "index": 0}], [{"node": "error-handler-c168a1f9-1f3f-40b8-95d0-51f6259d8096-39109281", "type": "main", "index": 0}]]}, "f92fcadf-0b13-42ac-abed-aaf169d0ed76": {"main": [[{"node": "error-handler-f92fcadf-0b13-42ac-abed-aaf169d0ed76-1ce2c54d", "type": "main", "index": 0}]]}, "0ac82373-6958-4de9-8cf7-94b0005197ff": {"main": [[{"node": "error-handler-0ac82373-6958-4de9-8cf7-94b0005197ff-36a1590d", "type": "main", "index": 0}]]}, "10262115-57a2-4c4d-9a10-89f4f6ee4ed7": {"main": [[{"node": "error-handler-10262115-57a2-4c4d-9a10-89f4f6ee4ed7-76935ec7", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Web Server Monitor.. This workflow integrates 6 different services: stickyNote, httpRequest, scheduleTrigger, stopAndError, gmail. It contains 12 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Web Server Monitor.. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}