{
  "name": "Create RAG-ready knowledge bases from websites using Apify, Gemini & Supabase",
  "nodes": [
    {
      "id": "b7541584-131f-4868-b8dd-053ab509ab1b",
      "name": "Supabase Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        976,
        368
      ]
    },
    {
      "id": "ddb37d99-4e8d-4eef-83da-6b3088360062",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        192
      ],
      "parameters": {
        "width": 1072,
        "height": 820,
        "content": "## Input & Routing\nForm collects URL and scraping preferences. Switch node routes to 3 scraper configs based on user choice."
      }
    },
    {
      "id": "d6b1e754-2957-4334-b2e5-44a3a2a5286e",
      "name": "Embeddings Google Gemini",
      "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
      "position": [
        912,
        592
      ]
    },
    {
      "id": "c7d6b146-3fee-4e63-86ad-be8cdfb958ca",
      "name": "Improve Content Structure Quality",
      "type": "n8n-nodes-base.code",
      "position": [
        544,
        560
      ]
    },
    {
      "id": "fcc66f40-2945-4e46-a7d3-5e9c81134d91",
      "name": "Recursive Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        1072,
        752
      ]
    },
    {
      "id": "dfe8c7b7-1f39-45d8-8f9b-10b0c344a750",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        1072,
        592
      ]
    },
    {
      "id": "0cb16f73-e8b1-4dfa-812e-fc3b5b75a5dd",
      "name": "Clean Data",
      "type": "n8n-nodes-base.set",
      "position": [
        336,
        560
      ]
    },
    {
      "id": "372da59d-2fd7-4dbf-942c-735c3b8a81ad",
      "name": "Enter Website URL and Settings",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1072,
        336
      ]
    },
    {
      "id": "1e839b66-f236-4ebc-8585-3ecbace31d80",
      "name": "Prepare Settings for Apify Web Scraper",
      "type": "n8n-nodes-base.switch",
      "position": [
        -640,
        336
      ]
    },
    {
      "id": "b37e7166-ff9f-4ea2-9c8c-ac1aa8356d01",
      "name": "Set Data in Correct Request Format",
      "type": "n8n-nodes-base.set",
      "position": [
        -848,
        336
      ]
    },
    {
      "id": "435956de-3fc8-4f45-b458-dc83e6fa076a",
      "name": "Run Apify Scraper: Scrape All - w/Limit",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        32,
        560
      ]
    },
    {
      "id": "30458767-c553-4f17-a91c-d608aab3115b",
      "name": "Run Apify Scraper: Scrape 1 URL Only",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        32,
        768
      ]
    },
    {
      "id": "8bdceb21-a543-41ed-b952-53690f157ed0",
      "name": "No Limit to Number of Scraped Pages?",
      "type": "n8n-nodes-base.if",
      "position": [
        -304,
        352
      ]
    },
    {
      "id": "2bab90a9-7440-4c30-976e-7c1ed7d565e3",
      "name": "Run Apify Scraper: Scrape All - No Limit",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        32,
        336
      ]
    },
    {
      "id": "87f464c8-6daa-45fb-93a7-4acaa64d9685",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        192
      ],
      "parameters": {
        "width": 816,
        "height": 816,
        "content": "## Web Scraping\nThree Apify paths: all pages unlimited, all pages with limit, or single URL. Smart filtering removes unwanted elements."
      }
    },
    {
      "id": "0676473a-1c75-4bdb-b88e-df0156aa5667",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        192
      ],
      "parameters": {
        "width": 640,
        "height": 784,
        "content": "## Processing & Storage\nClean data → Add metadata → Chunk text → Generate embeddings → Store in Supabase. Batch size: 800."
      }
    },
    {
      "id": "b4bfe44a-1129-4ca5-9c1e-b898741bc1e9",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        -672
      ],
      "parameters": {
        "width": 864,
        "height": 832,
        "content": "# **Website Content to RAG-Ready Knowledge Base For AI Chatbots**\n\n  Convert any website into a searchable vector database for AI chatbots. Submit a URL, choose scraping scope, and this workflow handl"
      }
    },
    {
      "id": "37acfe02-2722-4515-a6c3-e8c70d66a29b",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        -608
      ],
      "parameters": {
        "width": 1344,
        "height": 768,
        "content": "## Sample Outputs\n\n### Apify actor \"runs\" in Apify Dashboard from this workflow\n![](https://i.postimg.cc/NMBqXSWs/Screenshot-2025-11-06-190813.png)\n"
      }
    },
    {
      "id": "b1c6f18b-8a82-4dd2-bf04-f9f11f562d94",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        -544
      ],
      "parameters": {
        "width": 1360,
        "height": 704,
        "content": "### Supabase `docuemnts` table with scraped website content ingested in chunks with vector embeddings\n![](https://i.postimg.cc/W4m0x8MG/Screenshot-2025-11-06-154326.png)\n"
      }
    }
  ],
  "connections": {
    "Clean Data": {
      "main": [
        [
          {
            "node": "Improve Content Structure Quality",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Supabase Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Google Gemini": {
      "ai_embedding": [
        [
          {
            "node": "Supabase Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Enter Website URL and Settings": {
      "main": [
        [
          {
            "node": "Set Data in Correct Request Format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Improve Content Structure Quality": {
      "main": [
        [
          {
            "node": "Supabase Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Set Data in Correct Request Format": {
      "main": [
        [
          {
            "node": "Prepare Settings for Apify Web Scraper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Limit to Number of Scraped Pages?": {
      "main": [
        [
          {
            "node": "Run Apify Scraper: Scrape All - No Limit",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Run Apify Scraper: Scrape All - w/Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Apify Scraper: Scrape 1 URL Only": {
      "main": [
        [
          {
            "node": "Clean Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Settings for Apify Web Scraper": {
      "main": [
        [
          {
            "node": "No Limit to Number of Scraped Pages?",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Run Apify Scraper: Scrape 1 URL Only",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Apify Scraper: Scrape All - w/Limit": {
      "main": [
        [
          {
            "node": "Clean Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Apify Scraper: Scrape All - No Limit": {
      "main": [
        [
          {
            "node": "Clean Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}