{
  "id": "kI7J9ImbDkF0mrBo",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI Web Research Agent powered by Bright Data",
  "tags": [],
  "nodes": [
    {
      "id": "22fcdb98-d68c-412a-b656-0d8de7fab7f7",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        1840,
        1168
      ],
      "parameters": {
        "options": {
          "respondWithOptions": {
            "values": {
              "formSubmittedText": "Research in progress! Your structured report will land in your Slack channel within 2-5 minutes. Powered by Bright Data + Claude."
            }
          }
        },
        "formTitle": "AI Research Agent",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Research goal",
              "placeholder": "e.g., Latest developments in autonomous AI agents in 2026",
              "requiredField": true
            },
            {
              "fieldLabel": "Target audience",
              "placeholder": "e.g., technical founders, CMO, VC analysts",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Give the agent a research goal. It will browse the web via Bright Data and deliver a structured report to Slack."
      },
      "typeVersion": 2.5
    },
    {
      "id": "23b51efd-f464-4007-bdc1-c0db94371c55",
      "name": "AI Research Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2160,
        1456
      ],
      "parameters": {
        "text": "=Research goal: {{ $json['Research goal'] }}\nTarget audience: {{ $json['Target audience'] }}\n\nConduct thorough research using the run_web_unlocker tool. Produce a structured Slack-ready report following the format in your system instructions.",
        "options": {
          "systemMessage": "You are an expert AI research agent. Your job is to investigate a topic deeply using web search and deliver a clear, structured report formatted for Slack.\n\n## Research process\n1. Start with a Google search: call the web_unlocker tool with a URL like `https://www.google.com/search?q=YOUR+QUERY`\n2. From the search results, identify the 3-5 most relevant and authoritative sources\n3. Fetch each source by calling web_unlocker with its URL\n4. Synthesize the findings\n\n## Report format (Slack mrkdwn)\nReturn ONLY the Slack-formatted report, no preamble:\n\n*\ud83d\udd0d Research Report: <topic>*\n_Audience: <audience>_\n\n*TL;DR*\n\u2022 3-4 bullet points with the core takeaways\n\n*Key findings*\n1. <finding 1 with short explanation>\n2. <finding 2 with short explanation>\n3. <finding 3 with short explanation>\n\n*Sources*\n\u2022 <url 1>\n\u2022 <url 2>\n\u2022 <url 3>\n\n*Recommended next step*\n_<one actionable recommendation tailored to the audience>_\n\n## Rules\n- Always cite sources (URLs)\n- Use Slack mrkdwn (*bold*, _italic_), never markdown ** or __\n- Keep it concise and scannable\n- If a source fails to load, skip it and try another"
        },
        "promptType": "define"
      },
      "typeVersion": 3.1
    },
    {
      "id": "b99a7a76-9e90-44c9-b026-8bef3571001b",
      "name": "Anthropic Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        2064,
        1664
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-opus-4-7",
          "cachedResultName": "Claude Opus 4.7"
        },
        "options": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "0d9d4d05-86a8-4546-868f-5b97db206e94",
      "name": "Bright Data Web Unlocker",
      "type": "@brightdata/n8n-nodes-brightdata.brightDataTool",
      "position": [
        2432,
        1648
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}",
        "zone": {
          "__rl": true,
          "mode": "list",
          "value": "web_unlocker_agent",
          "cachedResultName": "web_unlocker_agent"
        },
        "country": {
          "__rl": true,
          "mode": "list",
          "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Country', ``, 'string') }}"
        },
        "requestOptions": {},
        "descriptionType": "manual",
        "toolDescription": "Fetch full content of any URL as clean Markdown. Handles JS-rendered pages, CAPTCHAs, anti-bot. Use for Google search URLs (https://www.google.com/search?q=QUERY) and individual source pages discovered from those searches."
      },
      "typeVersion": 1
    },
    {
      "id": "038faa87-63ba-499f-bd11-29e3d35f7f86",
      "name": "Send Report to Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        2944,
        1760
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_SLACK_CHANNEL_ID",
          "cachedResultName": "research"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "typeVersion": 2.4
    },
    {
      "id": "f8d07116-2a3f-4fd2-badc-5e583154a0ee",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        928
      ],
      "parameters": {
        "color": 7,
        "width": 460,
        "height": 720,
        "content": "## \ud83d\udd0d AI Web Research Agent powered by Bright Data\n\nAn autonomous research agent that browses the web for you. Fill a form, get a structured report in Slack within 2-5 minutes.\n\n### How it works\n1. **Form** collects a research goal and target audience\n2. **AI Agent** (Claude Opus 4.7) plans the research\n3. **Bright Data Web Unlocker** scrapes Google + source pages (handles JS, CAPTCHAs, anti-bot)\n4. The agent synthesizes a structured Slack-ready report\n5. **Slack** delivers the report to your team\n\n### Why Bright Data?\n- Bypasses CAPTCHAs, bot detection and geo-blocks\n- Renders JavaScript-heavy pages\n- Returns clean Markdown ready for LLM consumption\n\n### Prerequisites\n- A [Bright Data](https://brightdata.com) account with a **Web Unlocker** zone (`web_unlocker_agent`)\n- An [Anthropic](https://anthropic.com) API key (Claude Opus 4.7 or any Claude model)\n- A [Slack](https://slack.com) workspace with a channel for reports\n\n### \ud83d\udd04 Customizable\n- Swap **Claude** for OpenAI, Gemini, Mistral, Groq\u2026\n- Swap **Slack** for Discord, Teams, Telegram, email, Notion, a CRM\u2026\n- Replace the **Form Trigger** with a webhook, schedule, chat trigger\u2026\n\n### Setup\n1. Connect your **Bright Data**, **Anthropic** and **Slack** credentials\n2. Select your Slack **channel** in the last node\n3. Activate the workflow and open the form URL"
      },
      "typeVersion": 1
    },
    {
      "id": "55cdacf0-3b72-410a-97ca-a65a047a04db",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        720
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 420,
        "content": "## 1\ufe0f\u20e3 Trigger (Form)\nExposes a public form where users enter:\n- **Research goal** \u2014 what to investigate\n- **Target audience** \u2014 who the report is for\n\n### \ud83d\udd04 You can replace this trigger with anything!\n- **Webhook** (trigger from any external app)\n- **Chat Trigger** (talk to the agent)\n- **Schedule** (run every day/week)\n- **Slack / Discord slash command**\n- **Email trigger**\n- **Airtable / Notion / HubSpot trigger**\n\nJust make sure the output includes the two fields used below: `Research goal` and `Target audience`."
      },
      "typeVersion": 1
    },
    {
      "id": "011b93c1-45c4-46ee-aea9-d8f14c49ee1a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2128,
        1216
      ],
      "parameters": {
        "color": 5,
        "width": 300,
        "height": 220,
        "content": "## 2\ufe0f\u20e3 AI Research Agent\nThe brain of the workflow. Plans the research, calls the Bright Data tool multiple times (Google search \u2192 source pages), then synthesizes a structured Slack report.\n\nFull system prompt is defined in the node \u2014 feel free to tweak the report format."
      },
      "typeVersion": 1
    },
    {
      "id": "1e14e9a2-421a-43b0-a592-7041325fc679",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1984,
        1808
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 156,
        "content": "## 3\ufe0f\u20e3 Claude Opus 4.7\nThe LLM behind the agent.\n\n\ud83d\udd04 Swap for any chat model: **OpenAI GPT-5**, **Gemini**, **Mistral**, **Groq**, **Ollama**\u2026"
      },
      "typeVersion": 1
    },
    {
      "id": "bfbca2bd-01a6-4e47-a93f-bd6bf91a4253",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2336,
        1824
      ],
      "parameters": {
        "color": 3,
        "width": 300,
        "height": 288,
        "content": "## 4\ufe0f\u20e3 Bright Data Web Unlocker\nThe agent's eyes on the web.\n\nFetches any URL as clean Markdown:\n- Handles **JavaScript** rendering\n- Bypasses **CAPTCHAs** and bot detection\n- Works on **geo-blocked** content\n\nUsed by the agent to search Google and read source pages."
      },
      "typeVersion": 1
    },
    {
      "id": "34d90e23-f60c-4f44-9beb-8082711b9482",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2800,
        1360
      ],
      "parameters": {
        "color": 2,
        "width": 404,
        "height": 376,
        "content": "## 5\ufe0f\u20e3 Output (Slack)\nPosts the structured report in your chosen Slack channel (Slack mrkdwn formatting).\n\n### \ud83d\udd04 You can replace Slack with anything!\n- **Email** (Gmail, Outlook, SMTP)\n- **Discord / Microsoft Teams / Telegram**\n- **Notion / Google Docs / Confluence**\n- **Airtable / HubSpot / Salesforce** (save as record)\n- **Google Sheets** (append as row)\n- **SMS / WhatsApp**\n- **Respond to Webhook** (send back to the caller)\n\nThe agent's report is available in `{{ $json.output }}` \u2014 plug it into any destination."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "e0a3da98-ce7a-4cc7-a3a2-c6e68b858e0e",
  "connections": {
    "AI Research Agent": {
      "main": [
        [
          {
            "node": "Send Report to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "AI Research Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Research Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Bright Data Web Unlocker": {
      "ai_tool": [
        [
          {
            "node": "AI Research Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}