{
  "name": "Turn your website docs into a GPT-4.1-mini support chatbot with MrScraper and Pinecone",
  "nodes": [
    {
      "id": "39f68fff-a20d-4fbb-bf70-702fee1c69dd",
      "name": "When clicking ‘Execute workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2432,
        144
      ]
    },
    {
      "id": "9780ab91-3ab4-4c19-b38e-a56292b1cb59",
      "name": "MrScraper - Discover URLs (Map Agent)",
      "type": "n8n-nodes-mrscraper.mrscraper",
      "position": [
        -2160,
        144
      ]
    },
    {
      "id": "beaa1c00-3bf1-4299-bf40-81efaaa47c79",
      "name": "Batch URLs (Controlled Crawl)",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1616,
        176
      ]
    },
    {
      "id": "6ea836ba-0322-4366-b366-e7ff71f5adc1",
      "name": "MrScraper - Extract Page Content (General Agent)",
      "type": "n8n-nodes-mrscraper.mrscraper",
      "position": [
        -1392,
        144
      ]
    },
    {
      "id": "ce80bee9-a7c6-4ca5-b519-f10e241a39de",
      "name": "Chunk Text for Embeddings",
      "type": "n8n-nodes-base.code",
      "position": [
        -864,
        160
      ]
    },
    {
      "id": "925bd235-6f2e-469f-8c83-54f73beeb372",
      "name": "OpenAI Embeddings (Indexing)",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -592,
        304
      ]
    },
    {
      "id": "dbd5c07c-8b9c-469a-b00d-1880d216c8de",
      "name": "Pinecone Vector Store (Upsert)",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        -592,
        160
      ]
    },
    {
      "id": "4fa0acb1-3986-4ddc-8091-4d8764c293ca",
      "name": "Chat Memory (Short)",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -32,
        416
      ]
    },
    {
      "id": "3e727639-8faa-464d-8647-fcbecac4b12c",
      "name": "OpenAI Embeddings (Chat)",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        176,
        624
      ]
    },
    {
      "id": "51362536-4f62-40f0-8ad9-444764d78841",
      "name": "Pinecone Retriever Tool",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        96,
        416
      ]
    },
    {
      "id": "7aa85892-9663-41d8-b1f6-7878760d311a",
      "name": "Support Chat Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -112,
        192
      ]
    },
    {
      "id": "e3397354-4491-4297-aeb3-2007826c1327",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3200,
        -208
      ],
      "parameters": {
        "width": 592,
        "height": 1872,
        "content": "## Phase 0 — Prep & IDs (MrScraper + OpenAI + Pinecone)\n\n### Goal\nGet everything ready so the workflow can (1) **index your docs** into a vector database and (2) **answer chat questions** using only t"
      }
    },
    {
      "id": "3fb900f4-b162-441e-abc5-d2c8127d9c32",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1680,
        368
      ],
      "parameters": {
        "width": 640,
        "height": 800,
        "content": "### Goal\nConvert each URL into **clean, readable text** that is suitable for embeddings.\n\n### What To Do\n1. **Process URLs in batches**\n   Use SplitInBatches to control load:\n   * batch size 1–5 (star"
      }
    },
    {
      "id": "3259015f-1736-4b53-a177-5426082820d1",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2496,
        80
      ],
      "parameters": {
        "width": 804,
        "height": 240,
        "content": "## Phase 1 — URL Discovery (MrScraper Map Agent)"
      }
    },
    {
      "id": "9fbedbad-4cf8-439e-9d81-b83053bd4b59",
      "name": "Extract Url",
      "type": "n8n-nodes-base.code",
      "position": [
        -1872,
        144
      ]
    },
    {
      "id": "f2ac36e1-fd44-400b-b6c0-7cb926f607f1",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2496,
        336
      ],
      "parameters": {
        "width": 800,
        "height": 656,
        "content": "### Goal\nGenerate a clean, deduplicated list of docs/support URLs that will be indexed.\n\n### What To Do\n1. **Pick a starting URL**\n   Use either:\n   * website root (ex: `https://yoursite.com`)\n   * do"
      }
    },
    {
      "id": "c8e56663-7ea2-4d1b-aea8-716e6430e869",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1680,
        80
      ],
      "parameters": {
        "width": 640,
        "height": 272,
        "content": "## Phase 2 — Page Extraction (MrScraper General Agent)"
      }
    },
    {
      "id": "5ae2cc65-5fb0-43bc-8ed7-31c2c90fc6ce",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        80
      ],
      "parameters": {
        "width": 720,
        "height": 368,
        "content": "## Phase 3 — Chunking + Embedding (OpenAI)"
      }
    },
    {
      "id": "aa105cff-cff7-439d-b935-eade04f5b68f",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        464
      ],
      "parameters": {
        "width": 720,
        "height": 576,
        "content": "### Goal\nSplit page text into chunks optimized for retrieval, then generate embeddings for each chunk.\n\n### What To Do\n1. **Chunk the text**\n   Recommended defaults:\n   * `chunkSize`: 900–1400 chars\n "
      }
    },
    {
      "id": "fadaaf48-ea41-4eee-a117-7f589c7ca48e",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        80
      ],
      "parameters": {
        "width": 624,
        "height": 688,
        "content": "## Phase 4 — Vector Store + Chat Endpoint (Pinecone + Chat Webhook)"
      }
    },
    {
      "id": "a6495d06-f3df-4f11-8f01-382a75277d20",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        784
      ],
      "parameters": {
        "width": 624,
        "height": 704,
        "content": "### Goal\nStore chunks in Pinecone and expose a chat endpoint that answers using retrieval.\n\n### What To Do\n1. **Upsert into Pinecone**\n   Insert chunks into Pinecone with metadata:\n   * `url` (for sou"
      }
    },
    {
      "id": "4fa49e49-7bfe-4170-897e-64690d0bec9e",
      "name": "Docs Loader (Chunks → Documents)",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        -464,
        304
      ]
    },
    {
      "id": "72cfdaed-ae93-4fa5-8f5d-16407acf9ead",
      "name": "OpenAI Chat",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -176,
        416
      ]
    },
    {
      "id": "9f050a73-481f-4b66-b404-a32b9aa4470b",
      "name": "Chat",
      "type": "@n8n/n8n-nodes-langchain.chat",
      "position": [
        -256,
        192
      ]
    },
    {
      "id": "3195ee52-c010-402b-b6d5-157e017f0fae",
      "name": "Pick Content Field",
      "type": "n8n-nodes-base.code",
      "position": [
        -1168,
        144
      ]
    }
  ],
  "connections": {
    "Chat": {
      "main": [
        [
          {
            "node": "Support Chat Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Url": {
      "main": [
        [
          {
            "node": "Batch URLs (Controlled Crawl)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat": {
      "ai_languageModel": [
        [
          {
            "node": "Support Chat Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Pick Content Field": {
      "main": [
        [
          {
            "node": "Chunk Text for Embeddings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chat Memory (Short)": {
      "ai_memory": [
        [
          {
            "node": "Support Chat Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Pinecone Retriever Tool": {
      "ai_tool": [
        [
          {
            "node": "Support Chat Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Embeddings (Chat)": {
      "ai_embedding": [
        [
          {
            "node": "Pinecone Retriever Tool",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Chunk Text for Embeddings": {
      "main": [
        [
          {
            "node": "Pinecone Vector Store (Upsert)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Embeddings (Indexing)": {
      "ai_embedding": [
        [
          {
            "node": "Pinecone Vector Store (Upsert)",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Batch URLs (Controlled Crawl)": {
      "main": [
        [],
        [
          {
            "node": "MrScraper - Extract Page Content (General Agent)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pinecone Vector Store (Upsert)": {
      "main": [
        [
          {
            "node": "Batch URLs (Controlled Crawl)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Docs Loader (Chunks → Documents)": {
      "ai_document": [
        [
          {
            "node": "Pinecone Vector Store (Upsert)",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "MrScraper - Discover URLs (Map Agent)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MrScraper - Discover URLs (Map Agent)": {
      "main": [
        [
          {
            "node": "Extract Url",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MrScraper - Extract Page Content (General Agent)": {
      "main": [
        [
          {
            "node": "Pick Content Field",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}