AutomationFlowsAI & RAG › Scrape Developer Profiles From Stack Overflow for Lead Generation with…

Scrape Developer Profiles From Stack Overflow for Lead Generation with…

Original n8n title: Scrape Developer Profiles From Stack Overflow for Lead Generation with Openai & Bright Data

ByYaron Been @yaron-nofluff on n8n.io

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

Event trigger★★★★☆ complexityAI-powered17 nodesOpenAI ChatAgentN8N Nodes McpMemory Buffer WindowGoogle SheetsOutput Parser AutofixingOutput Parser Structured
AI & RAG Trigger: Event Nodes: 17 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Google Sheets 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": "Nc381f2WfFyzrJvl",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "1. Scrape Stack Overflow for Leads",
  "tags": [],
  "nodes": [
    {
      "id": "02eb1076-060e-484d-84c4-fe2dcb3ed706",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        260,
        320
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a8c0862a-6b53-414b-ac82-ccabefad2345",
      "name": "Start Scraping",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -200,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "f54199e8-8fa1-4ffa-b442-3700755d4a0a",
      "name": "Input Setup",
      "type": "n8n-nodes-base.set",
      "position": [
        20,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "c1e742bf-8bd2-4d18-9a51-dac7cfaa51fd",
              "name": "url",
              "type": "string",
              "value": "https://stackoverflow.com/users"
            },
            {
              "id": "107ffa9d-231b-4991-b362-415ec08505b7",
              "name": "format",
              "type": "string",
              "value": "scrape_as_markdown"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1894bff8-13de-4fba-93ed-f021407d4e13",
      "name": "AI Agent: Generate Scraper Instructions",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        440,
        0
      ],
      "parameters": {
        "text": "=Scrape all users data as per the provided URL:  {{ $json.url }}",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2
    },
    {
      "id": "0f166f7a-e7ac-4d14-8171-7c1c36f18680",
      "name": "MCP Client to Scrape as HTML",
      "type": "n8n-nodes-mcp.mcpClientTool",
      "position": [
        620,
        320
      ],
      "parameters": {
        "toolName": "scrape_as_html",
        "operation": "executeTool",
        "toolParameters": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Tool_Parameters', ``, 'json') }}",
        "descriptionType": "manual",
        "toolDescription": "Scrape a single webpage URL with advanced options for content extraction and get back the results in html"
      },
      "credentials": {
        "mcpClientApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "195a2e71-91c7-4947-ab5a-26e4e7b9e3d6",
      "name": "Conversation Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        460,
        320
      ],
      "parameters": {
        "sessionKey": "=Perform the web scraping for the below URL  {{ $json.url }}",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "c425d7fc-2207-4df6-8833-76265394f9b3",
      "name": "Format Data for Google Sheets",
      "type": "n8n-nodes-base.code",
      "position": [
        1020,
        0
      ],
      "parameters": {
        "jsCode": "// Get the array of users from the incoming item\nconst forums = items[0].json.output.forums;\n\nconst results = forums.map(user => {\n  return {\n    json: {\n      baseUrl: user.baseUrl,\n      profileUrl: user.exampleProfile,\n      name: user.selectors.name,\n      location: user.selectors.location,\n      reputation: user.selectors.reputation,\n      tags: user.selectors.tags\n    }\n  };\n});\n\nreturn results;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "51380d2d-c833-4748-a9fb-376add68cc87",
      "name": "Save Leads to Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1240,
        0
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $json.name }}",
            "Tags": "={{ $json.tags }}",
            "baseUrl": "={{ $json.baseUrl }}",
            "Location": "={{ $json.location }}",
            "Raputation": "={{ $json.reputation }}",
            "Profile URL": "={{ $json.profileUrl }}"
          },
          "schema": [
            {
              "id": "baseUrl",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "baseUrl",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Profile URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Profile URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Raputation",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Raputation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tags",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Tags",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/121-9GYz9uIhC-cBQaJ2Rg26paivPVDAvTE9pwgZ7MCA/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "121-9GYz9uIhC-cBQaJ2Rg26paivPVDAvTE9pwgZ7MCA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/121-9GYz9uIhC-cBQaJ2Rg26paivPVDAvTE9pwgZ7MCA/edit?usp=drivesdk",
          "cachedResultName": "Stackoverflow users data"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "08fb0bc0-e489-4a6c-98b3-f95d838e353f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -220,
        -1140
      ],
      "parameters": {
        "color": 6,
        "width": 360,
        "height": 1320,
        "content": "## \ud83d\ude80 **Section 1: Trigger & Input Setup**\n\n> *\u201cStart the engine and define what we want.\u201d*\n\n### \ud83d\udd18 **Start Scraping**\n\n\ud83d\udccc **What it does**:\nThis is a **manual trigger node** \u2014 it means you click a button to start the automation whenever you're ready.\n\n\ud83d\udca1 **Why it's useful**:\nIt gives **you control**. You don\u2019t have to rely on a schedule or external webhook to run your bot.\n\n---\n\n### \u270f\ufe0f **Input Setup**\n\n\ud83d\udccc **What it does**:\nThis node allows you to **edit or define any optional fields** before running the scraper. For example, you could:\n\n* Choose which forum to target\n* Add filters like location or tags (optional)\n* Enter how many profiles to scrape\n\n\ud83d\udca1 **Why it's useful**:\nYou can **dynamically control** the scraper without touching the workflow logic.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "24fa8529-56ac-473b-b8f6-280a6219d29e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        -1660
      ],
      "parameters": {
        "color": 3,
        "width": 360,
        "height": 1820,
        "content": "## \ud83e\udd16 **Section 2: AI-Powered Scraping Brain**\n\n> *\u201cLet the AI handle the heavy lifting.\u201d*\n\n### \ud83e\udd16 **AI Agent: Generate Scraper Instructions**\n\n\ud83d\udccc **What it does**:\nThis is the **core automation brain**. It receives the input, uses your prompt and memory, and knows it should activate Bright Data to scrape user profiles from Stack Overflow.\n\n\ud83d\udca1 **Why it's useful**:\nInstead of coding every scraping rule manually, you let an **AI agent manage tools and instructions**.\n\n---\n\n#### \ud83d\udd17 **Connected Sub-Tools**:\n\n##### \ud83e\udde0 **Conversation Memory**\n\n\ud83e\uddca Saves context between steps so the agent \u201cremembers\u201d what the task is about.\n\n##### \ud83d\udd0c **Bright Data: StackOverflow Scraper (HTML)**\n\n\ud83d\udd78 Executes the **HTML scraping tool on Bright Data MCP**.\nIt grabs the page, processes the DOM, and scrapes user profile data.\n\n##### \ud83e\udde9 **Parse Scraped Profiles**\n\n\ud83d\udcd1 Uses a structured output parser to **convert the scraped HTML/markdown** into clean JSON data like:\n\n```json\n{\n  \"name\": \"Jon Skeet\",\n  \"location\": \"UK\",\n  \"profileUrl\": \"...\",\n  \"tags\": \"java, c#\",\n  \"reputation\": \"320\"\n}\n```\n\n\ud83d\udca1 **Why it's useful**:\nYou don\u2019t need to manually extract data using selectors \u2014 the AI does it intelligently.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8e696519-51cf-42ea-9f1c-4b531e183696",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        -1200
      ],
      "parameters": {
        "color": 5,
        "width": 420,
        "height": 1380,
        "content": "## \ud83d\udcca **Section 3: Format & Save to Sheets**\n\n> *\u201cPolish and preserve your gold.\u201d*\n\n### \ud83e\uddfe **Format Data for Google Sheets**\n\n\ud83d\udccc **What it does**:\nThis `Code` node **cleans the scraped data**, picks only what you care about (name, location, reputation, etc.), and **outputs one item per user**.\n\n\ud83d\udca1 **Why it's useful**:\nIt makes sure your data is **structured and ready for Sheets**. Clean in = clean out.\n\n---\n\n### \ud83d\udcc4 **Save Leads to Google Sheet**\n\n\ud83d\udccc **What it does**:\nTakes each formatted item and **appends it to a connected Google Sheet**.\n\n\ud83d\udca1 **Why it's useful**:\nThis is your **automated storage system**. You can build a list of Stack Overflow leads, update CRMs, or just keep it for research.\n\n---\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7cf77dc6-7b55-400d-a7da-a85d906f8a99",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2120,
        -1140
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
      },
      "typeVersion": 1
    },
    {
      "id": "93f5ad00-0cd0-4e53-b0d5-eba652b3fb61",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2120,
        -800
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 3018,
        "content": "# \ud83e\udde0\u2728 **AI-Powered Stack Overflow Lead Scraper**\n\n### *Scrape, Parse, and Save Developer Profiles to Google Sheets Using Bright Data & n8n*\n\n---\n\n## \ud83d\ude80 **Section 1: Trigger & Input Setup**\n\n> *\u201cStart the engine and define what we want.\u201d*\n\n### \ud83d\udd18 **Start Scraping**\n\n\ud83d\udccc **What it does**:\nThis is a **manual trigger node** \u2014 it means you click a button to start the automation whenever you're ready.\n\n\ud83d\udca1 **Why it's useful**:\nIt gives **you control**. You don\u2019t have to rely on a schedule or external webhook to run your bot.\n\n---\n\n### \u270f\ufe0f **Input Setup**\n\n\ud83d\udccc **What it does**:\nThis node allows you to **edit or define any optional fields** before running the scraper. For example, you could:\n\n* Choose which forum to target\n* Add filters like location or tags (optional)\n* Enter how many profiles to scrape\n\n\ud83d\udca1 **Why it's useful**:\nYou can **dynamically control** the scraper without touching the workflow logic.\n\n---\n\n## \ud83e\udd16 **Section 2: AI-Powered Scraping Brain**\n\n> *\u201cLet the AI handle the heavy lifting.\u201d*\n\n### \ud83e\udd16 **AI Agent: Generate Scraper Instructions**\n\n\ud83d\udccc **What it does**:\nThis is the **core automation brain**. It receives the input, uses your prompt and memory, and knows it should activate Bright Data to scrape user profiles from Stack Overflow.\n\n\ud83d\udca1 **Why it's useful**:\nInstead of coding every scraping rule manually, you let an **AI agent manage tools and instructions**.\n\n---\n\n#### \ud83d\udd17 **Connected Sub-Tools**:\n\n##### \ud83e\udde0 **Conversation Memory**\n\n\ud83e\uddca Saves context between steps so the agent \u201cremembers\u201d what the task is about.\n\n##### \ud83d\udd0c **Bright Data: StackOverflow Scraper (HTML)**\n\n\ud83d\udd78 Executes the **HTML scraping tool on Bright Data MCP**.\nIt grabs the page, processes the DOM, and scrapes user profile data.\n\n##### \ud83e\udde9 **Parse Scraped Profiles**\n\n\ud83d\udcd1 Uses a structured output parser to **convert the scraped HTML/markdown** into clean JSON data like:\n\n```json\n{\n  \"name\": \"Jon Skeet\",\n  \"location\": \"UK\",\n  \"profileUrl\": \"...\",\n  \"tags\": \"java, c#\",\n  \"reputation\": \"320\"\n}\n```\n\n\ud83d\udca1 **Why it's useful**:\nYou don\u2019t need to manually extract data using selectors \u2014 the AI does it intelligently.\n\n---\n\n## \ud83d\udcca **Section 3: Format & Save to Sheets**\n\n> *\u201cPolish and preserve your gold.\u201d*\n\n### \ud83e\uddfe **Format Data for Google Sheets**\n\n\ud83d\udccc **What it does**:\nThis `Code` node **cleans the scraped data**, picks only what you care about (name, location, reputation, etc.), and **outputs one item per user**.\n\n\ud83d\udca1 **Why it's useful**:\nIt makes sure your data is **structured and ready for Sheets**. Clean in = clean out.\n\n---\n\n### \ud83d\udcc4 **Save Leads to Google Sheet**\n\n\ud83d\udccc **What it does**:\nTakes each formatted item and **appends it to a connected Google Sheet**.\n\n\ud83d\udca1 **Why it's useful**:\nThis is your **automated storage system**. You can build a list of Stack Overflow leads, update CRMs, or just keep it for research.\n\n---\n\n## \ud83c\udf1f Final Benefits for You\n\n\u2705 No manual copy-pasting\n\u2705 AI handles scraping + parsing\n\u2705 Exported automatically to Sheets\n\u2705 Fully reusable with Bright Data MCP\n\u2705 Friendly for beginners with room to scale\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8c6bf091-2ca5-484e-b677-c83bbcd569b1",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1500,
        -1200
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 240,
        "content": "## I\u2019ll receive a tiny commission if you join Bright Data through this link\u2014thanks for fueling more free content!\n\n### https://get.brightdata.com/1tndi4600b25"
      },
      "typeVersion": 1
    },
    {
      "id": "d1886048-1c41-48d7-9172-81d01a99045b",
      "name": "Auto-fixing Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
      "position": [
        800,
        320
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "3ac5af36-f7ea-4e1e-9989-53f4f7b1820c",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        780,
        540
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c134bbb5-c328-4e32-bce6-506b568d3acc",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        940,
        540
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"target\": \"https://stackoverflow.com/users\",\n  \"forums\": [\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/6309/vonc\",\n      \"selectors\": {\n        \"name\": \"VonC\",\n        \"location\": \"France\",\n        \"reputation\": \"603\",\n        \"tags\": \"git, github, docker\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/2402272/john-bollinger\",\n      \"selectors\": {\n        \"name\": \"John Bollinger\",\n        \"location\": \"\",\n        \"reputation\": \"375\",\n        \"tags\": \"c, java, linux\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/6196568/shingo\",\n      \"selectors\": {\n        \"name\": \"shingo\",\n        \"location\": \"On the Earth\",\n        \"reputation\": \"340\",\n        \"tags\": \"c#, unity-game-engine, php\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/5133585/sweeper\",\n      \"selectors\": {\n        \"name\": \"Sweeper\",\n        \"location\": \"UK\",\n        \"reputation\": \"325\",\n        \"tags\": \"swift, java, c#\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/22656/jon-skeet\",\n      \"selectors\": {\n        \"name\": \"Jon Skeet\",\n        \"location\": \"Reading, United Kingdom\",\n        \"reputation\": \"320\",\n        \"tags\": \"c#, java, .net\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/1774667/yakk-adam-nevraumont\",\n      \"selectors\": {\n        \"name\": \"Yakk - Adam Nevraumont\",\n        \"location\": \"Canada\",\n        \"reputation\": \"313\",\n        \"tags\": \"c++, c++11, templates\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/6461462/m\",\n      \"selectors\": {\n        \"name\": \"M--\",\n        \"location\": \"TBA\",\n        \"reputation\": \"301\",\n        \"tags\": \"r, dataframe, ggplot2\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/51717/jason-c\",\n      \"selectors\": {\n        \"name\": \"Jason C\",\n        \"location\": \"\",\n        \"reputation\": \"300\",\n        \"tags\": \"linux, iptables, ipv6\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/12500315/allan-cameron\",\n      \"selectors\": {\n        \"name\": \"Allan Cameron\",\n        \"location\": \"UK\",\n        \"reputation\": \"285\",\n        \"tags\": \"r, ggplot2, dplyr\"\n      }\n    },\n    {\n      \"name\": \"Stack Overflow Users\",\n      \"baseUrl\": \"https://stackoverflow.com/users\",\n      \"exampleProfile\": \"https://stackoverflow.com/users/16752210/halo\",\n      \"selectors\": {\n        \"name\": \"Halo\",\n        \"location\": \"USA\",\n        \"reputation\": \"280\",\n        \"tags\": \"three.js, javascript, css\"\n      }\n    }\n  ]\n}\n"
      },
      "typeVersion": 1.2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "05d835bd-ef3d-47f9-a22d-e0a47f5094bd",
  "connections": {
    "Input Setup": {
      "main": [
        [
          {
            "node": "AI Agent: Generate Scraper Instructions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Scraping": {
      "main": [
        [
          {
            "node": "Input Setup",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent: Generate Scraper Instructions",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Auto-fixing Output Parser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Conversation Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent: Generate Scraper Instructions",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Auto-fixing Output Parser",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Auto-fixing Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent: Generate Scraper Instructions",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "MCP Client to Scrape as HTML": {
      "ai_tool": [
        [
          {
            "node": "AI Agent: Generate Scraper Instructions",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Format Data for Google Sheets": {
      "main": [
        [
          {
            "node": "Save Leads to Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent: Generate Scraper Instructions": {
      "main": [
        [
          {
            "node": "Format Data for Google Sheets",
            "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 contains community nodes that are only compatible with the self-hosted version of n8n.

Source: https://n8n.io/workflows/5944/ — 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 workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Output Parser Structured, Telegram, N8N Nodes Tesseractjs +14
AI & RAG

This workflow automatically monitors competitor social media engagement on LinkedIn to track their content performance and posting strategies. It saves you time by eliminating the need to manually che

Agent, N8N Nodes Mcp, Google Sheets +3
AI & RAG

This workflow automatically identifies and tracks backlink opportunities by analyzing competitor link profiles and finding potential linking websites. It saves you time by eliminating the need to manu

OpenAI Chat, N8N Nodes Mcp, Agent +4
AI & RAG

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

Agent, OpenAI Chat, N8N Nodes Mcp +4
AI & RAG

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

Agent, OpenAI Chat, N8N Nodes Mcp +4