AutomationFlowsAI & RAG › Verify Service Providers via Telegram Using Browseract and Google Gemini

Verify Service Providers via Telegram Using Browseract and Google Gemini

ByMadame AI Team | Kai @madame-ai on n8n.io

This workflow transforms your Telegram bot into an intelligent vendor vetting tool. Send the name and location of a service provider (e.g., "Mr. Rooter in Detroit"), and it will automatically scrape Google Maps for reviews, cross-reference the business with OpenCorporates to…

Event trigger★★★★☆ complexityAI-powered24 nodesOutput Parser StructuredAgentGoogle Gemini ChatTelegramTelegram TriggerN8N Nodes BrowseractHTTP Request
AI & RAG Trigger: Event Nodes: 24 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → 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
{
  "id": "6fYXPpbcKb3bn1nO",
  "name": "Verify service providers using Telegram and BrowserAct",
  "tags": [],
  "nodes": [
    {
      "id": "e639d2f7-1486-473f-b0bc-50b8d905ebd9",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -640,
        400
      ],
      "parameters": {
        "autoFix": true,
        "jsonSchemaExample": " {\"Type\": \"Service\", \"Provider\": \"extracted_provider\", \"Location\": \"extracted_location\"}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "1489a24b-4a92-4e3f-acda-3658d2ed6484",
      "name": "Validate user inputs",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -768,
        208
      ],
      "parameters": {
        "text": "={{ $json.message.text }}",
        "options": {
          "systemMessage": "You are an input classification engine. Your sole purpose is to analyze user text and output a JSON object based on specific criteria. Do not generate conversational text; only output the raw JSON.\n\nRules for Classification (evaluated in order of priority):\n\n1. SERVICE PROVIDER SEARCH (Priority 1):\n   If the user is asking if can trust a specific service provider, professional, or business (e.g., \" Mr Rooter Plumbing\" \" American bank,\" \"mister mechanic aRia\").\n   - CRITICAL CHECK: Does the input contain a specific geographic location (city, state, zip code)?\n     - IF YES (Location is present):\n       - Set \"Type\" to \"Service\".\n       - Extract the Service Provider name as \"Provider\".\n       - Extract the location as \"Location\".\n       - Output format: {\"Type\": \"Service\", \"Provider\": \"extracted_provider\", \"Location\": \"extracted_location\"}\n      - do not contain location in provider section. for example, user input is:\"Mr Rooter Plumbing of Michigan\", you output will be: {\"Type\": \"Service\", \"Provider\": \"Mr Rooter Plumbing \", \"Location\": \"Michigan\"}\n\n     - IF NO (Location is missing):\n       - Treat this strictly as \"NoData\".\n       - Output format: {\"Type\": \"NoData\", \"Provider\": \"Null\" , \"Location\" :\"Null\" }\n\n2. REGULAR CHAT (Priority 2):\n   If the user input is a greeting, small talk, or general conversational filler (e.g., \"Hello,\" \"How are you?\", \"Tell me a joke\").\n   - Output format: {\"Type\": \"Chat\", \"Provider\": \"Null\" , \"Location\" :\"Null\" }\n\n3. INSUFFICIENT DATA (Priority 3):\n   If the user input is gibberish, vague, or if it matched the \"Service Provider\" intent but lacked a location (as per Rule 1).\n   - Output format: {\"Type\": \"NoData\", \"Provider\": \"Null\" , \"Location\" :\"Null\" }\n\nOutput Constraint:\nReturn ONLY the raw JSON object. Do not wrap it in markdown code blocks. Do not add explanations."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "98e514a8-48fe-4321-abdb-2f9ed3fc4622",
      "name": "Validation bot",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -768,
        400
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f2f89193-2846-4b12-bd9b-7f4168f04dd1",
      "name": "Human verification Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        352,
        160
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "cea414f0-feaa-4012-9826-9feaf49d3e40",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "finished"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "cf3a1ab6-d5dc-4641-b3d7-7e8471fe502a",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "paused"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "34483eff-4611-4e27-b2b7-071d50427152",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "failed"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.4
    },
    {
      "id": "56b11eac-c995-4cac-ac79-06b8feee4de6",
      "name": "Verify Data",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1568,
        336
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-pro"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6289d449-c5fc-4fb5-93b7-1d8be5ea8ee5",
      "name": "Ask For human verification",
      "type": "n8n-nodes-base.telegram",
      "position": [
        576,
        224
      ],
      "parameters": {
        "text": "=Please complete the human varification.",
        "chatId": "={{ $('User Sends Message to Bot').item.json.message.chat.id }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "852ed90b-51c9-4a01-9e1a-b0095249fb1b",
      "name": "User Sends Message to Bot",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -944,
        208
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4bbb6003-7a52-4459-93de-249e44091858",
      "name": "Get Vendor Data & Stats",
      "type": "n8n-nodes-browseract.browserAct",
      "position": [
        80,
        176
      ],
      "parameters": {
        "type": "WORKFLOW",
        "timeout": 7200,
        "workflowId": "69094846509475311",
        "workflowConfig": {
          "value": {
            "input-Location": "={{ $json.output.Location }}",
            "input-Provider": "={{ $json.output.Provider }}"
          },
          "schema": [
            {
              "id": "input-Google",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "description": "If left blank, the default value defined in BrowserAct will be used.",
              "displayName": "Google",
              "defaultMatch": true
            },
            {
              "id": "input-opencorporates",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "description": "If left blank, the default value defined in BrowserAct will be used.",
              "displayName": "opencorporates",
              "defaultMatch": true
            },
            {
              "id": "input-Provider",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "description": "If left blank, the default value defined in BrowserAct will be used.",
              "displayName": "Provider",
              "defaultMatch": true
            },
            {
              "id": "input-Location",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "description": "If left blank, the default value defined in BrowserAct will be used.",
              "displayName": "Location",
              "defaultMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "input-Location"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "open_incognito_mode": false
      },
      "credentials": {
        "browserActApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f1a90fff-e216-40c9-bd14-5c5120dfd3dc",
      "name": "Process Initialization Alert",
      "type": "n8n-nodes-base.telegram",
      "position": [
        80,
        32
      ],
      "parameters": {
        "text": "=Ok, I will Search for {{ $json.output.Provider }} located in {{ $json.output.Location }} and varify them .\nplease give me a minute.",
        "chatId": "={{ $('User Sends Message to Bot').item.json.message.chat.id }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ba0a5c1d-b3bf-47a6-ab40-283456183f93",
      "name": "Give Time to Complete Verification",
      "type": "n8n-nodes-base.wait",
      "position": [
        800,
        224
      ],
      "parameters": {
        "unit": "minutes",
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "dad70b7c-70e1-4333-b8a1-05dfa75df3f7",
      "name": "Analyze Data & Verify Providers",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1568,
        144
      ],
      "parameters": {
        "text": "=google and opencorporates data : {{ $json.output.string }},\nservice name (given by user) : {{ $('Validate user inputs').first().json.output.Provider }}",
        "options": {
          "systemMessage": "Role: You are an intelligent Business Verification & Data Analysis Bot. Your goal is to cross-reference \"Service Provider\" data (from Google) against \"Corporate Registry\" data (from OpenCorporates) to verify the legitimacy of a business.\n\nInputs:\n\ngoogle_data: JSON list (service_provider_name, score, address, reviews).\n\ncorporate_data: JSON list (company_name, address, alternative_names).\n\nuser_query: The business name the user is looking for.\n\nAnalysis Logic:\n\nMarket Presence: Analyze google_data matching the user_query. Calculate total active locations, average rating, and total review volume. Identify key cities/areas.\n\nTop Locations: Identify the top 3 specific branches based on score and review count.\n\nVerification Check: Compare google_data against corporate_data.\n\nMatch: If a valid company_name exists in corporate_data and matches the Google provider (via name or address).\n\nNo Match / Missing Data: If google_data exists but corporate_data is empty, null, or lacks a \"company_name\".\n\nResponse Protocols (HTML Only):\n\nScenario 1: \u2705 Verified (Match Found)\n\nHeader: \u2705 <b>Verified Business Report: [Name]</b>\n\nBody: Provide the Market Analysis and Top Locations.\n\nVerification Section: State \"Status: MATCHED\". Display the company_name and alternative_names from corporate_data.\n\nScenario 2: \u26a0\ufe0f Unverified / Local Only (Google Found, OpenCorporates Missing)\n\nHeader: \u26a0\ufe0f <b>Verification Warning: [Name]</b>\n\nBody: Provide the Market Analysis and Top Locations (since Google data exists).\n\nVerification Section:\n\nYou must state: \"We found this business in local listings, but we <u>could not verify</u> them against our corporate database.\"\n\nExplicitly mention that corporate_data (OpenCorporates) returned no valid match for this entity.\n\nAdd a warning: \"<i>Please manually check the validity of this entity.</i>\"\n\nScenario 3: \ud83d\udeab Not Found\n\nIf google_data is empty, state clearly that the business could not be found in local search results.\n\nFormatting Rules:\n\nUse ONLY Telegram-supported HTML tags: <b>, <i>, <u>, <s>, <a>, <code>, <pre>.\n\nDo NOT use Markdown (no **, __, or ##).\n\nTone: Professional, reassuring, and concise.\n\nExample Output (Scenario 2 - Local Only)\n\u26a0\ufe0f <b>Verification Warning: Mr Rooter Plumbing</b>\n\n\ud83d\udd0d <b>Market Analysis</b> We searched our database and found <b>12 service locations</b> active in the region (Detroit, Grand Rapids). \u2022 Total Reviews: ~6,500+ \u2022 Average Score: 4.7/5.0\n\n\ud83c\udfc6 <b>Top Rated Branches</b> \ud83d\udccd <b>Mr. Rooter of Kalamazoo</b> 4.9 \u2b50 (200 reviews) \ud83d\udccd <b>Mr. Rooter of Detroit</b> 4.8 \u2b50 (2,199 reviews)\n\n\ud83d\udeab <b>Database Verification Failed</b> We found this business in local maps, but we <u>could not verify</u> them with our corporate database (OpenCorporates). No matching corporate registry files were found.\n\n<i>Please proceed with caution or verify manually.</i>"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "90b6c7ea-e976-4b07-a035-832f5a9f5aff",
      "name": "Get Data From BrowserAct",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1024,
        224
      ],
      "parameters": {
        "url": "https://api.browseract.com/v2/workflow/get-task",
        "options": {},
        "sendQuery": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "task_id",
              "value": "={{ $('Get Vendor Data & Stats').item.json.id }}"
            }
          ]
        },
        "nodeCredentialType": "browserActApi"
      },
      "credentials": {
        "browserActApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "5a0c9320-4b13-436c-a6d8-a3403f12348b",
      "name": "Send Failure Alert",
      "type": "n8n-nodes-base.telegram",
      "position": [
        576,
        384
      ],
      "parameters": {
        "text": "=Sorry we facing problem right now.",
        "chatId": "={{ $('User Sends Message to Bot').item.json.message.chat.id }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d91455f4-9ad9-4d83-85f5-b94f37ae7a00",
      "name": "Result Post Delivery",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1952,
        144
      ],
      "parameters": {
        "text": "={{ $json.output.Text }}",
        "chatId": "={{ $('User Sends Message to Bot').item.json.message.chat.id }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "aaf16d2a-a59c-4086-aeb8-bd7defcfd948",
      "name": "Answer the User",
      "type": "n8n-nodes-base.telegram",
      "position": [
        160,
        432
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "chatId": "={{ $('User Sends Message to Bot').item.json.message.chat.id }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "536e1897-f467-465e-b2cb-4511a355e8fa",
      "name": "Chat bot Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -144,
        432
      ],
      "parameters": {
        "text": "=Input type : {{ $json.output.Type }} | User Input : {{ $('User Sends Message to Bot').item.json.message.text }}",
        "options": {
          "systemMessage": "if the input type is \"Nodata\" ask the user to provide the location for service they asked for\n\nif the input type is chat, analyze the user input and generate single response\n\nsend the result out as a raw text.\navoid using any tags notations like ```text ```"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "bd5b897f-ae62-4bff-965c-da8cfcff5386",
      "name": "Chat bot",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -144,
        576
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e33cce1b-6e27-4c67-ade3-8250ee0dabad",
      "name": "Validation Type Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        -416,
        192
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "9e003f66-d011-459a-a313-b603c0e14551",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.Type }}",
                    "rightValue": "Service"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "2ebb24ec-bd32-4e96-a022-93d066fda17f",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.Type }}",
                    "rightValue": "Chat"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "24d355dd-efec-4946-96fe-3d82f3ee4d71",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.Type }}",
                    "rightValue": "NoData"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.4
    },
    {
      "id": "16d690c9-f604-49be-8730-aac1d0148e2e",
      "name": "Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1328,
        -352
      ],
      "parameters": {
        "width": 380,
        "height": 504,
        "content": "## \u26a1 Workflow Overview & Setup\n\n**Summary:** This automation verifies service providers by cross-referencing local business listings from Google against official corporate registries via OpenCorporates, delivering a legitimacy report through Telegram.\n\n### Requirements\n* **Credentials:** Telegram, BrowserAct, Google Gemini (PaLM).\n* **Mandatory:** BrowserAct API (Template: **Vendor Vetting and verification bot**)\n\n### How to Use\n1.  **Credentials:** Set up your Telegram, BrowserAct, and Google Gemini credentials in n8n.\n2.  **BrowserAct Template:** Ensure you have the **Vendor Vetting and verification bot** template saved in your BrowserAct account.\n3.  **Interaction:** Send a message to your bot containing a provider name and location (e.g., \"Can I trust Mr Rooter Plumbing in Michigan?\").\n\n### Need Help?\n[How to Find Your BrowserAct API Key & Workflow ID](https://docs.browseract.com)\n[How to Connect n8n to BrowserAct](https://docs.browseract.com)\n[How to Use & Customize BrowserAct Templates](https://docs.browseract.com)"
      },
      "typeVersion": 1
    },
    {
      "id": "d2e37ea4-f948-4b51-a163-06b38dcb0a83",
      "name": "Step 1 Explanation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 636,
        "height": 108,
        "content": "### \ud83d\udd0d Step 1: Input Validation\n\nThe workflow analyzes incoming Telegram messages to extract the service provider name and geographic location. If essential data is missing or the input is casual chat, the bot responds accordingly via an AI agent."
      },
      "typeVersion": 1
    },
    {
      "id": "434583d3-f86c-4817-a48c-524c9bf93954",
      "name": "Step 2 Explanation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        -96
      ],
      "parameters": {
        "color": 7,
        "width": 1132,
        "height": 108,
        "content": "### \ud83c\udf10 Step 2: Automated Data Extraction\n\nBrowserAct performs a dual search, scraping market presence data (reviews/ratings) from Google and corporate registry status from OpenCorporates. It handles human verification challenges if they arise during the session."
      },
      "typeVersion": 1
    },
    {
      "id": "2f800a74-f127-4368-829b-ba888e2dadfb",
      "name": "Step 3 Explanation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1440,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 732,
        "height": 108,
        "content": "### \ud83d\udcca Step 3: Analysis & Verification\n\nAn AI agent cross-references the local map listings with official corporate data. It calculates branch ratings, review volumes, and issues a final verification status: Verified, Unverified (Local Only), or Not Found."
      },
      "typeVersion": 1
    },
    {
      "id": "051ee6c6-a5d5-4282-8da8-a737ac418614",
      "name": "Step 4 Explanation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        688
      ],
      "parameters": {
        "color": 7,
        "width": 580,
        "height": 120,
        "content": "### \ud83d\udcac Step 2-2: Conversational Fallback\n\nIf no location is present in the user's message, this branch engages the user in natural conversation or prompts them to provide a location for processing."
      },
      "typeVersion": 1
    },
    {
      "id": "04112fa9-322c-4087-b100-7da9d0e31213",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        -352
      ],
      "parameters": {
        "color": 6,
        "width": 624,
        "height": 368,
        "content": "@[youtube](OS3pWKptxDw)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d244182f-f50b-4430-8472-2fca75ddc420",
  "connections": {
    "Chat bot": {
      "ai_languageModel": [
        [
          {
            "node": "Chat bot Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Verify Data": {
      "ai_languageModel": [
        [
          {
            "node": "Analyze Data & Verify Providers",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Chat bot Agent": {
      "main": [
        [
          {
            "node": "Answer the User",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validation bot": {
      "ai_languageModel": [
        [
          {
            "node": "Validate user inputs",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Structured Output Parser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Validate user inputs": {
      "main": [
        [
          {
            "node": "Validation Type Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validation Type Switch": {
      "main": [
        [
          {
            "node": "Process Initialization Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Vendor Data & Stats",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Chat bot Agent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Chat bot Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Vendor Data & Stats": {
      "main": [
        [
          {
            "node": "Human verification Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Data From BrowserAct": {
      "main": [
        [
          {
            "node": "Analyze Data & Verify Providers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Validate user inputs",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Human verification Switch": {
      "main": [
        [
          {
            "node": "Analyze Data & Verify Providers",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Ask For human verification",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Failure Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "User Sends Message to Bot": {
      "main": [
        [
          {
            "node": "Validate user inputs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ask For human verification": {
      "main": [
        [
          {
            "node": "Give Time to Complete Verification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Data & Verify Providers": {
      "main": [
        [
          {
            "node": "Result Post Delivery",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Give Time to Complete Verification": {
      "main": [
        [
          {
            "node": "Get Data From BrowserAct",
            "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

This workflow transforms your Telegram bot into an intelligent vendor vetting tool. Send the name and location of a service provider (e.g., "Mr. Rooter in Detroit"), and it will automatically scrape Google Maps for reviews, cross-reference the business with OpenCorporates to…

Source: https://n8n.io/workflows/12432/ — 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

Creators, marketers, and brands that want to turn a single product photo into premium motion clips, then optionally publish to Instagram/TikTok/YouTube via LATE. No editing skills required.

Telegram, Agent Tool, Telegram Trigger +5
AI & RAG

Product to Social Video (xCodeWraith Edition). Uses telegram, agentTool, telegramTrigger, httpRequest. Event-driven trigger; 83 nodes.

Telegram, Agent Tool, Telegram Trigger +5
AI & RAG

This workflow transforms your Telegram bot into an intelligent creative assistant. It can chat conversationally, fetch trending image prompts from PromptHero for inspiration, or perform a deep "remix"

Telegram Trigger, Output Parser Structured, Telegram +6
AI & RAG

This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.

OpenAI Chat, Memory Buffer Window, Output Parser Structured +11
AI & RAG

LinkedIn URL → Scrape → Match → Screen → Decide, all automated

Google Drive, Agent, Google Drive Tool +6