AutomationFlowsWeb Scraping › Automate Website Tool Analysis with Telegram, Apify, AI & Google Sheets

Automate Website Tool Analysis with Telegram, Apify, AI & Google Sheets

ByMirza Ajmal @ajmalmirza on n8n.io

This powerful workflow automates the evaluation of new digital tools, websites, or platforms with the goal of assessing their potential impact on your business. By leveraging Telegram for user input, Apify for deep content extraction, advanced AI for contextual analysis, and…

Event trigger★★★★☆ complexityAI-powered20 nodesTelegram TriggerOpenRouter ChatTelegramHTTP RequestChain LlmAgentGoogle Sheets ToolOutput Parser Structured
Web Scraping Trigger: Event Nodes: 20 Complexity: ★★★★☆ AI nodes: yes Added:
Automate Website Tool Analysis with Telegram, Apify, AI & Google Sheets — n8n workflow card showing Telegram Trigger, OpenRouter Chat, Telegram integration

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

This workflow follows the Agent → Chainllm 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": "ay8QocZjaU95DnrF",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Automate Tool Assessment Using AI, Apify & Telegram Integration",
  "tags": [
    {
      "id": "YIDY0oSuimvxgwa5",
      "name": "Tool Evaluation",
      "createdAt": "2025-08-20T15:42:28.113Z",
      "updatedAt": "2025-08-20T15:42:28.113Z"
    },
    {
      "id": "t4H6jneh81YugIfQ",
      "name": "Web Scraping",
      "createdAt": "2025-08-20T15:43:22.326Z",
      "updatedAt": "2025-08-20T15:43:22.326Z"
    },
    {
      "id": "peuneMRaGvLwHBhL",
      "name": "AI Analysis",
      "createdAt": "2025-08-20T15:43:06.044Z",
      "updatedAt": "2025-08-20T15:44:20.819Z"
    }
  ],
  "nodes": [
    {
      "id": "fd5b2e52-120f-4788-aa0e-c4c081f16a23",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -1696,
        304
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b9119902-ef41-4463-b602-b5885ba125a9",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        16,
        512
      ],
      "parameters": {
        "model": "openai/gpt-oss-120b",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "90716ee6-5ba7-4011-97e6-53198fdfa043",
      "name": "Send a text message1",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1040,
        304
      ],
      "parameters": {
        "text": "=Website_url: {{ $json.website_url.replace(/[*[]()~>#+\\-=|{}.!]/g, '\\\\$&') }}\n\n\ud83d\udccc Concise Summary:\n{{ $json.website_concise_summary.replace(/[_*\\[\\]()~>#+-=|{}.!]/g, '\\$&') }}\n\ud83d\udcbc Business Impact:\n{{ $json.business_impact_and_opportunities.replace(/[[]()~>#+\\-=|{}.!]/g, '\\\\$&') }}\n\u26a1 Actionable Insights:\n{{ $json.Actionable_insights.replace(/[_*\\[\\]()~>#+-=|{}.!]/g, '\\$&') }}\n\n\u2705 Decision Verdict:\nVerdict: {{ $json.Actionable_insights.replace(/[_*\\[\\]()~>#+-=|{}.!]/g, '\\$&') }}\nrationate: {{ $json.rationale.replace(/[_*\\[\\]()~>#+-=|{}.!]/g, '\\$&') }}\neffort_hours: {{ $json.effort_hours }}\ntime_to_value_days: {{ $json.time_to_value_days }}\nurgency: {{ $json.urgency.replace(/[_*[]()~>#+\\-=|{}.!]/g, '\\\\$&') }} \nConfidence: {{ $json.confidence }} \nalternative_approach: {{ $json.alternative_approach.replace(/[_*\\[\\]()~>#+-=|{}.!]/g, '\\$&') }}\n",
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "additionalFields": {
          "parse_mode": "Markdown",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "aad96069-c146-42a5-abd4-1dfaa7bce3a0",
      "name": "Extract URL from Message",
      "type": "n8n-nodes-base.code",
      "position": [
        -1440,
        304
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n\nconst urls = items\n  .map((item) => {\n    const text = item?.json?.message?.text;\n    const urlMatch = text.match(urlRegex);\n    return urlMatch ? { url: urlMatch[0] } : null;\n  })\n  .filter((item) => item !== null);\n\nreturn urls;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bf94bd5c-dca7-48b2-a25f-93e4cfd95d32",
      "name": "URL Present?",
      "type": "n8n-nodes-base.if",
      "position": [
        -1296,
        304
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "bc130a04-e980-48e3-8b56-1054d5eae30a",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.url }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "96377652-af18-42fe-a692-784deedf84a3",
      "name": "Notify User: No Link Found",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -1056,
        416
      ],
      "parameters": {
        "text": "Hmm, I couldn\u2019t find a valid link in your message.Can you try sending the URL again?",
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "de57d539-97c3-4861-8752-a49738544824",
      "name": "Set Input URL Field",
      "type": "n8n-nodes-base.set",
      "position": [
        -832,
        304
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "564b26f4-7c46-44a4-b7ae-c628586ef0ce",
              "name": "URL",
              "type": "string",
              "value": "={{ $json.url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "091481fb-3f6e-441f-a8da-696605c31477",
      "name": "Launch Web Content Extraction",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -640,
        304
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/6sigmag~deep-website-content-crawler/run-sync-get-dataset-items",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"startUrls\": [\n    \"{{ $json.URL }}\"\n  ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "apifyApi"
      },
      "credentials": {
        "apifyApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "ee17684f-0a7d-468b-876d-a509dd174c95",
      "name": "Set Raw Web Content",
      "type": "n8n-nodes-base.set",
      "position": [
        -464,
        304
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "10609423-d2ba-4e83-9f98-4c9982ee4a46",
              "name": "Website_content",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "2ebc19f5-a69e-4192-b350-c6303b8bacbc",
      "name": "Clean Website Content",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -272,
        288
      ],
      "parameters": {
        "text": "={{ $json.Website_content }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are an information extraction engine.\nYour only task is to produce a detailed, factual, and structured representation of the provided website content.\n\nGuidelines:\n\nRemove all irrelevant text such as navigation menus, cookie banners, buttons, advertisements, promotional slogans, and UI labels.\n\nPreserve all meaningful information including main content, subheadings, product/service details, features, specifications, pricing, FAQs, reviews, benefits, risks, limitations, and any unique insights.\n\nExpand abbreviations or vague terms into their full meaning if possible (e.g., \"AI\" \u2192 \"Artificial Intelligence\").\n\nPresent the output in plain text with clear sections and indentation. Use this format:\n\nTitle/Heading\n\nSection Content\n\nKey Points (bullet list where applicable)\n\nDo not add opinions, summaries, or assumptions. Only report what is actually in the text.\n\nIf something is unclear or incomplete on the website, explicitly mark it as [Unclear/Incomplete].\n\nThe final output should be detailed context only \u2014 no conclusions, no advice, no summarization."
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "e54c5e12-adc5-4a25-abc7-f3da63f92031",
      "name": "Set Clean Detailed Context",
      "type": "n8n-nodes-base.set",
      "position": [
        80,
        288
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3d2507cf-8af7-45aa-827f-680754aa644f",
              "name": "cleaned_detailed_context",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ba3cadbe-1ccb-4141-8979-d311d03244d7",
      "name": "Contextual Website Analyzer AI",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        240,
        288
      ],
      "parameters": {
        "text": "={{ $json.cleaned_detailed_context }}",
        "options": {
          "systemMessage": "=Retrieve the expert\u2019s profile (expertise, tools, goals) from the database.\n\nAnalyze the provided website (URL or content) deeply, mapping findings to the expert\u2019s context.\n\nProduce structured plain-text outputs with strict section headers.\n\nDeliver a Decision Verdict with rationale, effort, time-to-value, urgency, and confidence.\n\nHard Requirements\n\nNo hallucinations. Use only: (a) the provided database/context, (b) website content. If missing \u2192 \u201cNot stated.\u201d\n\nIgnore noise (UI, nav menus, cookie banners, etc.).\n\nPlain text only. No markdown tables or links.\n\nEvery section = one single paragraph. Do not break into multiple lines or lists, except Decision Verdict which is structured.\n\nConcise Summary Rule: \u2264 90 words.\n\nWorkflow\n\nStep 1 \u2014 Context Retrieval\nFetch the expert\u2019s:\n\nCore expertise: [from database/context]\n\nKey tools: [from database/context]\n\nCurrent focus: [from database/context]\n\nNear-term goals: [from database/context]\n\nLong-term goals: [from database/context]\n\nStep 2 \u2014 Website Analysis\nExtract relevant content only: offering, capabilities, integrations, target audience, pricing/constraints, security/compliance, extensibility (API/webhooks). Normalize jargon.\n\nOutput Format (Plain Text Only; exact headers)\n\n[Context Retrieved from Database]\n<One paragraph with 2\u20134 sentences about the expert\u2019s expertise, tools, and goals.>\n\n[Website Concise Summary]\n<One paragraph (\u226490 words) summarizing what the website is, its core offering, target audience, positioning.>\n\n[Key Considerations]\n<One paragraph covering tech stack, integrations, API/webhooks, fit with expert\u2019s stack, compliance, and pricing visibility.>\n\n[Business Impact & Opportunities]\n<One paragraph describing potential effects on the expert\u2019s business, product plays, marketplace leverage, and partnerships.>\n\n[Benefits & Strengths]\n<One paragraph with strengths the expert could exploit (speed, compliance, integrations, credibility, etc.).>\n\n[Risks & Weaknesses]\n<One paragraph with risks such as vendor lock-in, pricing opacity, missing APIs, overlaps, scalability, compliance gaps.>\n\n[Actionable Insights]\n<One paragraph with 5\u20138 strong recommendations fused into a single flow (use commas/semicolons, not bullets).>\n\n[Decision Verdict]\nVerdict: LEARN_NOW / DEFER_MONITOR / IGNORE_AS_NOISE\nRationale: <3\u20136 lines tying the decision to the expert\u2019s goals, with trade-offs.>\nEffort: X hours\nTime-to-Value: X days\nUrgency: High / Medium / Low\nConfidence: X%\nAlternative Approach: <one-line fallback strategy>"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "d6162477-e0ad-4d5c-b7e4-715ab6e17338",
      "name": "Fetch Profile from Google Sheets",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        224,
        544
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RCMapKv9IPdwNz4Rp-Ma2iKzdWDEbxggYrq9K2_pU-w/edit#gid=0",
          "cachedResultName": "Company Details"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RCMapKv9IPdwNz4Rp-Ma2iKzdWDEbxggYrq9K2_pU-w",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RCMapKv9IPdwNz4Rp-Ma2iKzdWDEbxggYrq9K2_pU-w/edit?usp=drivesdk",
          "cachedResultName": "Tool Evaluation & Analysis Records"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "9554d3a9-8bab-44a4-b436-b1a1f61581e4",
      "name": "Structure AI Analysis Output",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        384,
        560
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"context_retrieved_from_google_sheet\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    },\n    \"website_concise_summary\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    },\n    \"key_considerations\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    },\n    \"business_impact_and_opportunities\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    },\n    \"benefits_and_strengths\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    },\n    \"risks_and_weaknesses\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    },\n    \"actionable_insights\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    },\n    \"decision_verdict\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"verdict\": { \"type\": \"string\" },\n        \"rationale\": { \"type\": \"string\" },\n        \"effort_hours\": { \"type\": \"number\" },\n        \"time_to_value_days\": { \"type\": \"number\" },\n        \"urgency\": { \"type\": \"string\" },\n        \"confidence\": { \"type\": \"number\" },\n        \"alternative_approach\": { \"type\": \"string\" }\n      },\n      \"required\": [\n        \"verdict\",\n        \"rationale\",\n        \"effort_hours\",\n        \"time_to_value_days\",\n        \"urgency\",\n        \"confidence\",\n        \"alternative_approach\"\n      ]\n    }\n  },\n  \"required\": [\n    \"context_retrieved_from_google_sheet\",\n    \"website_concise_summary\",\n    \"key_considerations\",\n    \"business_impact_and_opportunities\",\n    \"benefits_and_strengths\",\n    \"risks_and_weaknesses\",\n    \"actionable_insights\",\n    \"decision_verdict\"\n  ]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "30303b5c-b4ac-488d-bd4c-81bc751235c1",
      "name": "Record Website Analysis Results",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        752,
        304
      ],
      "parameters": {
        "columns": {
          "value": {
            "Verdict": "={{ $json.output.decision_verdict.verdict }}",
            "urgency": "={{ $json.output.decision_verdict.urgency }}",
            "rationale": "={{ $json.output.decision_verdict.rationale }}",
            "confidence": "={{ $json.output.decision_verdict.confidence }}",
            "website_url": "={{ $('Set Input URL Field').item.json.URL }}",
            "effort_hours": "={{ $json.output.decision_verdict.effort_hours }}",
            "Key considerations": "={{ $json.output.key_considerations[0] }}",
            "time_to_value_days": "={{ $json.output.decision_verdict.time_to_value_days }}",
            "Actionable_insights": "={{ $json.output.actionable_insights[0] }}",
            "alternative_approach": "={{ $json.output.decision_verdict.alternative_approach }}",
            "risks_and_weaknesses": "={{ $json.output.risks_and_weaknesses[0] }}",
            "benefits_and_strengths": "={{ $json.output.benefits_and_strengths[0] }}",
            "website_concise_summary": "={{ $json.output.website_concise_summary[0] }}",
            "business_impact_and_opportunities": "={{ $json.output.business_impact_and_opportunities[0] }}"
          },
          "schema": [
            {
              "id": "website_concise_summary",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "website_concise_summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Key considerations",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Key considerations",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "business_impact_and_opportunities",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "business_impact_and_opportunities",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "benefits_and_strengths",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "benefits_and_strengths",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "risks_and_weaknesses",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "risks_and_weaknesses",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Actionable_insights",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Actionable_insights",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Verdict",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Verdict",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "rationale",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "rationale",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "effort_hours",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "effort_hours",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "time_to_value_days",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "time_to_value_days",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "urgency",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "urgency",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "confidence",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "confidence",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "alternative_approach",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "alternative_approach",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "website_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "website_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "website_concise_summary"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1992152627,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RCMapKv9IPdwNz4Rp-Ma2iKzdWDEbxggYrq9K2_pU-w/edit#gid=1992152627",
          "cachedResultName": "Analysis Results"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RCMapKv9IPdwNz4Rp-Ma2iKzdWDEbxggYrq9K2_pU-w",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RCMapKv9IPdwNz4Rp-Ma2iKzdWDEbxggYrq9K2_pU-w/edit?usp=drivesdk",
          "cachedResultName": "Tool Evaluation & Analysis Records"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "b9eff0a7-042e-4919-a507-0dd88d43bb2a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1728,
        16
      ],
      "parameters": {
        "width": 416,
        "height": 688,
        "content": "**Title**: Telegram Input & URL Extraction\n**Purpose**: Detect incoming Telegram messages and extract a website URL if present.\n\n**Nodes Covered**:\nReceive Telegram Submission\n\nExtract URL from Message\n**What Happens:**\nWorkflow begins when a Telegram message is received. The message is checked for a valid URL and, if found, the URL is extracted for processing. If no URL is present, user is notified to resend."
      },
      "typeVersion": 1
    },
    {
      "id": "a8c55a3c-a626-490a-b170-f688af302487",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -864,
        16
      ],
      "parameters": {
        "color": 3,
        "width": 544,
        "height": 688,
        "content": "**Title:** Website Content Extraction\nPurpose: Prepare the extracted URL and pull detailed content from the target website.\n\n**Nodes Covered:**\nSet Input URL Field\nLaunch Web Content Extraction\nSet Raw Web Content\n\n**What Happens:**\nThe valid URL is stored and sent to an external crawler (Apify), which returns raw website content for AI processing.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f5c12bd5-a7a4-48b5-a634-cc03713de1bf",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        16
      ],
      "parameters": {
        "color": 4,
        "width": 848,
        "height": 688,
        "content": "**Title:** Content Cleaning & Contextual Analysis\n**Purpose:** Use AI to remove noise from website data, then analyze and contextualize it according to business needs.\n\n**Nodes Covered:**\nClean Website Content (LLM)\nSet Clean Detailed Context\nFetch Profile from Google Sheets\nContextual Website Analyzer AI\nStructure AI Analysis Output\n**What Happens:**\n\nAI models clean up the website text, relate it to the user\u2019s background and business goals (pulled from Google Sheets), and generate structured insights and recommendations."
      },
      "typeVersion": 1
    },
    {
      "id": "6ddb9df9-36a7-4fc0-b70c-74f509da0035",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        32
      ],
      "parameters": {
        "color": 6,
        "width": 672,
        "height": 688,
        "content": "**Title:** Results Recording & User Feedback\n**Purpose:** Save analysis to Google Sheets and send summary verdict and insights back to the Telegram user.\n\n**Nodes Covered:**\nRecord Website Analysis Results\nReply to User with Decision & Summary\n\n**What Happens:**\nResults are logged for records, and the user instantly receives a concise decision and business analysis on Telegram."
      },
      "typeVersion": 1
    },
    {
      "id": "af29b84d-518c-4d0a-9068-4cccc0e16c58",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1296,
        16
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 688,
        "content": "**Title:** Input Validation & User Notification\n**Purpose:** Ensure a valid URL exists before continuing workflow, and provide feedback when needed.\n\n**Nodes Covered:**\nURL Present?\nNotify User: No Link Found\n\n**What Happens:**\nIf the extracted URL is missing or invalid, the user receives a Telegram reply to resend a correct link. If the link exists, the workflow continues."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "3a3bf771-bb72-46ce-ac78-fba3abe6a295",
  "connections": {
    "URL Present?": {
      "main": [
        [
          {
            "node": "Set Input URL Field",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify User: No Link Found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Extract URL from Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Input URL Field": {
      "main": [
        [
          {
            "node": "Launch Web Content Extraction",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Raw Web Content": {
      "main": [
        [
          {
            "node": "Clean Website Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean Website Content": {
      "main": [
        [
          {
            "node": "Set Clean Detailed Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Clean Website Content",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Contextual Website Analyzer AI",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Extract URL from Message": {
      "main": [
        [
          {
            "node": "URL Present?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Clean Detailed Context": {
      "main": [
        [
          {
            "node": "Contextual Website Analyzer AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structure AI Analysis Output": {
      "ai_outputParser": [
        [
          {
            "node": "Contextual Website Analyzer AI",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Launch Web Content Extraction": {
      "main": [
        [
          {
            "node": "Set Raw Web Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Contextual Website Analyzer AI": {
      "main": [
        [
          {
            "node": "Record Website Analysis Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Record Website Analysis Results": {
      "main": [
        [
          {
            "node": "Send a text message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Profile from Google Sheets": {
      "ai_tool": [
        [
          {
            "node": "Contextual Website Analyzer AI",
            "type": "ai_tool",
            "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

This powerful workflow automates the evaluation of new digital tools, websites, or platforms with the goal of assessing their potential impact on your business. By leveraging Telegram for user input, Apify for deep content extraction, advanced AI for contextual analysis, and…

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

More Web Scraping workflows → · Browse all categories →

Related workflows

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

Web Scraping

This workflow connects Amazon product lookups to Telegram using AI-enhanced scraping and automation. It lets users send a product name to a Telegram bot and instantly receive pricing, discount, and pr

OpenRouter Chat, Agent, HTTP Request +2
Web Scraping

Instead of guessing or relying on shallow placeholders, it scrapes real website content, summarizes it intelligently, and feeds that context into an LLM to produce outreach that feels relevant and hum

Chain Llm, Output Parser Structured, HTTP Request +3
Web Scraping

Community nodes are used in this workflow. B2B Sales Teams & SDRs Recruitment Agencies & Tech Recruiters Startup Founders Growth Marketing Teams Scrape Hiring Signals: The workflow starts by using an

Google Sheets, Google Gemini Chat, Output Parser Structured +3
Web Scraping

Turn any Amazon India product URL into a fully-edited 10-second lifestyle video and auto-publish it to Instagram, Facebook, X (Twitter), LinkedIn, YouTube, and Threads — with platform-optimized captio

HTTP Request, @Apify/N8N Nodes Apify, OpenRouter Chat +3
Web Scraping

📚 Learners and educators who want a fast overview of a creator’s entire catalog. 🧩 Research, SEO, and content ops teams building an intelligence layer on top of YouTube channels.

HTTP Request, Agent, Output Parser Autofixing +6