AutomationFlowsSlack & Telegram › URL Health Checker

URL Health Checker

URL Health Checker. Uses httpRequest, discord, errorTrigger. Webhook trigger; 9 nodes.

Webhook trigger★★★★☆ complexity9 nodesHTTP RequestDiscordError Trigger
Slack & Telegram Trigger: Webhook Nodes: 9 Complexity: ★★★★☆ Added:

This workflow follows the Discord → HTTP Request 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
{
  "name": "URL Health Checker",
  "nodes": [
    {
      "parameters": {
        "path": "health-check",
        "httpMethod": "POST",
        "responseMode": "onReceived",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1.1,
      "position": [
        0,
        0
      ],
      "id": "a87b9ce3-dc82-49bf-8fb5-2e514c6a1a03",
      "name": "Webhook"
    },
    {
      "parameters": {
        "jsCode": "const body = $input.first().json.body || {};\nconst urls = (body.urls || []).slice(0, 10);\nconst notify = body.notify === true;\n\nif (!urls.length) {\n  throw new Error('No urls array in POST body');\n}\n\n// Return one item per URL, carrying notify flag\nreturn urls.map(url => ({\n  json: { url, notify, totalUrls: urls.length }\n}));"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        220,
        0
      ],
      "id": "11425262-2963-4ce1-b72e-9ad04c31439d",
      "name": "Validate and Split"
    },
    {
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {
          "timeout": 5000,
          "redirect": {
            "redirect": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        440,
        0
      ],
      "id": "44d02276-b52e-498a-8463-ee89c5273c2e",
      "name": "HTTP Health Check",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\nconst origItems = $('Validate and Split').all();\n\nreturn items.map((item, idx) => {\n  const orig = origItems[idx]?.json || {};\n  const url = orig.url || 'unknown';\n  const notify = orig.notify;\n  const totalUrls = orig.totalUrls;\n  const error = item.json.error;\n\n  let status = 'up';\n  let detail = 'OK';\n\n  if (error) {\n    status = 'down';\n    detail = typeof error === 'object' ? (error.message || JSON.stringify(error)) : String(error);\n  }\n\n  return { json: { url, status, detail, notify, totalUrls } };\n});"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        660,
        0
      ],
      "id": "ae746309-b019-43a0-846a-0232ababfb1e",
      "name": "Categorize"
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\nconst notify = items[0]?.json.notify || false;\nconst total = items[0]?.json.totalUrls || items.length;\n\nconst up = items.filter(i => i.json.status === 'up');\nconst down = items.filter(i => i.json.status === 'down');\n\nconst NL = String.fromCharCode(10);\nconst lines = [];\nlines.push('**URL Health Check Report**');\nlines.push('Checked: ' + items.length + ' URLs');\nlines.push('');\n\nif (down.length > 0) {\n  lines.push('\\u274c **DOWN (' + down.length + ')**');\n  down.forEach(i => lines.push('  - ' + i.json.url + ': ' + i.json.detail));\n  lines.push('');\n}\n\nif (up.length > 0) {\n  lines.push('\\u2705 **UP (' + up.length + ')**');\n  up.forEach(i => lines.push('  - ' + i.json.url));\n}\n\nconst report = lines.join(NL);\nreturn [{ json: { report, notify, upCount: up.length, downCount: down.length } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        880,
        0
      ],
      "id": "3b4f6e8b-b3c9-4ec4-ab95-e7c707f5b739",
      "name": "Build Report"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "09c225b1-855f-4551-a5d7-1650a594ce7b",
              "leftValue": "={{ $json.notify }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1100,
        0
      ],
      "id": "c4b7e431-6a7f-4d30-ad23-c932b05e8657",
      "name": "Should Notify?"
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "={{ $json.report }}",
        "options": {}
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        1320,
        -80
      ],
      "id": "7e9b629f-4dcb-4012-8910-c5f8208deeb6",
      "name": "Send to Discord",
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.errorTrigger",
      "typeVersion": 1,
      "position": [
        880,
        -200
      ],
      "id": "bfe36387-1d82-4368-a622-92d02172fe4b",
      "name": "Error Trigger"
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "=\u274c URL Health Checker Error: {{ $json.execution.error.message }}",
        "options": {}
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        1100,
        -200
      ],
      "id": "2401a534-55bc-42e5-b40f-2a5598bff80b",
      "name": "Error to Discord",
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Validate and Split",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate and Split": {
      "main": [
        [
          {
            "node": "HTTP Health Check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Health Check": {
      "main": [
        [
          {
            "node": "Categorize",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Categorize": {
      "main": [
        [
          {
            "node": "Build Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Report": {
      "main": [
        [
          {
            "node": "Should Notify?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Should Notify?": {
      "main": [
        [
          {
            "node": "Send to Discord",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Error to Discord",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

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

URL Health Checker. Uses httpRequest, discord, errorTrigger. Webhook trigger; 9 nodes.

Source: https://github.com/new5558/auto-n8n-dev/blob/6a6e822188e2b4f0f7b32e1e5635e75a4dfea036/examples/url_health_checker.json — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

This workflow is an AI-assisted clean plate and object removal pipeline built for modern VFX production environments. It transforms a single plate image and removal brief into multiple high-quality cl

HTTP Request, Google Drive, Slack +3
Slack & Telegram

This workflow is an AI-driven FX concept generation pipeline that transforms a single VFX brief into multiple high-quality simulation-ready video concepts. It automates ideation, rendering, storage, a

HTTP Request, Google Drive, Notion +2
Slack & Telegram

This workflow is an AI-powered style look transfer and quality control pipeline designed for VFX and editorial production. It transforms a new shot brief and a hero reference image into multiple style

HTTP Request, Slack, Gmail +3
Slack & Telegram

Automate end-to-end AI video creation by transforming text scripts into professional avatar videos with natural voiceovers. 🎬🤖 This workflow receives a script via webhook, generates realistic audio us

HTTP Request, Google Drive, Error Trigger +1
Slack & Telegram

Invoice Data Extraction. Uses httpRequest, slack, googleSheets, errorTrigger. Webhook trigger; 16 nodes.

HTTP Request, Slack, Google Sheets +1