AutomationFlowsAI & RAG › Build a Company Website RAG Chatbot Using Apify, Pinecone and Gemini

Build a Company Website RAG Chatbot Using Apify, Pinecone and Gemini

ByFabian Maume @fabian-m on n8n.io

AI chatbots are only as good as the data they learn from. Most large language models (LLM) rely only on their training datasets.

Chat trigger trigger★★★★☆ complexityAI-powered25 nodesPinecone Vector StoreGoogle Gemini EmbeddingsDocument Default Data LoaderText Splitter Recursive Character Text SplitterAgentTool Vector StoreMemory Buffer WindowChat Trigger
AI & RAG Trigger: Chat trigger Nodes: 25 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Chat 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": "fAeO17YtvOnAcqp5",
  "name": "RAG Workflow For Company Website Using Apify and Gemini",
  "tags": [],
  "nodes": [
    {
      "id": "09ac58e3-6087-4e79-a2bb-a0ae2ca5d5a2",
      "name": "Pinecone Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        240,
        240
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "pineconeIndex": {
          "__rl": true,
          "mode": "list",
          "value": "company-website",
          "cachedResultName": "company-website"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bb8a134c-d2ac-4ebd-bd62-4bc5de691e9f",
      "name": "Embeddings Google Gemini",
      "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
      "position": [
        208,
        528
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "fdc7c33c-2d4e-4b71-8051-ae1b2c0f27a2",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        400,
        464
      ],
      "parameters": {
        "options": {},
        "dataType": "binary",
        "binaryMode": "specificField"
      },
      "typeVersion": 1
    },
    {
      "id": "481a5d38-f18e-4aff-add0-b06183892ed6",
      "name": "Recursive Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        560,
        688
      ],
      "parameters": {
        "options": {},
        "chunkOverlap": 100
      },
      "typeVersion": 1
    },
    {
      "id": "cd132fcf-10fd-439e-be41-2421934188e9",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -16,
        1088
      ],
      "parameters": {
        "options": {
          "systemMessage": "You are a chatbot designed to answer questions based on company website.\n\nRetrieve relevant information from the provided website pages and provide a concise, accurate, and informative answer to the question.\n\nUse the tool called \"company_documents_tool\" to retrieve any information from the company's website.\n\nIf the answer cannot be found in the provided documents, respond with \"I cannot find the answer in the available resources.\""
        }
      },
      "typeVersion": 1.7
    },
    {
      "id": "a4b400dd-0547-4ae5-9067-2cc618e30fc2",
      "name": "Vector Store Tool",
      "type": "@n8n/n8n-nodes-langchain.toolVectorStore",
      "position": [
        496,
        1200
      ],
      "parameters": {
        "name": "company_documents_tool",
        "description": "Retrieve information from any company webpage"
      },
      "typeVersion": 1
    },
    {
      "id": "1bbf4fdf-c8c0-4f4b-9c48-675b2de00fd4",
      "name": "Pinecone Vector Store (Retrieval)",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        320,
        1440
      ],
      "parameters": {
        "options": {},
        "pineconeIndex": {
          "__rl": true,
          "mode": "list",
          "value": "company-website",
          "cachedResultName": "company-website"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "862bac5f-4af9-4b79-898f-3c65f377695c",
      "name": "Embeddings Google Gemini (retrieval)",
      "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
      "position": [
        272,
        1648
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "2a54bc3d-d09e-43a7-9fe8-8c9856ed7acc",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        992
      ],
      "parameters": {
        "color": 4,
        "width": 1392,
        "height": 912,
        "content": "## Chat bot logic"
      },
      "typeVersion": 1
    },
    {
      "id": "144c7d7e-8b52-4b19-bb75-9548568700a3",
      "name": "Window Buffer Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        112,
        1376
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "e1caf870-a499-4082-a005-59b38516f5b8",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -368,
        1088
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "8446347a-3466-42dc-a09c-73ee7176eb15",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -128,
        1392
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.0-flash-exp"
      },
      "typeVersion": 1
    },
    {
      "id": "a169290d-cd1b-4913-8347-908de915e360",
      "name": "Google Gemini Chat Model (retrieval)",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        768,
        1424
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.0-flash-exp"
      },
      "typeVersion": 1
    },
    {
      "id": "34ac062b-1c3f-41f2-8d05-6c4f080e11e5",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -976,
        464
      ],
      "parameters": {
        "width": 420,
        "height": 720,
        "content": "## Set up guide\n\nAll Nodes with an orange sticky note require setup.\n\n**Get your tools set up:**\n1 Google Cloud Project and Vertex AI API:\n* Create a Google Cloud project.\n* Enable the Vertex AI API for your project.\n* Obtain a Google AI API key from Google AI Studio\n\n2 Get an Apify account\n* Create an [Apify account](https://apify.com/)\n\n3 Pinecone Account:\n* Create a free account on the Pinecone website.\n* Obtain your API key from your Pinecone dashboard.\n* Create an index named company-website in your Pinecone project.\n\n\n**Configure credentials in your n8n environment for:**\n* Google Gemini(PaLM) Api (using your Google AI API key)\n* Pinecone API (using your Pinecone API key)\n\n**Setup trigger frequency**\n* Edit the Schedule  Trigger to match the frequency at which you wish to update your RAG\n* If you want to train your chatbot only once, you can replace it with a click trigger.\n\n**Set up the Apify node**\n* Authenticate (via Oath or APi)\n* Set up your website URL in the JSON input\n\n** You should be all set**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a44e688b-7d6e-4e92-af8e-541714a52c86",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -384,
        240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks"
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "eaf6d91a-54e5-4c58-bdca-a996051c1ac1",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        112
      ],
      "parameters": {
        "color": 2,
        "width": 224,
        "height": 288,
        "content": "\nChoose the update frequency"
      },
      "typeVersion": 1
    },
    {
      "id": "d21591be-d555-430e-aad1-20160d055ea9",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        112
      ],
      "parameters": {
        "color": 2,
        "width": 224,
        "height": 288,
        "content": "Connect your Apify Actor\nSetup target website in JSON input, instead of tetriz.io"
      },
      "typeVersion": 1
    },
    {
      "id": "066a4d09-5329-4f5a-8b37-f950b8d51d77",
      "name": "Scrape website data",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        -128,
        240
      ],
      "parameters": {
        "memory": 4096,
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "aYG0l9s7dbB7j3gbS",
          "cachedResultUrl": "https://console.apify.com/actors/aYG0l9s7dbB7j3gbS/input",
          "cachedResultName": "Website Content Crawler (apify/website-content-crawler)"
        },
        "operation": "Run actor and get dataset",
        "customBody": "{\n    \"aggressivePrune\": false,\n    \"blockMedia\": true,\n    \"clickElementsCssSelector\": \"[aria-expanded=\\\"false\\\"]\",\n    \"clientSideMinChangePercentage\": 15,\n    \"crawlerType\": \"playwright:adaptive\",\n    \"debugLog\": false,\n    \"debugMode\": true,\n    \"expandIframes\": true,\n    \"ignoreCanonicalUrl\": true,\n    \"ignoreHttpsErrors\": false,\n    \"keepUrlFragments\": false,\n    \"maxCrawlDepth\": 0,\n    \"proxyConfiguration\": {\n        \"useApifyProxy\": true,\n        \"apifyProxyGroups\": []\n    },\n    \"readableTextCharThreshold\": 100,\n    \"removeCookieWarnings\": true,\n    \"removeElementsCssSelector\": \"nav, footer, script, style, noscript, svg, img[src^='data:'],\\n[role=\\\"alert\\\"],\\n[role=\\\"banner\\\"],\\n[role=\\\"dialog\\\"],\\n[role=\\\"alertdialog\\\"],\\n[role=\\\"region\\\"][aria-label*=\\\"skip\\\" i],\\n[aria-modal=\\\"true\\\"]\",\n    \"renderingTypeDetectionPercentage\": 10,\n    \"respectRobotsTxtFile\": false,\n    \"reuseStoredDetectionResults\": false,\n    \"saveFiles\": false,\n    \"saveHtml\": false,\n    \"saveHtmlAsFile\": false,\n    \"saveMarkdown\": true,\n    \"saveScreenshots\": false,\n    \"signHttpRequests\": false,\n    \"startUrls\": [\n        {\n            \"url\": \"https://www.tetriz.io/\"\n        }\n    ],\n    \"storeSkippedUrls\": false,\n    \"useLlmsTxt\": false,\n    \"useSitemaps\": true\n}",
        "actorSource": "store",
        "authentication": "apifyOAuth2Api"
      },
      "credentials": {},
      "typeVersion": 1
    },
    {
      "id": "80d93e16-6b55-4934-afc4-9ccd0321a97a",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        176
      ],
      "parameters": {
        "color": 2,
        "width": 368,
        "height": 208,
        "content": "**Environment setting:**\nConnect Pinecone (using Pinecone API key)"
      },
      "typeVersion": 1
    },
    {
      "id": "a59f473c-7da8-46e7-bef8-5b5a1a0e5b2a",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        464
      ],
      "parameters": {
        "color": 2,
        "width": 208,
        "height": 304,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Environment setting:**\nConnect Google Gemini (using your Google AI API key)"
      },
      "typeVersion": 1
    },
    {
      "id": "030a5bb7-953b-4d00-84fd-88b68ca326e3",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        1344
      ],
      "parameters": {
        "color": 2,
        "width": 208,
        "height": 320,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Environment setting:**\nConnect Google Gemini (using your Google AI API key)"
      },
      "typeVersion": 1
    },
    {
      "id": "3ff672ce-6e3a-420e-8a47-73b25bc10de9",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        1328
      ],
      "parameters": {
        "color": 2,
        "width": 208,
        "height": 336,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Environment setting:**\nConnect Google Gemini (using your Google AI API key)"
      },
      "typeVersion": 1
    },
    {
      "id": "3ff43827-49e3-4da3-ba60-1a2835f26e0c",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        208,
        1584
      ],
      "parameters": {
        "color": 2,
        "width": 208,
        "height": 304,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Environment setting:**\nConnect Google Gemini (using your Google AI API key)"
      },
      "typeVersion": 1
    },
    {
      "id": "f28432e3-74e9-46e6-bcc7-140e91e30c89",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        272,
        1344
      ],
      "parameters": {
        "color": 2,
        "width": 368,
        "height": 208,
        "content": "**Environment setting:**\nConnect Pinecone (using Pinecone API key)"
      },
      "typeVersion": 1
    },
    {
      "id": "ffdb313d-fc36-4ad0-8faa-ae70aa50e0f0",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        32
      ],
      "parameters": {
        "color": 4,
        "width": 1392,
        "height": 912,
        "content": "## Training logic"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "56948486-89c5-4503-b3ef-a166e018ca8c",
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Scrape website data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Vector Store Tool": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Pinecone Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Scrape website data": {
      "main": [
        [
          {
            "node": "Pinecone Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Window Buffer Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Google Gemini": {
      "ai_embedding": [
        [
          {
            "node": "Pinecone Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pinecone Vector Store (Retrieval)": {
      "ai_vectorStore": [
        [
          {
            "node": "Vector Store Tool",
            "type": "ai_vectorStore",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Google Gemini (retrieval)": {
      "ai_embedding": [
        [
          {
            "node": "Pinecone Vector Store (Retrieval)",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model (retrieval)": {
      "ai_languageModel": [
        [
          {
            "node": "Vector Store Tool",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

AI chatbots are only as good as the data they learn from. Most large language models (LLM) rely only on their training datasets.

Source: https://n8n.io/workflows/14157/ — 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 acts as a 24/7 sales agent, engaging leads across WhatsApp, Instagram, Facebook, Telegram, and your website. It intelligently transcribes audio messages, answers questions using a knowle

Chat Trigger, Memory Postgres Chat, Tool Workflow +20
AI & RAG

⚡AI-Powered YouTube Playlist & Video Summarization and Analysis v2. Uses lmChatGoogleGemini, agent, splitOut, chainLlm. Chat trigger; 72 nodes.

Google Gemini Chat, Agent, Chain Llm +11
AI & RAG

This n8n workflow transforms entire YouTube playlists or single videos into interactive knowledge bases you can chat with. Ask questions and get summaries without needing to watch hours of content. 🔗

Google Gemini Chat, Agent, Chain Llm +11
AI & RAG

Advanced Ai Demo Presented At Ai Developers 14 Meetup. Uses slack, stickyNote, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi. Chat trigger; 39 nodes.

Slack, Text Splitter Recursive Character Text Splitter, OpenAI Embeddings +14
AI & RAG

Advanced Ai Demo (Presented At Ai Developers #14 Meetup). Uses slack, stickyNote, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi. Chat trigger; 39 nodes.

Slack, Text Splitter Recursive Character Text Splitter, OpenAI Embeddings +14