AutomationFlowsAI & RAG › Discover Business Leads with Gemini, Brave Search and Web Scraping

Discover Business Leads with Gemini, Brave Search and Web Scraping

ByJez @jez on n8n.io

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Event trigger★★★★★ complexityAI-powered30 nodesGoogle Gemini ChatMemory Buffer WindowN8N Nodes McpJina Ai ToolMcp TriggerTool WorkflowAgentExecute Workflow Trigger
AI & RAG Trigger: Event Nodes: 30 Complexity: ★★★★★ AI nodes: yes Added:

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

This workflow follows the Agent → Execute Workflow Trigger 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": "tqyzrnyfFxB3x8LO",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Prospect Discovery",
  "tags": [],
  "nodes": [
    {
      "id": "dc30089e-2dea-4cba-ae74-f043240b5176",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -40,
        1560
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-flash-preview-05-20"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "27d02a47-659e-4b6a-8c5f-50253fc5be1c",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        820,
        1620
      ],
      "parameters": {
        "sessionKey": "={{ $execution.id }}",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "b791c4dd-bdc8-4d38-a301-ababb9ff129f",
      "name": "brave_web_search",
      "type": "n8n-nodes-mcp.mcpClientTool",
      "position": [
        1160,
        1300
      ],
      "parameters": {
        "toolName": "brave_web_search",
        "operation": "executeTool",
        "connectionType": "http",
        "toolParameters": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Tool_Parameters', `Generate a JSON object with the parameters for the 'brave_web_search' tool.\nThe tool expects a JSON object with the following keys:\n- \"query\": (string, **required**) The search terms designed to find multiple examples of a business type in a given area. Examples: \"list of crane hire companies in Newcastle NSW\", \"artisan bakeries Sydney CBD reviews\", \"marketing agencies California specializing in tech startups\".\n- \"count\": (number, optional) Number of results. For prospect discovery, a higher count (e.g., 10-20) might be useful to cast a wider net.\n- \"offset\": (number, optional) For pagination if analyzing multiple pages of results.\n\nExample:\n{\"query\": \"top rated plumbing services in Bristol UK\", \"count\": 15}`, 'json') }}",
        "descriptionType": "manual",
        "toolDescription": "Performs a general web search using Brave Search. Primarily used to find lists, directories, articles, or multiple mentions of businesses matching a specified type and location. The goal is to identify several potential prospect company names and their websites, not just one official site. Effective for initial broad sweeps to gather candidate businesses. Parameters: 'query' (required string), 'count' (optional number, max 20), 'offset' (optional number)."
      },
      "credentials": {
        "mcpClientHttpApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d33f89c7-ed40-427e-9f2c-b699194e860e",
      "name": "brave_local_search",
      "type": "n8n-nodes-mcp.mcpClientTool",
      "position": [
        1720,
        1300
      ],
      "parameters": {
        "toolName": "brave_local_search",
        "operation": "executeTool",
        "connectionType": "http",
        "toolParameters": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Tool_Parameters', `Generate a JSON object with the parameters for the 'brave_local_search' tool.\nThe tool expects a JSON object with the following keys:\n- \"query\": (string, **required**) The search terms, typically a specific business name and its suspected city/area, to get a quick local listing check. Example: \"ABC Cranes Newcastle\", \"The Corner Bakery Springfield\".\n- \"count\": (number, optional) Usually 1 or a small number (e.g., 3) is sufficient, as you're checking a specific entity.\n\nExample:\n{\"query\": \"Summit Logistics, Dallas TX\", \"count\": 1}`, 'json') }}",
        "descriptionType": "manual",
        "toolDescription": "Searches for local business listings using Brave Local Search. In prospect discovery, this tool can be used sparingly to quickly verify if a business name found through broader searches has a local presence or to find a website URL if it's not immediately apparent from web search results. Not the primary tool for initial discovery of types, but useful for quick validation of individual potential prospects from a list. Parameters: 'query' (required string), 'count' (optional number, usually 1-3 for this purpose)."
      },
      "credentials": {
        "mcpClientHttpApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d2cd00e1-bb22-4a6d-a7c5-bcf299883396",
      "name": "jina_ai_web_page_scraper",
      "type": "n8n-nodes-base.jinaAiTool",
      "position": [
        2880,
        1300
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `Provide the full URL of a potential prospect's homepage or 'About Us' page. Use this only if you need to quickly verify from the website's text if the business matches the desired type before finalizing it as a prospect. Example: 'https://potentialprospect.com/about'.`, 'string') }}",
        "options": {
          "outputFormat": "markdown",
          "enableImageCaptioning": true
        },
        "requestOptions": {},
        "descriptionType": "manual",
        "toolDescription": "Extracts main textual content from a given web page URL. In prospect discovery, use this very selectively and sparingly. If a promising business website is found but it's unclear if they are the correct business type, a quick scrape of their homepage or 'About Us' page can help confirm relevance before adding them to the prospect list. Not for deep information extraction at this stage. Parameter: 'url' (required string). Critical: Use for 1-2 URLs max for quick validation if needed, due to time limits."
      },
      "credentials": {
        "jinaAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "27045509-9f22-4fd8-a753-5d5e2109caa7",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        680,
        -940
      ],
      "parameters": {
        "color": 7,
        "width": 940,
        "height": 460,
        "content": "## \ud83d\udcde MCP Client Configuration (for Prospect Discovery Service)\n\nExternal clients can configure this agent as a tool to discover lists of potential business prospects.\n\n    **Example Client Tool Configuration (e.g., for Roo Code/Cline):**\n\n\n    \"prospect-discovery\": {\n      \"url\": \"https://SERVER/mcp/PATHTOYOURMCP/sse\",\n      \"alwaysAllow\": [\n        \"discover_prospect\"\n      ]\n    }\n\n\n*Note: The tool_name here (prospect-discovery) is how the client would refer to this entire MCP service. The alwaysAllow refers to the tool exposed by this Prospect Discovery MCP server.*"
      },
      "typeVersion": 1
    },
    {
      "id": "4cc52e11-b88f-44ec-8411-4e6f8cdb725c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -860,
        -420
      ],
      "parameters": {
        "color": 4,
        "width": 840,
        "height": 420,
        "content": "## \ud83d\udce1 prospect_discovery (MCP Server Trigger - Optional Endpoint)\n\n\ud83d\udeaa **Optional Entry Point for External Prospect Discovery Requests**\n*   **Purpose:** If this workflow is exposed as a direct MCP service, this node receives requests from external clients (e.g., other n8n workflows, applications) looking to get a list of business prospects.\n*   **Function:** Listens for HTTP POST requests formatted according to the MCP (Multi-Capability Peer) protocol.\n*   **Tool Exposed:** Would expose the `discover_prospect` tool capability (defined by the connected Tool Workflow node) to the external caller.\n*   **Typical Input:** A JSON payload from the client specifying `tool_name: \"discover_prospect\"` (or similar, matching the exposed tool) and `tool_input` containing `business_type`, `location_query`, `desired_num_prospects`, and `additional_keywords`.\n*   **Typical Output:** Parses the incoming request and passes the `tool_input` to the `discover_prospect` (Tool Workflow) node, initiating the Prospect Discovery Agent's process.\n*   **Note:** This workflow is also designed to be called as a sub-workflow directly (e.g., by the \"60s Referral Planner\"), which might be its primary use case."
      },
      "typeVersion": 1
    },
    {
      "id": "e69f1690-e3f8-43a4-b258-a562db2d4338",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -860,
        60
      ],
      "parameters": {
        "color": 4,
        "width": 840,
        "height": 320,
        "content": "## \u27a1\ufe0f discover_prospect (Tool Workflow Node)\n\n\ud83d\udcde **Invokes the Prospect Discovery Agent Logic**\n*   **Purpose:** This node acts as the bridge, formally calling the `prospect_discovery_agent`'s core logic.\n*   **Triggered by:**\n    1.  The `prospect_discovery` (MCP Trigger) node, if this workflow is called as an external MCP service.\n    2.  A parent workflow (like \"60s Referral Planner\") that uses this \"Prospect Discovery\" workflow as a tool/sub-workflow.\n*   **Action:** Calls the \"Prospect Discovery\" workflow itself by triggering the `prospect_discovery_workflow` (Execute Workflow Trigger node within this same n8n workflow).\n*   **Inputs:** Receives `business_type`, `location_query`, `desired_num_prospects`, and `additional_keywords` from the calling source (either MCP Trigger or parent workflow's tool call).\n*   **Outputs:** Passes these inputs to the `prospect_discovery_workflow` (Execute Workflow Trigger). The final JSON list of prospects, compiled by the `prospect_discovery_agent`, will be the result of this tool call."
      },
      "typeVersion": 1
    },
    {
      "id": "cebaa441-7072-42f4-abb6-52dff61d38ae",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        680,
        -460
      ],
      "parameters": {
        "color": 7,
        "width": 940,
        "height": 400,
        "content": "## \ud83d\uddfa\ufe0f Main MCP Server Workflow Overview (Prospect Discovery Service)\n\n**Agent Name:** Prospect Discovery Agent\n*   **Gateway Function (If Exposed):** This workflow *could* act as an MCP Server, making the \"Prospect Discovery Agent\" directly callable by external systems.\n*   **Trigger (If Exposed):** A dedicated `prospect_discovery_mcp_trigger` (MCP Trigger node) would receive external requests to find lists of prospects.\n*   **Tool Workflow Node (If Exposed):** A `discover_prospects_mcp_tool` (Tool Workflow node) would package the incoming request (business type, location, etc.) and invoke this agent's core logic.\n*   **Data Flow (If Exposed):** External Request -> `prospect_discovery_mcp_trigger` -> `discover_prospects_mcp_tool` -> `prospect_discovery_workflow` (Execute Workflow Trigger, starts agent logic).\n*   **Primary Design:** Note that this workflow is primarily designed as a sub-workflow. Exposing it directly as an MCP service is an optional extension."
      },
      "typeVersion": 1
    },
    {
      "id": "44491f1b-4042-45b3-9fb7-87a96212d2c2",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        -1240
      ],
      "parameters": {
        "color": 3,
        "width": 740,
        "height": 280,
        "content": "## \ud83d\udcc4 Workflow Information: Prospect Discovery Agent\n\n*   **Workflow Name:** Prospect Discovery Agent\n*   **Version:** 1.0.0\n*   **Last Updated:** 2025-06-12\n*   **\ud83d\udc64 Author:** Jeremy Dawes, Jezweb ([www.jezweb.com.au](https://www.jezweb.com.au/))\n*   **Description:** This workflow functions as a specialized AI agent dedicated to identifying a list of potential business prospects (names and website URLs). It takes a business type, location query, and other criteria as input, uses search tools to find matching businesses, and returns a structured list. It's designed to be called as a tool by other orchestrating agents (like the \"60s Referral Planner\")."
      },
      "typeVersion": 1
    },
    {
      "id": "4805790c-b4e7-4f37-949a-2d9a62bce598",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2480,
        -80
      ],
      "parameters": {
        "color": 2,
        "width": 740,
        "height": 560,
        "content": "## \u2705 TODO / Future Enhancements (Prospect Discovery Agent)\n\n*   [ ] **Improve Location Disambiguation:** Add more sophisticated logic if the `location_query` is ambiguous or very broad.\n*   [ ] **Confidence Scoring:** Could the agent assign a confidence score to each prospect found based on how well it matches the criteria?\n*   [ ] **Negative Keywords:** Allow input for negative keywords (e.g., \"find bakeries, NOT specializing in wedding cakes\").\n*   [ ] **Alternative Directory Searching:** Explicitly add a tool or logic to search specific online business directories if relevant for certain `business_type` inputs.\n*   [ ] **Batching/Pagination for Large Areas:** If a `location_query` is very large (e.g., \"all of USA\"), implement a strategy to break down the search.\n*   [ ] **Allow specifying number of results per search tool call** to better control the initial pool of candidates.\n*   [ ] **Refine criteria for using `jina_ai_web_page_scraper`:** Make the conditions for its use even more stringent in the system prompt."
      },
      "typeVersion": 1
    },
    {
      "id": "249f9bfb-b92f-4bf5-ad59-300271da9bff",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -740,
        720
      ],
      "parameters": {
        "color": 4,
        "width": 640,
        "height": 520,
        "content": "## \ud83c\udfc1 Sub-Workflow Start: Prospect Discovery Logic\n(Node: `prospect_discovery_workflow` - Execute Workflow Trigger)\n\n\ud83c\udfaf **Initiates the Prospect Identification Process**\n*   **Purpose:** This is the internal entry point for the \"Prospect Discovery Agent's\" core logic. It's triggered when the `discover_prospect` tool (from the \"60s Referral Planner\" workflow) is called.\n*   **Receives:**\n    *   `business_type`: The category of business to find.\n    *   `location_query`: The geographical area for the search.\n    *   `desired_num_prospects`: How many prospects to aim for.\n    *   `additional_keywords`: Optional search refinements.\n*   **Passes Data To:** The `prospect_discovery_agent` (AI Agent) node to begin the process of identifying potential business leads."
      },
      "typeVersion": 1
    },
    {
      "id": "89ff4b9f-d13a-4ec4-af43-77f56fd2de03",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        20,
        620
      ],
      "parameters": {
        "color": 4,
        "width": 740,
        "height": 620,
        "content": "## \ud83e\udde0 prospect_discovery_agent (Core Logic)\n\n\ud83d\udd0d **The Prospect Identification Engine**\n*   **Purpose:** Processes the request to find a list of potential business prospects (names and websites) based on type, location, and other criteria, using available search tools and LLM reasoning.\n*   **Model:** `models/gemini-2.5-flash-preview-05-20` (or your chosen model, via the connected `Google Gemini Chat Model` node).\n*   **System Prompt:** Defined within this agent node. This prompt is CRITICAL and guides the AI on:\n    *   Its specific mission (finding a list of prospects).\n    *   How to interpret input parameters (`business_type`, `location_query`, etc.).\n    *   Strategic use of its tools (`brave_web_search`, `google_gemini_business_search`, selective `brave_local_search`, and very rare `jina_ai_web_page_scraper` for quick validation).\n    *   The precise JSON output format required (an array of business objects).\n*   **Tools Used (with a Prospect Discovery focus):**\n    *   `brave_web_search`: For broad sourcing of potential candidates.\n    *   `google_gemini_business_search`: For advanced and contextual discovery of multiple businesses.\n    *   `brave_local_search`: Selectively for quick URL finding for an already identified name.\n    *   `jina_ai_web_page_scraper`: VERY sparingly for rapid relevance checks on uncertain websites.\n*   **Memory Setup:** Uses `Planner Memory` (or your named `Simple Memory` node for this workflow) to retain short-term context for the LLM during its multi-step search process.\n*   **Input:** Receives `business_type`, `location_query`, `desired_num_prospects`, and `additional_keywords` from the `prospect_discovery_workflow` trigger.\n*   **Output:** A JSON array of prospect objects, each containing `business_name` and `website_url`. This output becomes the result of the `discover_prospect` tool call in the parent workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "b73ca6ea-094f-487f-ab64-4a9c08d8d6d5",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        260,
        1660
      ],
      "parameters": {
        "color": 6,
        "width": 620,
        "height": 340,
        "content": "## \ud83d\udcbe Agent Memory (Planner Memory / Simple Memory)\n\n\ud83e\udde0 **Short-Term Recall for Prospect Search**\n*   **Purpose:** Provides conversational memory to the `prospect_discovery_agent`, allowing it to remember previous tool calls and results within a single execution of its task (e.g., remembering businesses already found to avoid duplicates, or recalling search strategies that were or weren't effective).\n*   **Type:** Window Buffer Memory (keeps a limited history of interactions for the current discovery task).\n*   **Session Key:** `={{ $execution.id }}` (Ensures memory is unique to each specific prospect discovery request).\n*   **Importance:** Helps the agent conduct a more coherent multi-step search process to build its list of prospects."
      },
      "typeVersion": 1
    },
    {
      "id": "923fa510-9f62-4295-a604-72d02406d01a",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        720
      ],
      "parameters": {
        "color": 5,
        "width": 460,
        "height": 620,
        "content": "## \ud83d\udee0\ufe0f Tool: brave_web_search (Prospect Discovery Context)\n\n\ud83c\udf10 **Broad Prospect Sourcing & List Generation**\n*   **Connection:** Uses `smithery brave search` credential.\n*   **Purpose for Prospect Discovery:** Performs general web searches to identify multiple potential businesses matching a given type, location, and keywords. Used to find directories, articles listing companies, or general search results that indicate several candidate businesses.\n*   **AI Interaction (Prospect Discovery Agent):**\n    *   Agent formulates queries to cast a wide net, e.g., `\"list of [business_type] in [location_query]\"`, `\"top [business_type] [location_query] [keywords]\"`.\n    *   Agent analyzes search snippets for company names and potential website URLs.\n    *   Aims to gather a pool of initial candidates. It might use a higher `count` (e.g., 10-20) in its parameters for this tool.\n    *   Example AI-generated params: `{\"query\": \"artisan coffee roasters in Portland Oregon\", \"count\": 15}`\n*   **Output:** Search results (list of URLs, snippets) used to compile an initial list of potential prospect names and websites."
      },
      "typeVersion": 1
    },
    {
      "id": "69d2a0c8-6535-424e-8663-7d99e225d441",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1540,
        720
      ],
      "parameters": {
        "color": 5,
        "width": 460,
        "height": 620,
        "content": "## \ud83d\udee0\ufe0f Tool: brave_local_search (Prospect Discovery Context - Limited Use)\n\n\ud83d\udccd **Quick Validation & URL Sniffing for Potential Prospects**\n*   **Connection:** Uses `smithery brave search` credential.\n*   **Purpose for Prospect Discovery:** Used very selectively. If a promising company name is found via `brave_web_search` or `google_gemini_prospect_finder` but its website isn't immediately clear, this tool can quickly check for a local listing in the target area to try and find an official website URL or confirm its local presence.\n*   **AI Interaction (Prospect Discovery Agent):**\n    *   Agent uses this for specific company names identified in earlier, broader searches.\n    *   Example: After finding \"Acme Widgets\" as a potential, agent might query `{\"query\": \"Acme Widgets [location_query]\"}` to find its website from a local result.\n    *   NOT used for the initial broad discovery of business types. Usually, `count: 1` is sufficient.\n*   **Output:** Local search results, primarily to extract a website URL or confirm the existence of a *specific, already identified* potential prospect."
      },
      "typeVersion": 1
    },
    {
      "id": "376c605e-7453-43b4-8d86-ebc701165e0a",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2120,
        720
      ],
      "parameters": {
        "color": 5,
        "width": 460,
        "height": 620,
        "content": "## \ud83d\udee0\ufe0f Tool: google_gemini_prospect_finder (Prospect Discovery Context)\n\n\u2728 **Advanced Prospect Sourcing & Contextual Discovery**\n*   **Connection:** Uses `Gemini Credentials account` credential.\n*   **Purpose for Prospect Discovery:** Leverages Google Gemini's advanced search to identify potential businesses based on type, location, and nuanced criteria. Useful for discovering businesses mentioned in context (articles, discussions) or when broader queries are needed to identify multiple candidates. Can supplement `brave_web_search`.\n*   **AI Interaction (Prospect Discovery Agent):**\n    *   Agent uses this for queries like: `\"Find examples of [business_type] serving [location_query] with a focus on [keywords]\"`, `\"companies in [industry] in [region]\"`.\n    *   Helps identify businesses that might not appear in simple directory listings.\n    *   Agent scans results for multiple company names and their websites.\n    *   Example AI-generated params: `{\"query\": \"eco-friendly packaging suppliers in Northern Europe\"}`\n*   **Output:** Rich search results, from which the agent extracts potential business names and website URLs for the prospect list."
      },
      "typeVersion": 1
    },
    {
      "id": "38df04af-6a16-48b9-b028-3025c74131f5",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2700,
        720
      ],
      "parameters": {
        "color": 5,
        "width": 460,
        "height": 620,
        "content": "## \ud83d\udee0\ufe0f Tool: jina_ai_web_page_scraper (Prospect Discovery Context - VERY Limited Use)\n\n\ud83d\udcc4 **Rapid Relevance Check for Uncertain Prospects**\n*   **Connection:** Uses `Jina AI account` credential.\n*   **Purpose for Prospect Discovery:** Used EXTREMELY SPARINGLY and only as a final check. If a website is found for a potential prospect, but it's highly unclear from the URL or search snippet if they truly match the `business_type`, this tool can scrape the homepage or \"About Us\" page. The agent then quickly scans the text for keywords to confirm relevance before adding to the final prospect list.\n*   **AI Interaction (Prospect Discovery Agent):**\n    *   Agent provides URL of a single, uncertain prospect's page (e.g., homepage or about page).\n    *   Agent instructs itself (via its system prompt) to look for specific keywords related to `business_type` in the scraped text.\n    *   **NOT for detailed information extraction or profiling at this stage.** Goal is quick go/no-go relevance validation.\n    *   Example AI-generated params: `{\"url\": \"https://ambiguouscompany.com/about\"}`\n*   **Output:** Markdown content of the scraped page. **CRITICAL: Use for 1-2 URLs MAX per run for quick validation only due to time limits and the discovery phase's need for speed.**"
      },
      "typeVersion": 1
    },
    {
      "id": "6c8a16f5-cb1d-46f3-8a75-688914e3a6c5",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        -900
      ],
      "parameters": {
        "color": 2,
        "width": 740,
        "height": 500,
        "content": "## \ud83d\udca1 n8n AI Agent as a Specialized Sub-Workflow (Prospect Discovery Pattern)\n\n**This workflow implements a specialized n8n AI Agent designed to be called as a tool or sub-workflow by another parent agent.**\n*   **What this \"Agent Logic\" part does:** Implements the core intelligence for discovering potential business prospects. It receives criteria (business type, location, etc.), uses its LLM (`Google Gemini Chat Model`) and a suite of search tools (`brave_web_search`, `google_gemini_business_search`, and very selectively `brave_local_search`, `jina_ai_web_page_scraper`) to identify a list of businesses, and then formats this list as a structured JSON output.\n*   **How it works internally:** The `prospect_discovery_agent` node orchestrates tool calls based on its system prompt and the input criteria. Its primary goal is to generate a list of relevant business names and websites, not deep profiles.\n*   **Why this pattern is useful:**\n    1.  **Modularity & Specialization:** Complex tasks (like broad prospect discovery vs. specific business lookup) are broken down into specialized agents, making each agent simpler and more effective at its specific job.\n    2.  **Reusability:** This Prospect Discovery agent could potentially be called by other workflows in the future that need to identify types of businesses.\n    3.  **Clarity:** Separating discovery logic from detailed research logic keeps each workflow cleaner."
      },
      "typeVersion": 1
    },
    {
      "id": "c8cd4af9-911a-4175-ae49-98b27c1f1558",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        -360
      ],
      "parameters": {
        "color": 2,
        "width": 740,
        "height": 460,
        "content": "## \ud83d\udd11 External Service Credentials (Prospect Discovery Agent Logic)\n\nList of credentials used by tools within this Prospect Discovery agent:\n\n1.  **Tool Nodes:** `brave_web_search`, `brave_local_search` (selective use)\n    *   **n8n Credential Name:** `smithery brave search`\n    *   **Target Service (Example):** Smithery MCP for Brave Search\n2.  **Tool Node:** `Google Gemini Chat Model` (LLM for the `prospect_discovery_agent`)\n    *   **n8n Credential Name:** `Google Gemini Context7` (or your specific Gemini credential)\n    *   **Target Service:** Google AI (Generative Language API)\n3.  **Tool Node:** `google_gemini_business_search`\n    *   **n8n Credential Name:** `Gemini Credentials account` (or your specific Gemini credential for search)\n    *   **Target Service:** Google AI (Gemini Search API / Vertex AI Search)\n4.  **Tool Node:** `jina_ai_web_page_scraper` (very selective use for relevance check)\n    *   **n8n Credential Name:** `Jina AI account`\n    *   **Target Service:** Jina AI API"
      },
      "typeVersion": 1
    },
    {
      "id": "31a06a5a-c805-48c0-889a-e72a4192b341",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -720,
        1600
      ],
      "parameters": {
        "color": 6,
        "width": 740,
        "height": 260,
        "content": "## \u2699\ufe0f Key LLM & Agent Settings (Prospect Discovery Logic Area)\n\n*   **LLM Model:** `models/gemini-2.5-flash-preview-05-20` (Configured in the `Google Gemini Chat Model` node connected to the `prospect_discovery_agent`).\n*   **System Prompt Location:** Crucially defined within the `prospect_discovery_agent` node, in the \"Options\" -> \"System Message\" parameter. This prompt dictates the agent's specialized behavior for finding lists of prospects.\n*   **Memory Type/Key:** Window Buffer Memory (using the `Planner Memory` or your named `Simple Memory` node for this workflow), with the Session Key typically set to `={{ $execution.id }}` to ensure memory is isolated for each run of the prospect discovery task."
      },
      "typeVersion": 1
    },
    {
      "id": "d982e681-f48e-4020-9d6b-cf862f24ace7",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2480,
        -900
      ],
      "parameters": {
        "color": 2,
        "width": 740,
        "height": 360,
        "content": "## \ud83c\udfaf Sub-Workflow: Business Finder Core Logic (Agent Logic Area)\n\n*   **Purpose:** This section of the workflow is dedicated to understanding the user's business search request, strategically utilizing search and scraping tools, and synthesizing the findings into a comprehensive and helpful formatted response for sales prospecting.\n*   **Expected Input Details (from `business_finder_workflow` trigger, originating from the `find_business` tool call):**\n    *   `query`: (string) A natural language query describing the business to find. This can include business name, type, industry, location hints, known website, or specific information sought (e.g., \"Acme Corp New York contact details\", \"find owner of bestlocalplumber.com\", \"tech startups in Austin with less than 50 employees\")."
      },
      "typeVersion": 1
    },
    {
      "id": "f23b12e0-a347-4b85-ae2c-17f50f2b2e98",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2480,
        -500
      ],
      "parameters": {
        "color": 2,
        "width": 740,
        "height": 400,
        "content": "## \ud83d\udee0\ufe0f Troubleshooting Tips (Prospect Discovery Agent Logic)\n\n*   **Check `prospect_discovery_agent` Logs:** Examine execution logs for tool call details (especially the queries sent to search tools), LLM interactions, and any errors during the list generation.\n*   **Test Search Tools Individually:** If the agent struggles to find prospects, manually test the `brave_web_search` and `google_gemini_business_search` nodes with the types of queries the agent *should* be making to see if the underlying search services can find relevant businesses.\n*   **Review System Prompt:** Ensure the system prompt for `prospect_discovery_agent` clearly guides its search strategy, its interpretation of `business_type` and `location_query`, and its use of tools for list generation (not deep dives).\n*   **Input Specificity:** The quality of prospects found will heavily depend on the clarity of the `business_type` and `location_query` inputs it receives. Test with various inputs.\n*   **`jina_ai_web_page_scraper` Timeouts:** This tool should be used extremely rarely by this agent. If timeouts occur, it's likely being overused; its role here is only for quick validation of uncertain website relevance.\n*   **Output Format:** Ensure the agent is consistently returning the JSON array as specified. Issues here will break the calling workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "a7f54d15-946f-4712-94ca-97a360adc9bc",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3440,
        -1160
      ],
      "parameters": {
        "color": 7,
        "width": 860,
        "height": 1640,
        "content": "### n8n Community Template Submission Description (for \"Prospect Discovery\" Workflow)\n\nThis description is for the \"Prospect Discovery\" workflow itself, highlighting its specific capabilities.\n\n**Workflow Title:** AI-Powered Prospect Discovery Agent\n\n**Description:**\n\nUncover new business leads with this AI-Powered Prospect Discovery Agent! This n8n workflow acts as a specialized intelligent assistant that, given a business type and location, uses multiple search strategies to identify a list of potential prospect companies and their websites.\n\nStop manually trawling through search results! This agent automates the initial phase of lead generation by:\n*   Understanding your target business profile (type, location, keywords).\n*   Strategically using web search tools (Brave Search, Google Gemini Search) to find relevant businesses.\n*   Performing quick validations to confirm relevance.\n*   Returning a clean, structured JSON list of prospect names and their website URLs.\n\n**How it Works:**\n\nThe workflow is built around an AI agent powered by Google Gemini. This agent is equipped with tools like:\n\n*   **Brave Web Search:** For broad initial sourcing of potential business candidates.\n*   **Google Gemini Search:** For advanced, context-aware discovery and finding businesses mentioned in various online sources.\n*   **Brave Local Search (Selective):** For quick verification of local presence or finding website URLs for identified names.\n*   **Jina AI Web Page Scraper (Very Selective):** For extremely rapid relevance checks on uncertain websites by scanning page content for keywords.\n\nThe agent's system prompt guides it to use these tools efficiently to build a list of prospects without getting bogged down in deep research on any single one at this discovery stage.\n\n**Use Cases:**\n\n*   **Lead Generation:** Automatically generate lists of potential clients based on industry and location.\n*   **Market Research:** Identify key players or types of businesses in a specific geographical area.\n*   **Sales Development:** Provide SDRs with initial lists of companies to research further.\n*   **Called as a Sub-Workflow:** Designed to be easily integrated as a \"tool\" into more complex orchestrating AI agents (e.g., a BNI Pitch Planner that first needs to identify who to target).\n\n**Setup:**\n\n1.  **Import the workflow.**\n2.  **Configure Credentials:** You'll need n8n credentials for:\n    *   Google Gemini (for the Chat model and the Gemini Search/Vertex AI Search tool).\n    *   Brave Search (e.g., via Smithery MCP, or adapt if you have direct API access).\n    *   Jina AI (for the web scraper).\n    Assign these to the respective nodes.\n3.  **Review System Prompt:** The `prospect_discovery_agent` node contains a detailed system prompt. You can fine-tune this to adjust its search strategies or the strictness of its matching.\n4.  **Inputs:** This workflow is triggered by an \"Execute Workflow Trigger\" node (`prospect_discovery_workflow`). It expects the following inputs:\n    *   `business_type` (string): e.g., \"artisan bakery\"\n    *   `location_query` (string): e.g., \"Portland, Oregon\"\n    *   `desired_num_prospects` (number): e.g., 5\n    *   `additional_keywords` (string, optional): e.g., \"organic, gluten-free\"\n\n**To Use (as a Sub-Workflow/Tool):**\n\nThis workflow is typically called by another n8n workflow (e.g., using a \"Tool Workflow\" node from the Langchain nodes). The calling workflow would provide the inputs listed above. The \"Prospect Discovery\" workflow will then execute and its final node (the `prospect_discovery_agent`) will output a JSON array of found prospects, like:\n\n```json\n[\n  {\n    \"business_name\": \"Rose Petal Bakery\",\n    \"website_url\": \"https://rosepetalbakerypdx.com\"\n  },\n  {\n    \"business_name\": \"The Daily Bread Artisans\",\n    \"website_url\": \"https://dailybreadpdx.com\"\n  }\n]\n```\nIf no prospects are found, it returns an empty array `[]`.\n\nThis template provides a powerful and focused tool for automating the initial stages of prospect identification."
      },
      "typeVersion": 1
    },
    {
      "id": "71869bea-8ed4-4aa6-a8d3-6a19be1af7e8",
      "name": "prospect_discovery",
      "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
      "position": [
        -220,
        -80
      ],
      "parameters": {
        "path": "5de5d0b6-7f58-47df-8d2c-4096f61212c8"
      },
      "typeVersion": 1
    },
    {
      "id": "617b4a64-691a-4850-9b2c-f38c9580869c",
      "name": "discover_prospect",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -60,
        320
      ],
      "parameters": {
        "workflowId": {
          "__rl": true,
          "mode": "list",
          "value": "tqyzrnyfFxB3x8LO",
          "cachedResultName": "Prospect Discovery"
        },
        "description": "=This tool calls the specialized \"Prospect Discovery\" AI agent to find a list of potential business prospects (names and website URLs) based on specified criteria. Use this when the user's 'Ideal Referral' input describes a TYPE of business rather than a specific company name. This tool helps identify examples of businesses that match the desired profile in a given location. The output will be a list of potential businesses that can then be further researched individually if needed.",
        "workflowInputs": {
          "value": {
            "business_type": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('business_type', `Specify the category or type of business to search for. This should be derived from the user's 'Ideal Referral' input when it describes a general business category. Examples: \"crane hire company\", \"artisan bakery\", \"SaaS provider for HR\", \"boutique marketing agency\".`, 'string') }}",
            "location_query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('location_query', `Provide a description of the target geographical area for the prospect search. This should be inferred from the user's own business location (e.g., if the user is in Newcastle, search for prospects in Newcastle or surrounding areas, unless otherwise specified). Examples: \"Newcastle NSW Australia\", \"downtown San Francisco\", \"Midlands UK\", \"businesses operating primarily online globally\".`, 'string') }}",
            "additional_keywords": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('additional_keywords', `(Optional) Include any other relevant terms or specializations mentioned by the user for their ideal referral, or that you infer might refine the search for the business type. Examples: \"specializing in commercial projects\", \"eco-friendly products\", \"B2B focus\", \"serves small businesses\". Leave empty if no specific refinements are needed beyond type and location.`, 'string') }}",
            "desired_num_prospects": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('desired_num_prospects', `Set the target number of unique prospect examples to find. A small number (e.g., 2 or 3) is usually sufficient at this stage, as the goal is to get a few good examples that can then be used to craft a more targeted referral ask or for further specific research.`, 'string') }}"
          },
          "schema": [
            {
              "id": "business_type",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "business_type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "location_query",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "location_query",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "desired_num_prospects",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "desired_num_prospects",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "additional_keywords",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "additional_keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2b29393a-1ffe-494c-9ab3-803da13efbc9",
      "name": "prospect_discovery_agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        240,
        1180
      ],
      "parameters": {
        "text": "=Based on the provided business type, location, desired number of prospects, and any additional keywords, identify a list of potential business prospects including their names and website URLs.\n\nbusiness_type: {{ $('prospect_discovery_workflow').item.json.business_type || 'Not specified' }}\nlocation_query: {{ $('prospect_discovery_workflow').item.json.location_query || 'Not specified' }}\ndesired_num_prospects: {{ Number($('prospect_discovery_workflow').item.json.desired_num_prospects) || 1 }}\nadditional_keywords: {{ $('prospect_discovery_workflow').item.json.additional_keywords || 'None' }}",
        "options": {
          "systemMessage": "=You are an AI Prospecting Specialist. Your mission is to identify a specified number of potential business prospects. For EACH prospect you identify, you must gather key details including their official name, website URL, a brief description of their services, a key contact person/owner (if discoverable), and a business phone number (if discoverable). This process is guided by the `business_type`, `location_query`, `desired_num_prospects`, and optional `additional_keywords` you receive. Your final output must be a structured JSON array of these detailed prospect profiles.\n\n**Inputs You Will Receive:**\n*   `business_type`: (string) The category or type of business to search for (e.g., \"crane hire company\", \"artisan bakery\").\n*   `location_query`: (string) A description of the target geographical area (e.g., \"Newcastle NSW Australia\", \"downtown San Francisco\"). This is crucial.\n*   `desired_num_prospects`: (number) The target number of unique, well-profiled prospects.\n*   `additional_keywords`: (string, optional) Other terms to refine the search.\n\n**Your Operational Protocol:**\n\n**Phase 1: Initial Prospect Candidate Identification**\n1.  **Formulate Broad Search Queries:** Combine `business_type`, `location_query`, and `additional_keywords`. Examples: \"list of `[business_type]` in `[location_query]` `[additional_keywords]`\", \"top `[business_type]` `[location_query]`\".\n2.  **Use Search Tools for Candidate List:**\n    *   Primarily use `brave_web_search` (e.g., with `count: 10` or `15`) and/or `google_gemini_prospect_finder` for these broad queries.\n    *   **Goal:** From search result snippets and titles, extract a working list of potential company names and their website URLs. Aim for slightly more candidates than `desired_num_prospects` initially (e.g., if targeting 3, find 5-7).\n\n**Phase 2: Detailed Profiling of Selected Candidates**\nIterate through your initial list of candidates. For each candidate, attempt to build a detailed profile until you have successfully profiled up to `desired_num_prospects` businesses.\n\nFor each candidate business from Phase 1:\n1.  **Confirm Official Name & Primary Website URL:**\n    *   If not perfectly clear, use a targeted `brave_web_search` (e.g., `{\"query\": \"[Candidate Company Name from initial list] official website\"}`) or `brave_local_search` (e.g., `{\"query\": \"[Candidate Company Name from initial list] [location_query]\"}`).\n    *   If a clear official website cannot be confidently found, consider skipping this candidate for detailed profiling.\n\n2.  **Gather Key Business Details (once website is confirmed):**\n    *   **Website Content Analysis (`jina_ai_web_page_scraper`):**\n        *   **Tool Input:** `{\"url\": \"[Prospect's Confirmed Website URL]\"}`. Prioritize scraping 'About Us', 'Contact Us', or 'Services' pages if their URLs are identifiable or inferable. If not, scrape the homepage.\n        *   **Information to Extract:** A brief description of their services/business focus; contact phone numbers; general email addresses (like info@, sales@); names of owners, founders, or key management.\n        *   **Usage Note:** Be judicious. If a site is very large, focus on 1-2 key pages.\n    *   **Targeted Information Search (using `google_gemini_prospect_finder` or `brave_local_search`):**\n        *   **Tool Inputs:** Formulate precise queries.\n            *   `google_gemini_prospect_finder`: e.g., `{\"query\": \"owner of [Prospect Name]\"}` or `{\"query\": \"contact phone [Prospect Name] [location_query]\"}`. If a key person's name is found from scraping: `{\"query\": \"[Key Person Name] [Prospect Name] LinkedIn\"}`.\n            *   `brave_local_search`: e.g., `{\"query\": \"[Prospect Name] [location_query]\"}` (can yield listed phone, address).\n        *   **Goal:** Find/confirm phone numbers, identify contact persons, and verify service descriptions.\n\n3.  **Synthesize and Construct Profile for Current Prospect:**\n    *   Compile all verified information for the current prospect.\n    *   If essential details (e.g., a verifiable phone number or a clear description of services that matches the `business_type`) cannot be found after reasonable attempts, you may discard this candidate and move to the next from your initial list. Aim for quality profiles.\n\n**Phase 3: Final Output Generation**\n1.  **Format as JSON Array:** Your final output MUST be a JSON array containing one object for each successfully profiled prospect.\n    ```json\n    [\n      {\n        \"business_name\": \"Example Crane Hire Pty Ltd\",\n        \"website_url\": \"https://www.examplecrane.com.au\",\n        \"description\": \"Provides crane rental and lifting services for construction projects in Newcastle.\",\n        \"key_contact_owner\": \"John Smith (Owner/Operator)\", // Or \"Contact: Operations Manager\", or \"N/A\" if not found\n        \"phone_number\": \"02-1234-5678\", // Or \"N/A\" if not found\n        \"contact_email\": \"info@examplecrane.com.au\", // Or \"N/A\" if not found\n        \"linkedin_profile\": \"https://linkedin.com/in/johnsmithcrane\" // Or \"N/A\" if not found\n      }\n      // ... up to desired_num_prospects objects\n    ]\n    ```\n2.  **Return ONLY the JSON Array:** No introductory text, no \"Here is the list:\", just the array itself.\n3.  **Empty Array for No Valid Results:** If no prospects can be adequately profiled up to `desired_num_prospects`, return an empty array: `[]`.\n\n**Critical: Tool Input Precision:**\n*   When preparing to call ANY tool (`brave_web_search`, `google_gemini_prospect_finder`, `brave_local_search`, `jina_ai_web_page_scraper`), the JSON input you generate for that tool MUST strictly match its expected schema.\n    *   `brave_web_search`: Expects `{\"query\": \"string\", \"count\": number (optional), \"offset\": number (optional)}`.\n    *   `google_gemini_prospect_finder`: Expects `{\"query\": \"string\", \"organization\": \"string (optional)\", \"restrictUrls\": \"string (optional)\"}`.\n    *   `brave_local_search`: Expects `{\"query\": \"string\", \"count\": number (optional)}`.\n    *   `jina_ai_web_page_scraper`: Expects `{\"url\": \"string\"}`.\n*   **Always ensure all required parameters for a tool are present in your generated input, and that data types are correct (strings are quoted, numbers are not).** Mistakes here will cause schema errors.\n\n**Priorities:**\n*   **Actionable Contact Details:** For each profiled prospect, strive to find a business phone number. A key contact/owner is highly desirable.\n*   **Relevance:** Profiled businesses must genuinely match the `business_type` in the `location_query`.\n*   **Accuracy:** Verify information where possible. If a detail is uncertain or cannot be found, use \"N/A\" or a similar indicator in the output JSON."
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "d54d6483-54bc-45b3-9a2b-05767176aa08",
      "name": "prospect_discovery_workflow",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        -500,
        1180
      ],
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "business_type"
            },
            {
              "name": "location_query"
            },
            {
              "name": "desired_num_prospects"
            },
            {
              "name": "additional_keywords"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "4c2d5725-1e5b-4ca5-b030-6be6cb28638c",
      "name": "google_gemini_prospect_finder",
      "type": "n8n-nodes-gemini-search.geminiSearchToolTool",
      "position": [
        2300,
        1300
      ],
      "parameters": {
        "model": "gemini-2.5-flash-preview-05-20",
        "query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Query', `Formulate a search query aimed at discovering multiple businesses of a certain type within a geographical area or industry. Examples: \"Find crane hire companies operating in Newcastle, Australia\", \"List software development agencies in London focusing on fintech\", \"What are some popular artisan bakeries in San Francisco's Mission District?\".`, 'string') }}",
        "options": {
          "extractSourceUrl": true
        },
        "organization": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Organization_Context', `(Optional) Provide an industry or general business type as context if not already clear in the main query. Example: 'logistics companies', 'eco-friendly retail'. Less about a specific business name here, more about the category.`, 'string') }}",
        "restrictUrls": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Restrict_Search_to_URLs', `(Optional and use sparingly for discovery) Provide a comma-separated list of specific website URLs ONLY if you are trying to find businesses listed on a known, relevant directory (e.g., 'yellowpages.com.au', 'clutch.co'). Generally, for broad discovery, leave blank.`, 'string') }}",
        "toolDescription": "Leverages Google's Gemini model for advanced, context-aware searching to identify potential business prospects. Use this to find lists of businesses by type and location, discover companies mentioned in relevant articles, or to perform more nuanced queries for business discovery when standard search isn't sufficient. Can help identify multiple potential leads rather than a single specific entity. Key Parameters: 'query' (string), 'organization' (can be used for industry context), 'restrictUrls' (rarely used for discovery unless searching specific directories)."
      },
      "credentials": {
        "geminiSearchApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f5d70acc-c6f9-4ce9-85d0-35c3c6403725",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1940,
        -780
      ],
      "parameters": {
        "color": 7,
        "width": 940,
        "height": 1760,
        "content": "![MCP Usage Example](https://www.jezweb.com.au/wp-content/uploads/2025/06/prospect-discovery-01.png#full-width)"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "fa334835-a924-4cd6-9835-73a02b7c3f02",
  "connections": {
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "prospect_discovery_agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "brave_web_search": {
      "ai_tool": [
        [
          {
            "node": "prospect_discovery_agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "discover_prospect": {
      "ai_tool": [
        [
          {
            "node": "prospect_discovery",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "brave_local_search": {
      "ai_tool": [
        [
          {
            "node": "prospect_discovery_agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "prospect_discovery_agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "jina_ai_web_page_scraper": {
      "ai_tool": [
        [
          {
            "node": "prospect_discovery_agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "prospect_discovery_workflow": {
      "main": [
        [
          {
            "node": "prospect_discovery_agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "google_gemini_prospect_finder": {
      "ai_tool": [
        [
          {
            "node": "prospect_discovery_agent",
            "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 workflow contains community nodes that are only compatible with the self-hosted version of n8n.

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

This n8n workflow implements an AI-powered "Local Event Finder" agent. It takes user criteria (like event type, city, date, and interests), uses a suite of search tools (Brave Web Search, Brave Local

Google Gemini Chat, Memory Buffer Window, N8N Nodes Mcp +6
AI & RAG

This n8n workflow implements an AI-powered agent that intelligently uses the Brave Search API (via an external MCP service like Smithery) to perform both web and local searches. It understands natural

Google Gemini Chat, Memory Buffer Window, Mcp Trigger +4
AI & RAG

This n8n workflow template uses community nodes and is only compatible with the self-hosted version of n8n.

Google Gemini Chat, N8N Nodes Mcp, Mcp Trigger +4
AI & RAG

The AI-Powered Shopify SEO Content Automation is an enterprise-grade workflow that transforms product content creation for e-commerce stores. This sophisticated multi-agent system integrates GPT-4o, C

Perplexity Tool, Memory Buffer Window, Agent +15
AI & RAG

How it Works

Memory Buffer Window, Agent, Output Parser Structured +9