AutomationFlowsAI & RAG › Find the Most Relevant Workflow Templates Using Rag, Qdrant and Gemini

Find the Most Relevant Workflow Templates Using Rag, Qdrant and Gemini

ByARofiqi Maulana @arofiqimaulana on n8n.io

This workflow helps users find the most relevant n8n templates using AI.

Event trigger★★★★★ complexityAI-powered39 nodesHTTP RequestQdrant Vector StoreGoogle Gemini EmbeddingsDocument Default Data LoaderChat TriggerAgentGoogle Gemini ChatMemory Buffer Window
AI & RAG Trigger: Event Nodes: 39 Complexity: ★★★★★ AI nodes: yes Added:

This workflow corresponds to n8n.io template #15081 — 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": "RbZG9lJAOuLgib3i",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI Workflow Recommender (RAG + Qdrant + Gemini)",
  "tags": [],
  "nodes": [
    {
      "id": "9c980ba6-dcc9-4dc6-a7ec-db74147ebe05",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        1344
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 480,
        "content": "## Keyword List\nA collection of keywords used to search and collect relevant n8n workflows for storage"
      },
      "typeVersion": 1
    },
    {
      "id": "8dd1f2e3-955a-4fd6-a468-34ac5071679e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2304,
        1280
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 320,
        "content": "## Start Chatting\n- Receives user input from the chat interface and triggers the AI workflow.\n\n- This is the entry point for user queries."
      },
      "typeVersion": 1
    },
    {
      "id": "22475921-f4f1-4149-a29e-6cc2d2eea4a2",
      "name": "Start Ingestion (Manual Trigger)",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1168,
        1536
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "6cc94ab1-9d34-4bba-bae7-4e38a4d3f40f",
      "name": "Generate Search Queries",
      "type": "n8n-nodes-base.code",
      "position": [
        -928,
        1536
      ],
      "parameters": {
        "jsCode": "return [\n  {\n    json: {\n      queries: [\n        \"ai\",\n        \"chatbot\",\n        \"whatsapp\",\n        \"telegram\",\n        \"gmail\",\n        \"slack\",\n        \"automation\",\n        \"lead\",\n        \"scraping\",\n        \"social media\",\n        \"crm\",\n        \"email\",\n        \"notification\"\n      ],\n      maxPages: 5\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "a1d94a27-c440-42ba-9edf-c660b2ddaf21",
      "name": "Split Queries",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -656,
        1536
      ],
      "parameters": {
        "include": "allOtherFields",
        "options": {},
        "fieldToSplitOut": "queries"
      },
      "typeVersion": 1
    },
    {
      "id": "0f78158e-14c4-44eb-8f87-d7b09e911245",
      "name": "Prepare Search Params",
      "type": "n8n-nodes-base.set",
      "position": [
        -384,
        1536
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "f310dc98-d74d-458a-8567-46bbc770a596",
              "name": "search",
              "type": "string",
              "value": "={{$json.queries}}"
            },
            {
              "id": "ecc8b3b5-6e7a-48d8-b0b7-e4ff237cd69f",
              "name": "page",
              "type": "number",
              "value": 1
            },
            {
              "id": "ba53c3d4-73d2-4380-ad3b-d9eb425a7ea9",
              "name": "maxPages",
              "type": "number",
              "value": "={{$json.maxPages}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "cc096629-9331-45c8-b7d8-e4cc7866b63e",
      "name": "Fetch Templates from n8n API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -48,
        1536
      ],
      "parameters": {
        "url": "https://api.n8n.io/templates/search",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "search",
              "value": "={{ $json.search }}"
            },
            {
              "name": "page",
              "value": "={{ $json.page }}"
            },
            {
              "name": "rows",
              "value": "50"
            }
          ]
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "2bdfb4d6-5f68-4081-9bdd-c339b72da1cb",
      "name": "Check If Results Exist",
      "type": "n8n-nodes-base.if",
      "position": [
        240,
        1536
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "53065000-5f75-4da9-b401-be21bc4fd15b",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.workflows.length > 0 }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "caf0ecc6-3357-4862-99de-ba3d861c7905",
      "name": "Split Workflows",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        560,
        1520
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "workflows"
      },
      "typeVersion": 1
    },
    {
      "id": "33147b97-c9f6-4214-8da6-006899ddbfb2",
      "name": "Format for Embedding (Content + Metadata)",
      "type": "n8n-nodes-base.code",
      "position": [
        832,
        1520
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const d = $json;\n\nconst useCase = (d.use_case && d.use_case.length > 0)\n  ? d.use_case.join(', ')\n  : 'general automation';\n\nconst apps = (d.apps && d.apps.length > 0)\n  ? d.apps.join(', ')\n  : 'various integrations';\n\nconst difficulty = d.difficulty || 'unknown';\n\nreturn {\n  json: {\n    pageContent: `\nTemplate: ${d.name}\n\nDescription:\n${d.description || ''}\n\nUse Case:\n${useCase}\n\nApps:\n${apps}\n\nDifficulty:\n${difficulty}\n\nPopularity:\n${d.totalViews || 0}\n    `.trim(),\n\n    metadata: {\n      id: d.id,\n      name: d.name,\n      views: d.totalViews || 0,\n      apps: d.apps || [],\n      use_case: d.use_case || [],\n      difficulty: difficulty,\n      template_url: `https://n8n.io/workflows/${d.id}`\n    }\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "d2a084dc-9d90-4c0b-ad54-055f6d5273db",
      "name": "Remove Duplicate Templates",
      "type": "n8n-nodes-base.code",
      "position": [
        1136,
        1520
      ],
      "parameters": {
        "jsCode": "const seen = new Set();\n\nreturn items.filter(item => {\n  const id = item.json.metadata?.id;\n\n  // kalau tidak ada id, tetap lolos\n  if (!id) return true;\n\n  // kalau sudah pernah ada \u2192 buang\n  if (seen.has(id)) return false;\n\n  seen.add(id);\n  return true;\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "7f9b8c37-bad2-41c8-afcc-57d391a3c559",
      "name": "Store in Vector DB (Qdrant)",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        1504,
        1520
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "n8n-templates-db",
          "cachedResultName": "n8n-templates-db"
        },
        "embeddingBatchSize": 1
      },
      "credentials": {
        "qdrantApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "dea0434e-7a36-48df-a613-ba7bc3de52f2",
      "name": "Generate Embeddings",
      "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
      "position": [
        1376,
        1936
      ],
      "parameters": {
        "modelName": "models/gemini-embedding-001"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "28a26512-7d4b-4db9-8792-6abcedac582b",
      "name": "Load Documents for Embedding",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        1776,
        2000
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "id",
                "value": "={{$json.metadata.id}}"
              },
              {
                "name": "name",
                "value": "={{$json.metadata.name}}"
              },
              {
                "name": "views",
                "value": "={{$json.metadata.views}}"
              },
              {
                "name": "apps",
                "value": "={{$json.metadata.apps}}"
              },
              {
                "name": "use_case",
                "value": "={{$json.metadata.use_case}}"
              },
              {
                "name": "difficulty",
                "value": "={{$json.metadata.difficulty}}"
              },
              {
                "name": "template_url",
                "value": "={{$json.metadata.template_url}}"
              }
            ]
          }
        },
        "jsonData": "={{$json[\"pageContent\"]}}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1.1
    },
    {
      "id": "abc9a0e2-b521-4fe2-afbf-8c91a76ce5d8",
      "name": "Chat Input Trigger",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        2464,
        1424
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "3d828b79-6a9a-42ec-9bc8-9591c0a4bd61",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2944,
        1584
      ],
      "parameters": {
        "options": {
          "systemMessage": "=You are an n8n workflow recommendation expert.\n\nYour goal:\nHelp users find the most relevant n8n workflow templates based on their automation needs.\n\nStep-by-step behavior:\n1. Understand the user\u2019s goal\n2. Identify:\n   - apps involved (e.g. WhatsApp, Telegram, Gmail)\n   - use case (e.g. chatbot, automation, scraping, lead generation)\n3. Use the vector database tool to retrieve relevant workflows\n\nCRITICAL RULES:\n- You MUST use the vector database tool before answering\n- DO NOT answer from your own knowledge\n- DO NOT invent, guess, or generate workflow names\n- ONLY use workflows returned from the tool\n- If no results are found, say: \"No matching workflow found\"\n\nSTRICT VALIDATION:\n- If your answer contains any workflow NOT present in the tool results, it is incorrect\n- You MUST strictly base your answer ONLY on the tool output\n- Never create or modify workflow titles\n- Only copy exact names from metadata.name\n\nDATA USAGE RULES:\nYou MUST use ONLY:\n- metadata.name\n- metadata.description\n- metadata.template_url\n\n- If any of these fields are missing, DO NOT include that workflow\n\nULTRA STRICT CONTENT RULE:\n- You may ONLY restate or lightly rephrase metadata.description\n- DO NOT add any new words that introduce new meaning\n- DO NOT expand, interpret, or enhance the description\n- DO NOT add adjectives such as: \"advanced\", \"smart\", \"powerful\", \"comprehensive\"\n- DO NOT infer capabilities\n- DO NOT include technical details unless explicitly present\n- If a detail is not explicitly written, DO NOT include it\n\nSIMPLICITY RULE:\n- Keep explanations short and literal\n- Prefer direct restatement over explanation\n- Avoid interpretation or summarization that changes meaning\n\nSELECTION RULES:\n- Choose up to 3 workflows based on relevance\n- Do NOT just pick the first result\n\nANSWER FORMAT:\nFor each workflow:\n\n1. Name (exact from metadata.name)\n2. What it does (STRICTLY restated from metadata.description)\n3. Why it matches (based ONLY on the description, no new meaning)\n4. Template link (metadata.template_url)\n\nADDITIONAL RULES:\n- If results are weak, say it's a partial match\n- Do not add external knowledge\n- Do not explain beyond the data\n\nFINAL CHECK BEFORE ANSWERING:\n- Every workflow must come from tool results\n- Every explanation must stay within metadata.description\n- No added meaning, no embellishment, no interpretation"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "4b6ffee8-d310-4922-b959-a62349cc3828",
      "name": "LLM (Gemini Chat Model)",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        2528,
        1968
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-3-flash-preview"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b85d2941-807e-4fa2-afc5-aff16fa00ba6",
      "name": "Conversation Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        3152,
        1984
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "12a2891e-7c63-4358-9b42-31b0cbf20140",
      "name": "Retriever (Qdrant)",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        3616,
        1696
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {},
        "toolDescription": "=You are a retrieval tool for n8n workflow templates.\n\nYour job:\nRetrieve relevant workflows from the vector database based on the user\u2019s automation goal.\n\nThe database contains:\n- template name\n- description\n- integrations (apps)\n- use cases\n- popularity (views)\n- template_url\n\nCRITICAL RULES:\n- Return ONLY results from the database\n- DO NOT generate, guess, or invent any workflow\n- DO NOT rewrite, summarize, or modify any field\n- DO NOT add external knowledge\n- DO NOT perform reasoning, ranking, filtering, or interpretation\n- If no relevant workflows are found, return an empty result\n\nSEARCH BEHAVIOR:\n- Match user intent (semantic search), not just keywords\n- Consider:\n  - apps (e.g. WhatsApp, Telegram, Gmail)\n  - use case (automation, chatbot, scraping, lead generation)\n- Retrieve relevant candidates only\n\nOUTPUT REQUIREMENTS (STRICT):\n- Return raw results exactly as stored in the database\n- Each result MUST include:\n  - metadata.name\n  - metadata.description\n  - metadata.template_url\n  - metadata.views (if available)\n\n- DO NOT:\n  - rephrase\n  - summarize\n  - rename fields\n  - remove fields\n  - add fields\n\nIMPORTANT:\n- You are NOT allowed to think or explain\n- You ONLY return data\n- The AI agent will handle reasoning\n\nEFFICIENCY:\n- Perform retrieval in a single call\n- Do not repeat the same query",
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "n8n-templates-db",
          "cachedResultName": "n8n-templates-db"
        }
      },
      "credentials": {
        "qdrantApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "863c7939-c8a1-44b1-8187-0c3edc405df8",
      "name": "Query Embedding (Gemini)",
      "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
      "position": [
        3776,
        2048
      ],
      "parameters": {
        "modelName": "models/gemini-embedding-001"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "15e9a3ae-ff19-480b-a26c-7fd5347b42b8",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -736,
        1344
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 480,
        "content": "## Split Keyword\nSplits keyword list into individual queries so each can be processed separately."
      },
      "typeVersion": 1
    },
    {
      "id": "b1c63cc1-7402-4081-b0e3-41b937c69a18",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -464,
        1344
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 480,
        "content": "## Prepare API Request Parameters\nPrepares search parameters for the API request using each query."
      },
      "typeVersion": 1
    },
    {
      "id": "44301f05-c1d2-4b21-b8c6-9736ba2724a8",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        1344
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 480,
        "content": "## Fetch Templates from n8n API\nFetches workflow templates from the n8n API using the search parameters."
      },
      "typeVersion": 1
    },
    {
      "id": "65f33654-ba09-40e4-8db7-1986cb3a5257",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        160,
        1344
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 480,
        "content": "## Check If Templates Found\nChecks if the API returned any results before continuing the workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "3a6786a1-64ff-4ddf-b9e7-869d9c486b8f",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        1344
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 480,
        "content": "## Split Workflows\nSplits API results into individual workflow items for processing."
      },
      "typeVersion": 1
    },
    {
      "id": "a1f66251-198d-429f-8d11-73ba90179083",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        768,
        1344
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 480,
        "content": "## Prepare Documents for Embedding\nFormats workflow data into content and metadata for embedding."
      },
      "typeVersion": 1
    },
    {
      "id": "44075ceb-47dc-487f-ab06-c213d02ea496",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        1344
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 480,
        "content": "## Prevent Duplicate Data\nRemoves duplicate workflow entries from the dataset."
      },
      "typeVersion": 1
    },
    {
      "id": "98392593-34d9-4139-8337-bdbfb0f7eed3",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1424,
        1392
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 320,
        "content": "## Store data into Vector Database\nstores the processed workflows into a vector database (Qdrant)."
      },
      "typeVersion": 1
    },
    {
      "id": "a22aaff2-8f9f-45db-b7c1-9aad813da3d6",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        1888
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 400,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Convert Workflow into Vector\n\nThis node converts workflow content into vector embeddings using Gemini.\n\nThese embeddings represent the semantic meaning of the content, making it searchable in the vector database."
      },
      "typeVersion": 1
    },
    {
      "id": "0f93ade7-8e12-4d72-a28f-85ccabb9e5cf",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        1968
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 336,
        "content": "\n\n\n\n\n\n\n\n\n\n\n## Load Documents for Embedding\n\nThis node loads the formatted workflow data (content and metadata) to be processed into embeddings.\n\nIt ensures the correct data structure is passed to the embedding model."
      },
      "typeVersion": 1
    },
    {
      "id": "7d92306a-086c-4849-bc6b-a8152eac7a7b",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1344,
        1136
      ],
      "parameters": {
        "width": 3472,
        "height": 1296,
        "content": "## 1. Data Ingestion\n- This section is responsible for collecting workflow data from the n8n API.\n\n- It starts by generating a list of search keywords based on common automation use cases. Each keyword is processed individually to fetch workflow templates across multiple queries and pages.\n\n- The collected data is structured and prepared for downstream processing, ensuring a diverse and high-quality dataset for embedding and AI-powered retrieval."
      },
      "typeVersion": 1
    },
    {
      "id": "edb3efb4-4344-4eef-ab20-15c6c8c452b2",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2240,
        1136
      ],
      "parameters": {
        "width": 2016,
        "height": 1312,
        "content": "## 2. RAG Chatbot\n- This section implements an AI-powered RAG (Retrieval-Augmented Generation) chatbot.\n- It receives user queries, retrieves the most relevant workflows from a vector database, and generates intelligent recommendations using an LLM.\n- By combining semantic search with AI reasoning, the system provides accurate and context-aware workflow suggestions based on user intent."
      },
      "typeVersion": 1
    },
    {
      "id": "9f55dfc4-afca-4ec4-9235-b1bd25540545",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2848,
        1424
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 320,
        "content": "## AI Workflow Recommender Agent\n- Acts as the central reasoning engine.\n\n- It understands user intent, calls the retriever tool to fetch relevant workflows, and generates the final response using the LLM."
      },
      "typeVersion": 1
    },
    {
      "id": "3f295e0e-adad-4146-8f31-df52ab76282c",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2352,
        1904
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 384,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n## Translate user queries \n- Generates natural language responses based on user queries and retrieved data.\n\n- It is responsible for explaining and recommending workflows."
      },
      "typeVersion": 1
    },
    {
      "id": "08cfe911-e901-4148-8cd9-6bfd5beaea2e",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2992,
        1952
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 320,
        "content": "\n\n\n\n\n\n\n\n\n\n\n## Conversation Memory\n- Stores previous interactions to maintain context across the conversation.\n\n- This enables more natural and context-aware responses."
      },
      "typeVersion": 1
    },
    {
      "id": "239aeb05-5df1-4aa1-98cf-851e29cb28a7",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3504,
        1520
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 320,
        "content": "## Workflow Retriever (Qdrant)\n- Searches the vector database to find workflows that are most relevant to the user\u2019s query.\n\n- It uses semantic similarity instead of keyword matching."
      },
      "typeVersion": 1
    },
    {
      "id": "b387c555-63f8-4e53-8596-ba1a23e2fcde",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3600,
        2000
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 368,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n## Query Embedding (Gemini)\n- Converts the user query into a vector embedding.\n\n- This allows the system to perform semantic search in the vector database."
      },
      "typeVersion": 1
    },
    {
      "id": "60801523-f232-4efc-8ee8-8c21dd83c769",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3264,
        1072
      ],
      "parameters": {
        "width": 1024,
        "height": 1360,
        "content": "\ud83e\udd16 AI Workflow Recommender (RAG + n8n + Qdrant)\n\nThis workflow automatically recommends relevant n8n workflows based on the user\u2019s automation needs.\n\nIt uses a Retrieval-Augmented Generation (RAG) approach by combining:\n\t\u2022\tVector database (Qdrant)\n\t\u2022\tSemantic search (Embeddings)\n\t\u2022\tAI reasoning (Gemini)\n\n\u2e3b\n\n\ud83e\udde0 How it works\n\nThe system is divided into two main parts:\n\n1. Data Ingestion\n\t\u2022\tGenerates multiple search keywords (e.g. AI, WhatsApp, chatbot, automation)\n\t\u2022\tFetches workflow templates from the n8n API\n\t\u2022\tSplits and processes each workflow\n\t\u2022\tFormats data into content + metadata\n\t\u2022\tRemoves duplicates\n\t\u2022\tConverts data into embeddings\n\t\u2022\tStores everything in a vector database (Qdrant)\n\n\u2e3b\n\n2. RAG Chatbot (AI Recommender)\n\t\u2022\tReceives user input (e.g. \u201cI want to automate WhatsApp replies\u201d)\n\t\u2022\tConverts the query into embeddings\n\t\u2022\tSearches the vector database for similar workflows\n\t\u2022\tRetrieves the most relevant templates\n\t\u2022\tUses AI to generate structured recommendations\n\n\u2e3b\n\n\ud83d\udd04 Flow\n\nData Ingestion:\nGenerate Queries \u2192 Split \u2192 Prepare Params \u2192 Fetch API \u2192 Validate \u2192 Split Workflows \u2192 Format \u2192 Deduplicate \u2192 Embed \u2192 Store (Qdrant)\n\nRAG Chatbot:\nChat Input \u2192 AI Agent \u2192 Query Embedding \u2192 Vector Search (Qdrant) \u2192 AI Response\n\n\u2e3b\n\n\ud83d\ude80 What this workflow does\n\t\u2022\tUnderstands user intent (not just keywords)\n\t\u2022\tFinds relevant workflows using semantic search\n\t\u2022\tRecommends the best workflows with explanations\n\t\u2022\tProvides template links ready to use\n\n\u2e3b\n\n\u2699\ufe0f Setup Requirements\n\t1.\tAdd Qdrant credentials (Cloud or self-hosted)\n\t2.\tAdd Google Gemini API key\n\t3.\tRun the ingestion workflow first (to populate the database)\n\t4.\tActivate the chatbot workflow\n\n\u2e3b\n\n\u26a0\ufe0f Important\n\t\u2022\tMake sure the vector database is populated before using the chatbot\n\t\u2022\tEnsure embedding model and vector dimension match (e.g. 3072 for Gemini)\n\t\u2022\tAvoid free-tier rate limits for better performance\n\n\u2e3b\n\n\ud83d\udca1 Example Usage\n\nUser input:\n\t\u2022\t\u201cAutomate WhatsApp replies\u201d\n\t\u2022\t\u201cCreate a lead generation workflow\u201d\n\t\u2022\t\u201cSend emails automatically from form submissions\u201d\n\nThe AI will return:\n\t\u2022\tRelevant workflows\n\t\u2022\tExplanation of each\n\t\u2022\tDirect template links\n\n\u2e3b\n\n\ud83c\udfaf Goal\n\nTo provide an intelligent, AI-powered system that helps users quickly find and understand the best n8n workflows for their needs."
      },
      "typeVersion": 1
    },
    {
      "id": "cd8f3dc3-c8b6-49cf-b658-1d55cf6c262d",
      "name": "Sticky Note20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2096,
        1072
      ],
      "parameters": {
        "color": 4,
        "width": 656,
        "height": 960,
        "content": "## \ud83e\udd16 AI Workflow Recommender (RAG + Qdrant + Gemini)\n\nThis workflow helps you find the most relevant n8n templates using AI.\n\nIt uses:\n- RAG (Retrieval-Augmented Generation)\n- Qdrant (Vector Database)\n- Gemini (LLM & Embeddings)\n\n---\n\n## \ud83c\udfa5 Tutorial Video\n\nWatch the full setup guide here:\n\n@[youtube](pPFrxlJFNu8)\n\n---\n\n## \ud83d\ude80 What you will learn\n\n- How to collect workflow data from n8n API\n- How to store data in Qdrant vector database\n- How to generate embeddings using Gemini\n- How to build a RAG chatbot for workflow recommendations\n\n---\n\n## \u2699\ufe0f Setup Overview\n\n1. Set up Qdrant (Cloud or local)\n2. Run Data Ingestion workflow\n3. Start using the RAG chatbot\n\n---\n\n## \ud83d\udca1 Tip\n\nMake sure the vector database is populated before using the chatbot for best results."
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "binaryMode": "separate",
    "callerPolicy": "workflowsFromSameOwner",
    "timeSavedMode": "fixed",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "d93a8cc3-2fa6-4088-91d8-ea784571654b",
  "connections": {
    "Split Queries": {
      "main": [
        [
          {
            "node": "Prepare Search Params",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Workflows": {
      "main": [
        [
          {
            "node": "Format for Embedding (Content + Metadata)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chat Input Trigger": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retriever (Qdrant)": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Conversation Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Generate Embeddings": {
      "ai_embedding": [
        [
          {
            "node": "Store in Vector DB (Qdrant)",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Search Params": {
      "main": [
        [
          {
            "node": "Fetch Templates from n8n API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Results Exist": {
      "main": [
        [
          {
            "node": "Split Workflows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Search Queries": {
      "main": [
        [
          {
            "node": "Split Queries",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM (Gemini Chat Model)": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Query Embedding (Gemini)": {
      "ai_embedding": [
        [
          {
            "node": "Retriever (Qdrant)",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicate Templates": {
      "main": [
        [
          {
            "node": "Store in Vector DB (Qdrant)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store in Vector DB (Qdrant)": {
      "main": [
        []
      ]
    },
    "Fetch Templates from n8n API": {
      "main": [
        [
          {
            "node": "Check If Results Exist",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Load Documents for Embedding": {
      "ai_document": [
        [
          {
            "node": "Store in Vector DB (Qdrant)",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Start Ingestion (Manual Trigger)": {
      "main": [
        [
          {
            "node": "Generate Search Queries",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format for Embedding (Content + Metadata)": {
      "main": [
        [
          {
            "node": "Remove Duplicate Templates",
            "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 helps users find the most relevant n8n templates using AI.

Source: https://n8n.io/workflows/15081/ — 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 comprehensive workflow bundle is designed as a powerful starter kit, enabling you to build a multi-functional AI assistant on Telegram. It seamlessly integrates AI-powered voice interactions, an

Telegram Trigger, Telegram, OpenAI +19
AI & RAG

Code Extractfromfile. Uses manualTrigger, sort, httpRequest, compression. Event-driven trigger; 50 nodes.

HTTP Request, Compression, Edit Image +15
AI & RAG

🤖 AI Powered RAG Chatbot for Your Docs + Google Drive + Gemini + Qdrant. Uses documentDefaultDataLoader, textSplitterTokenSplitter, vectorStoreQdrant, splitInBatches. Event-driven trigger; 50 nodes.

Document Default Data Loader, Text Splitter Token Splitter, Qdrant Vector Store +10
AI & RAG

2464. Uses httpRequest, compression, editImage, documentDefaultDataLoader. Event-driven trigger; 50 nodes.

HTTP Request, Compression, Edit Image +15
AI & RAG

Workflow 2464. Uses httpRequest, compression, editImage, documentDefaultDataLoader. Event-driven trigger; 50 nodes.

HTTP Request, Compression, Edit Image +15