This workflow follows the Documentdefaultdataloader → Google Gemini Embeddings 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 →
{
"nodes": [
{
"id": "2498bb93-176f-458c-acee-f541859df770",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
2460,
2820
],
"parameters": {},
"typeVersion": 1
},
{
"id": "c08bcf84-9336-44f9-b452-0c9469f18f48",
"name": "Web Search For API Schema",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
3100,
3820
],
"parameters": {
"url": "https://api.apify.com/v2/acts/serping~fast-google-search-results-scraper/run-sync-get-dataset-items",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "searchTerms",
"value": "={{\n[\n `site:${$json.data.url.replace(/^http[s]:\\/\\//, '').replace(/\\/$/, '').replace('www.', '')} \"${$json.data.service}\" api developer (intext:reference OR intext:resource) (-inurl:support OR -inurl:help) (inurl:api OR intitle:api) -filetype:pdf`\n]\n}}"
},
{
"name": "resultsPerPage",
"value": "={{ 10 }}"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "d5b19e3a-acd0-4b06-8d77-42de1f797dba",
"name": "Scrape Webpage Contents",
"type": "n8n-nodes-base.httpRequest",
"position": [
3940,
3720
],
"parameters": {
"url": "https://api.apify.com/v2/acts/apify~web-scraper/run-sync-get-dataset-items",
"options": {
"batching": {
"batch": {
"batchSize": 2,
"batchInterval": 30000
}
}
},
"jsonBody": "={\n \"startUrls\": [\n {\n \"url\": \"{{ $json.source.link }}\",\n \"method\": \"GET\"\n }\n ],\n \"breakpointLocation\": \"NONE\",\n \"browserLog\": false,\n \"closeCookieModals\": false,\n \"debugLog\": false,\n \"downloadCss\": false,\n \"downloadMedia\": false,\n \"excludes\": [\n {\n \"glob\": \"/**/*.{png,jpg,jpeg,pdf}\"\n }\n ],\n \"headless\": true,\n \"ignoreCorsAndCsp\": false,\n \"ignoreSslErrors\": false,\n \n \"injectJQuery\": true,\n \"keepUrlFragments\": false,\n \"linkSelector\": \"a[href]\",\n \"maxCrawlingDepth\": 1,\n \"maxPagesPerCrawl\": 1,\n \"maxRequestRetries\": 1,\n \"maxResultsPerCrawl\": 1,\n \"pageFunction\": \"// The function accepts a single argument: the \\\"context\\\" object.\\n// For a complete list of its properties and functions,\\n// see https://apify.com/apify/web-scraper#page-function \\nasync function pageFunction(context) {\\n\\n await new Promise(res => { setTimeout(res, 6000) });\\n // This statement works as a breakpoint when you're trying to debug your code. Works only with Run mode: DEVELOPMENT!\\n // debugger; \\n\\n // jQuery is handy for finding DOM elements and extracting data from them.\\n // To use it, make sure to enable the \\\"Inject jQuery\\\" option.\\n const $ = context.jQuery;\\n const title = $('title').first().text();\\n\\n // Clone the body to avoid modifying the original content\\n const bodyClone = $('body').clone();\\n bodyClone.find('iframe, img, script, style, object, embed, noscript, svg, video, audio').remove();\\n const body = bodyClone.html();\\n\\n // Return an object with the data extracted from the page.\\n // It will be stored to the resulting dataset.\\n return {\\n url: context.request.url,\\n title,\\n body\\n };\\n}\",\n \"postNavigationHooks\": \"// We need to return array of (possibly async) functions here.\\n// The functions accept a single argument: the \\\"crawlingContext\\\" object.\\n[\\n async (crawlingContext) => {\\n // ...\\n },\\n]\",\n \"preNavigationHooks\": \"// We need to return array of (possibly async) functions here.\\n// The functions accept two arguments: the \\\"crawlingContext\\\" object\\n// and \\\"gotoOptions\\\".\\n[\\n async (crawlingContext, gotoOptions) => {\\n // ...\\n },\\n]\\n\",\n \"proxyConfiguration\": {\n \"useApifyProxy\": true\n },\n \"runMode\": \"PRODUCTION\",\n \n \"useChrome\": false,\n \"waitUntil\": [\n \"domcontentloaded\"\n ],\n \"globs\": [],\n \"pseudoUrls\": [],\n \"proxyRotation\": \"RECOMMENDED\",\n \"maxConcurrency\": 50,\n \"pageLoadTimeoutSecs\": 60,\n \"pageFunctionTimeoutSecs\": 60,\n \"maxScrollHeightPixels\": 5000,\n \"customData\": {}\n}",
"sendBody": true,
"sendQuery": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpQueryAuth",
"queryParameters": {
"parameters": [
{
"name": "memory",
"value": "2048"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "5853ba7e-4068-4792-be5c-b8cf81ee89cb",
"name": "Results to List",
"type": "n8n-nodes-base.splitOut",
"position": [
3460,
3720
],
"parameters": {
"options": {},
"fieldToSplitOut": "origin_search.results"
},
"typeVersion": 1
},
{
"id": "8ed2e8ec-b2e3-474b-b19d-f38b518f274b",
"name": "Recursive Character Text Splitter1",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
5800,
4020
],
"parameters": {
"options": {},
"chunkSize": 4000
},
"typeVersion": 1
},
{
"id": "e2a8137b-7da3-4032-bca2-c14465356f02",
"name": "Content Chunking @ 50k Chars",
"type": "n8n-nodes-base.set",
"position": [
5380,
3740
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "7753a4f4-3ec2-4c05-81df-3d5e8979a478",
"name": "=data",
"type": "array",
"value": "={{ new Array(Math.round($json.content.length / Math.min($json.content.length, 50000))).fill('').map((_,idx) => $json.content.substring(idx * 50000, idx * 50000 + 50000)) }}"
},
{
"id": "7973bcb4-f239-4619-85fc-c76e20386375",
"name": "service",
"type": "string",
"value": "={{ $json.service }}"
},
{
"id": "b46e44bc-ad01-4cf0-8b07-25eeb1fb5874",
"name": "url",
"type": "string",
"value": "={{ $json.url }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "6ef5866a-d992-4472-9221-27efbec8e7be",
"name": "Split Out Chunks",
"type": "n8n-nodes-base.splitOut",
"position": [
5540,
3740
],
"parameters": {
"include": "allOtherFields",
"options": {},
"fieldToSplitOut": "data"
},
"typeVersion": 1
},
{
"id": "5e43b4d8-cebf-43ed-866d-0b4cb2997853",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
5800,
3900
],
"parameters": {
"options": {
"metadata": {
"metadataValues": [
{
"name": "service",
"value": "={{ $json.service }}"
},
{
"name": "url",
"value": "={{ $json.url }}"
}
]
}
},
"jsonData": "={{ $json.data }}",
"jsonMode": "expressionData"
},
"typeVersion": 1
},
{
"id": "d4b34767-be50-44ee-b778-18842034c276",
"name": "Set Embedding Variables",
"type": "n8n-nodes-base.set",
"position": [
4980,
3580
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4008ae44-7998-4a6f-88c9-686f8b02e92b",
"name": "content",
"type": "string",
"value": "={{ $json.body }}"
},
{
"id": "f7381ac6-ef40-463c-ad2b-df2c31d3e828",
"name": "service",
"type": "string",
"value": "={{ $('EventRouter').first().json.data.service }}"
},
{
"id": "7eae99fd-75c7-4974-a128-641b8ada0cc2",
"name": "url",
"type": "string",
"value": "={{ $json.url }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "109b6c3a-9b16-40cc-9186-5045df387b52",
"name": "Execute Workflow Trigger",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
2420,
4200
],
"parameters": {},
"typeVersion": 1
},
{
"id": "31556ff2-6358-4bd4-8ec4-2797d993256e",
"name": "Execution Data",
"type": "n8n-nodes-base.executionData",
"position": [
2620,
4200
],
"parameters": {
"dataToSave": {
"values": [
{
"key": "eventType",
"value": "={{ $json.eventType }}"
},
{
"key": "executedById",
"value": "={{ $json.executedById }}"
},
{
"key": "service",
"value": "={{ $json.data.service }}"
}
]
}
},
"typeVersion": 1
},
{
"id": "b65b3d4d-f667-4f8f-a06f-847c3d7b83e0",
"name": "EventRouter",
"type": "n8n-nodes-base.switch",
"position": [
2800,
4200
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "research",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.eventType }}",
"rightValue": "research"
}
]
},
"renameOutput": true
},
{
"outputKey": "extraction",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5418515e-ef6a-42e0-aeb9-8d0d35b898ca",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.eventType }}",
"rightValue": "extract"
}
]
},
"renameOutput": true
},
{
"outputKey": "generate",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0135165e-d211-44f3-92a4-a91858a57d99",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.eventType }}",
"rightValue": "generate"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "541f7d9b-c8ff-44dc-8618-8550dbf0b951",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
4460,
3740
],
"parameters": {
"options": {},
"modelName": "models/gemini-1.5-flash-latest"
},
"typeVersion": 1
},
{
"id": "617d6139-8417-4ecb-8f7c-558cd1c38ac3",
"name": "Successful Runs",
"type": "n8n-nodes-base.filter",
"position": [
4100,
3720
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cac77cce-0a5c-469e-ba80-9fb026f04b18",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.body }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2,
"alwaysOutputData": true
},
{
"id": "1115db69-b414-46cd-a9a1-565ae98cbd91",
"name": "For Each Document...",
"type": "n8n-nodes-base.splitInBatches",
"position": [
5180,
3580
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "3f0e3764-2479-4d74-aca8-c3e830eac423",
"name": "Embeddings Google Gemini",
"type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
"position": [
5680,
3900
],
"parameters": {
"modelName": "models/text-embedding-004"
},
"typeVersion": 1
},
{
"id": "87d42766-d1a2-406d-b01c-044fd2fc8910",
"name": "Has API Documentation?",
"type": "@n8n/n8n-nodes-langchain.textClassifier",
"position": [
4460,
3580
],
"parameters": {
"options": {
"fallback": "discard"
},
"inputText": "={{\n$json.body\n .replaceAll('\\n', '')\n .substring(0, 40000)\n}}",
"categories": {
"categories": [
{
"category": "contains_api_schema_documentation",
"description": "True if this document contains REST API schema documentation or definitions"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "55939b49-d91c-42a1-9770-48cbe4008c9a",
"name": "Store Document Embeddings",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
5700,
3740
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "id",
"value": "={{ $('EventRouter').first().json.data.collection }}"
}
},
"typeVersion": 1
},
{
"id": "3e1da749-b8b9-42cb-818b-eabf4b114abb",
"name": "Embeddings Google Gemini1",
"type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
"position": [
3700,
4520
],
"parameters": {
"modelName": "models/text-embedding-004"
},
"typeVersion": 1
},
{
"id": "be0906d4-351f-4b3b-9f32-8e5ee68083c5",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
4600,
4240
],
"parameters": {
"options": {},
"modelName": "models/gemini-1.5-pro-002"
},
"typeVersion": 1
},
{
"id": "886415d5-c888-4b97-9fb5-02e6a14df4cc",
"name": "Extract API Operations",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
4600,
4100
],
"parameters": {
"text": "={{ $json.documents }}",
"options": {
"systemPromptTemplate": "=You have been given an extract of a webpage which should contain a list of web/REST api operations.\nStep 1. Extract all REST (eg. GET,POST,PUT,DELETE) API operation endpoints from the page content and generate appropriate labels for the resource, operation, description, method for each.\n* \"resource\" refers to the API group, for example: \"/v1/api/indicators/list\" and \"/v1/api/indicators/create\" will both have the resource name of \"indicators\". Use the following template \"<domain>\" eg. \"entities\", \"posts\", \"credentials\".\n* \"operation\" refers to the action performed, use the following template \"<verb> <entity>\" eg. \"List entities\", \"Create post\", \"Update credentials\"\n* only use one HTTP verb for \"method\"\n* \"description\" should be limited to one sentence.\n* Examples of API urls: \"/api/\", \"/api/v1/\", \"/v1/api\". API urls should not end with \"htm\" or html\".\n* Extract a maximum of 15 endpoints.\n* If the page content contains no api operations, return an empty array."
},
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"resource\": { \"type\": \"string\" },\n \"operation\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"method\": { \"type\": \"string\" },\n \"documentation_url\": { \"type\": \"string\" }\n }\n }\n}"
},
"typeVersion": 1
},
{
"id": "76470e34-7c1f-44ce-81e2-047dcca3fa32",
"name": "Search in Relevant Docs",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
3700,
4380
],
"parameters": {
"mode": "load",
"topK": 5,
"prompt": "={{ $json.query }}",
"options": {
"searchFilterJson": "={{\n{\n \"must\": [\n {\n \"key\": \"metadata.service\",\n \"match\": {\n \"value\": $('EventRouter').first().json.data.service\n }\n }\n ]\n}\n}}"
},
"qdrantCollection": {
"__rl": true,
"mode": "id",
"value": "={{ $('EventRouter').first().json.data.collection }}"
}
},
"typeVersion": 1
},
{
"id": "49ca6a35-5b89-4ed5-bbab-250e09b4222f",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
3780,
3160
],
"parameters": {
"amount": 0
},
"typeVersion": 1.1
},
{
"id": "800cb05b-f5d1-47c8-869e-921915929f34",
"name": "Remove Dupes",
"type": "n8n-nodes-base.removeDuplicates",
"position": [
3780,
3720
],
"parameters": {
"compare": "selectedFields",
"options": {},
"fieldsToCompare": "source.link"
},
"typeVersion": 2
},
{
"id": "d8203c40-aa0b-44b9-8dfd-aea250c8d109",
"name": "Filter Results",
"type": "n8n-nodes-base.filter",
"position": [
3620,
3720
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "42872456-411b-4d86-a9dd-b907d001ea1c",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.type }}",
"rightValue": "normal"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "5714dc09-fd67-4285-9434-ac97cd80dec1",
"name": "Research",
"type": "n8n-nodes-base.executeWorkflow",
"onError": "continueErrorOutput",
"position": [
3460,
2980
],
"parameters": {
"mode": "each",
"options": {
"waitForSubWorkflow": true
},
"workflowId": {
"__rl": true,
"mode": "id",
"value": "={{ $workflow.id }}"
}
},
"typeVersion": 1.1
},
{
"id": "2a2d3271-b0b6-4a1a-94e1-9b01399ba88f",
"name": "Has Results?",
"type": "n8n-nodes-base.if",
"position": [
3280,
3820
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1223d607-45a8-44b1-b510-56fdbe013eba",
"operator": {
"type": "array",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $jmespath($json, 'origin_search.results') }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b953082c-2d37-4549-80a7-d60535b8580e",
"name": "Response Empty",
"type": "n8n-nodes-base.set",
"position": [
3460,
3900
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5bb23ce9-eb72-4868-9344-9e5d3952cc52",
"name": "response",
"type": "string",
"value": "no web results"
}
]
}
},
"executeOnce": true,
"typeVersion": 3.4
},
{
"id": "41e9c328-d145-4b71-93bb-e2c448a14be0",
"name": "Response OK",
"type": "n8n-nodes-base.set",
"position": [
5380,
3580
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "79598789-4468-4565-828f-fedc48be15c3",
"name": "response",
"type": "string",
"value": "ok"
}
]
}
},
"executeOnce": true,
"typeVersion": 3.4
},
{
"id": "5d0a7556-def9-4c70-8828-40b4d22904de",
"name": "Combine Docs",
"type": "n8n-nodes-base.aggregate",
"position": [
4020,
4380
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "39bd90b4-e0f5-49b0-b4a7-55a3ae8eccb2",
"name": "Template to List",
"type": "n8n-nodes-base.splitOut",
"position": [
3280,
4200
],
"parameters": {
"options": {
"destinationFieldName": "query"
},
"fieldToSplitOut": "queries"
},
"typeVersion": 1
},
{
"id": "51a1da10-5ad0-4bac-9bec-55b5af3da702",
"name": "Query Templates",
"type": "n8n-nodes-base.set",
"position": [
3100,
4200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e2a02550-8f53-4f8d-bb83-68ee3606736e",
"name": "queries",
"type": "array",
"value": "=[\n\"What are the core functionalities, essential features, or primary use cases of {{ $json.data.service }}?\",\n\"Is there an API overview or API categories for {{ $json.data.service }}? What main APIs are listed or mentioned?\",\n\"What industry does {{ $json.data.service }} operate in? What is the most important of the services in the industry? Return the important service as the function.\",\n\"What REST apis (GET, POST, DELETE, PATCH) and/or operations can you identify for {{ $json.data.service }}?\",\n\"Does {{ $json.data.service }} have any CURL examples? If you can, identify one such example and explain what it does.\"\n]"
}
]
}
},
"executeOnce": true,
"typeVersion": 3.3
},
{
"id": "414091b7-114b-4fc3-9755-2f87cfef239e",
"name": "Google Gemini Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
3700,
4240
],
"parameters": {
"options": {},
"modelName": "models/gemini-1.5-pro-002"
},
"typeVersion": 1
},
{
"id": "1f0f45ff-3bc9-4786-92e1-319244d020c0",
"name": "For Each Template...",
"type": "n8n-nodes-base.splitInBatches",
"position": [
3460,
4200
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "2e577e62-7f89-4c99-b540-ce8c44f19a55",
"name": "Query & Docs",
"type": "n8n-nodes-base.set",
"position": [
4180,
4380
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "fdaea3de-3c9a-4f26-b7dc-769e534006a9",
"name": "query",
"type": "string",
"value": "={{ $('For Each Template...').item.json.query }}"
},
{
"id": "88198374-d2f9-4ae7-b262-d3b2e630e0ac",
"name": "documents",
"type": "string",
"value": "={{ $json.data.map(item => item.document.pageContent.replaceAll('\\n', ' ')).join('\\n---\\n') }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "548d51fd-9740-4b4c-9c81-db62d2b31053",
"name": "Identify Service Products",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
3700,
4100
],
"parameters": {
"text": "={{ $json.query }}",
"options": {
"systemPromptTemplate": "=Use the following document to answer the user's question:\n```\n{{ $json.documents.replace(/[\\{\\}]/g, '') }}\n```"
},
"attributes": {
"attributes": [
{
"name": "product_or_solution",
"required": true,
"description": "A product or solution offered by the service"
},
{
"name": "description",
"required": true,
"description": "description of what the product or solution of the service does"
}
]
}
},
"typeVersion": 1
},
{
"id": "aa7041e9-4ac8-47f9-b98e-cf57873922bb",
"name": "Extract API Templates",
"type": "n8n-nodes-base.set",
"position": [
4180,
4200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e2a02550-8f53-4f8d-bb83-68ee3606736e",
"name": "query",
"type": "string",
"value": "=I'm interested in {{ $json.output.product_or_solution }} apis which {{ $json.output.description }} What are the GET, POST, PATCH and/or DELETE endpoints of the {{ $json.output.product_or_solution }} api?"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "e2b371c1-52af-4e57-877c-6933ba84e2d5",
"name": "Embeddings Google Gemini2",
"type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
"position": [
4600,
4520
],
"parameters": {
"modelName": "models/text-embedding-004"
},
"typeVersion": 1
},
{
"id": "d808c591-34e2-455f-96b1-3689d950608d",
"name": "Search in Relevant Docs1",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
4600,
4380
],
"parameters": {
"mode": "load",
"topK": 20,
"prompt": "={{ $json.query }}",
"options": {
"searchFilterJson": "={{\n{\n \"must\": [\n {\n \"key\": \"metadata.service\",\n \"match\": {\n \"value\": $('EventRouter').first().json.data.service\n }\n }\n ]\n}\n}}"
},
"qdrantCollection": {
"__rl": true,
"mode": "id",
"value": "={{ $('EventRouter').first().json.data.collection }}"
}
},
"typeVersion": 1
},
{
"id": "222bde31-57fa-46c4-a23b-ec2d1b3c7e2d",
"name": "Combine Docs1",
"type": "n8n-nodes-base.aggregate",
"position": [
4920,
4380
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "57677d83-a79a-4b71-9977-ee2324f5d593",
"name": "Query & Docs1",
"type": "n8n-nodes-base.set",
"position": [
5080,
4380
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "fdaea3de-3c9a-4f26-b7dc-769e534006a9",
"name": "query",
"type": "string",
"value": "={{ $('For Each Template...1').item.json.query }}"
},
{
"id": "88198374-d2f9-4ae7-b262-d3b2e630e0ac",
"name": "documents",
"type": "string",
"value": "={{\n$json.data\n .map(item =>\n`url: ${item.document.metadata.url}\ncontent: ${item.document.pageContent}`\n )\n .join('\\n---\\n')\n .replaceAll('\\n\\n', '\\n')\n}}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "124c3b07-3210-4190-8865-e18017fc9e6c",
"name": "For Each Template...1",
"type": "n8n-nodes-base.splitInBatches",
"position": [
4380,
4200
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "8ea4a5da-c471-4201-a08b-9c18ed08ddc7",
"name": "Merge Lists",
"type": "n8n-nodes-base.code",
"position": [
4920,
4200
],
"parameters": {
"jsCode": "return $input.all().flatMap(input => input.json.output) || [];"
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "0e38cd3c-c843-4f6d-bdb6-901a8c12acbf",
"name": "Remove Duplicates",
"type": "n8n-nodes-base.removeDuplicates",
"position": [
5280,
4200
],
"parameters": {
"compare": "selectedFields",
"options": {},
"fieldsToCompare": "method, url"
},
"typeVersion": 2
},
{
"id": "8f127f7a-e351-4b30-82dd-1f785be4a765",
"name": "Append Row",
"type": "n8n-nodes-base.googleSheets",
"position": [
5440,
4200
],
"parameters": {
"columns": {
"value": {
"url": "={{ $json.url }}",
"method": "={{ $json.method }}",
"service": "={{ $('EventRouter').first().json.data.service }}",
"resource": "={{ $json.resource }}",
"operation": "={{ $json.operation }}",
"description": "={{ $json.description }}",
"documentation_url": "={{ $json.documentation_url }}"
},
"schema": [
{
"id": "service",
"type": "string",
"display": true,
"required": false,
"displayName": "service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "resource",
"type": "string",
"display": true,
"required": false,
"displayName": "resource",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "operation",
"type": "string",
"display": true,
"required": false,
"displayName": "operation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "description",
"type": "string",
"display": true,
"required": false,
"displayName": "description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "url",
"type": "string",
"display": true,
"required": false,
"displayName": "url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "method",
"type": "string",
"display": true,
"required": false,
"displayName": "method",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "documentation_url",
"type": "string",
"display": true,
"required": false,
"displayName": "documentation_url",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": []
},
"options": {
"useAppend": true
},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1042334767,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=1042334767",
"cachedResultName": "Extracted API Operations"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk",
"cachedResultName": "API Schema Crawler & Extractor"
}
},
"typeVersion": 4.5
},
{
"id": "d9f490e2-320e-4dc1-af8f-ac7f6a61568d",
"name": "Response OK1",
"type": "n8n-nodes-base.set",
"position": [
5600,
4200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "79598789-4468-4565-828f-fedc48be15c3",
"name": "response",
"type": "string",
"value": "ok"
}
]
}
},
"executeOnce": true,
"typeVersion": 3.4
},
{
"id": "7780b6ee-0fde-40bb-aef6-e67b883645e1",
"name": "Has Operations?",
"type": "n8n-nodes-base.if",
"position": [
5080,
4200
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a95420a7-6265-4ea3-9c01-82c2d7aeb4f8",
"operator": {
"type": "object",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $input.first().json }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "6589673d-984d-4a1e-a655-1bc19d2b154e",
"name": "Response Empty1",
"type": "n8n-nodes-base.set",
"position": [
5280,
4380
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5bb23ce9-eb72-4868-9344-9e5d3952cc52",
"name": "response",
"type": "string",
"value": "no api operations found"
}
]
}
},
"executeOnce": true,
"typeVersion": 3.4
},
{
"id": "c5dc3eac-a3a5-481d-a8bc-8b653d88143d",
"name": "Research Pending",
"type": "n8n-nodes-base.googleSheets",
"position": [
3180,
2980
],
"parameters": {
"columns": {
"value": {
"row_number": "={{ $('For Each Research...').item.json.row_number }}",
"Stage 1 - Research": "=pending"
},
"schema": [
{
"id": "Service",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 1 - Research",
"type": "string",
"display": true,
"required": false,
"displayName": "Stage 1 - Research",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 2 - Extraction",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 2 - Extraction",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 3 - Output File",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 3 - Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
]
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk",
"cachedResultName": "API Schema Crawler & Extractor"
}
},
"typeVersion": 4.5
},
{
"id": "39bceadb-6c3b-4b52-82b9-bdcecd9a164a",
"name": "Research Result",
"type": "n8n-nodes-base.googleSheets",
"position": [
3620,
2980
],
"parameters": {
"columns": {
"value": {
"row_number": "={{ $('For Each Research...').item.json.row_number }}",
"Stage 1 - Research": "={{ $json.response }}"
},
"schema": [
{
"id": "Service",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 1 - Research",
"type": "string",
"display": true,
"required": false,
"displayName": "Stage 1 - Research",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 2 - Extraction",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 2 - Extraction",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 3 - Output File",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 3 - Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
]
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk",
"cachedResultName": "API Schema Crawler & Extractor"
}
},
"typeVersion": 4.5
},
{
"id": "0bd07f31-1c51-45aa-8316-b658aa214293",
"name": "Research Error",
"type": "n8n-nodes-base.googleSheets",
"position": [
3620,
3160
],
"parameters": {
"columns": {
"value": {
"row_number": "={{ $('For Each Research...').item.json.row_number }}",
"Stage 1 - Research": "=error"
},
"schema": [
{
"id": "Service",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 1 - Research",
"type": "string",
"display": true,
"required": false,
"displayName": "Stage 1 - Research",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 2 - Extraction",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 2 - Extraction",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 3 - Output File",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 3 - Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
]
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk",
"cachedResultName": "API Schema Crawler & Extractor"
}
},
"typeVersion": 4.5
},
{
"id": "0385784f-95ef-46c3-82c4-50fcf7146736",
"name": "Extract Pending",
"type": "n8n-nodes-base.googleSheets",
"position": [
4160,
2980
],
"parameters": {
"columns": {
"value": {
"row_number": "={{ $('For Each Extract...').item.json.row_number }}",
"Stage 2 - Extraction": "pending"
},
"schema": [
{
"id": "Service",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 1 - Research",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 1 - Research",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 2 - Extraction",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Stage 2 - Extraction",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 3 - Output File",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 3 - Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
]
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk",
"cachedResultName": "API Schema Crawler & Extractor"
}
},
"executeOnce": false,
"typeVersion": 4.5
},
{
"id": "21c1e982-25a6-4a00-b8d3-6c299c452106",
"name": "Research Event",
"type": "n8n-nodes-base.set",
"position": [
3320,
2980
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={{\n{\n \"eventType\": \"research\",\n \"createdAt\": $now.toISO(),\n \"executedById\": $execution.id,\n \"data\": {\n \"row_number\": $('For Each Research...').item.json.row_number,\n \"service\": $('For Each Research...').item.json.Service,\n \"url\": $('For Each Research...').item.json.Website,\n \"collection\": \"api_schema_crawler_and_extractor\"\n }\n}\n}}"
},
"typeVersion": 3.4
},
{
"id": "c83f99f1-e28f-4c15-aff8-da25bb5dfe3b",
"name": "Extract Event",
"type": "n8n-nodes-base.set",
"position": [
4300,
2980
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={{\n{\n \"eventType\": \"extract\",\n \"createdAt\": $now.toISO(),\n \"executedById\": $execution.id,\n \"data\": {\n \"row_number\": $('For Each Extract...').item.json.row_number,\n \"service\": $('For Each Extract...').item.json.Service,\n \"url\": $('For Each Extract...').item.json.Website,\n \"collection\": \"api_schema_crawler_and_extractor\"\n }\n}\n}}"
},
"typeVersion": 3.4
},
{
"id": "88c3caec-75f7-47a1-9b50-1246c457c2b4",
"name": "Extract",
"type": "n8n-nodes-base.executeWorkflow",
"onError": "continueErrorOutput",
"position": [
4440,
2980
],
"parameters": {
"mode": "each",
"options": {
"waitForSubWorkflow": true
},
"workflowId": {
"__rl": true,
"mode": "id",
"value": "={{ $workflow.id }}"
}
},
"typeVersion": 1.1
},
{
"id": "2342b7ff-b00d-439a-a859-63fd0a6bac3a",
"name": "Extract Result",
"type": "n8n-nodes-base.googleSheets",
"position": [
4600,
2980
],
"parameters": {
"columns": {
"value": {
"row_number": "={{ $('For Each Extract...').item.json.row_number }}",
"Stage 2 - Extraction": "={{ $json.response }}"
},
"schema": [
{
"id": "Service",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 1 - Research",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 1 - Research",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 2 - Extraction",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Stage 2 - Extraction",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 3 - Output File",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 3 - Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
]
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk",
"cachedResultName": "API Schema Crawler & Extractor"
}
},
"typeVersion": 4.5
},
{
"id": "d4c423c9-1d6a-4a69-9302-92ec79734d61",
"name": "Extract Error",
"type": "n8n-nodes-base.googleSheets",
"position": [
4600,
3160
],
"parameters": {
"columns": {
"value": {
"row_number": "={{ $('For Each Extract...').item.json.row_number }}",
"Stage 2 - Extraction": "error"
},
"schema": [
{
"id": "Service",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 1 - Research",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 1 - Research",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 2 - Extraction",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Stage 2 - Extraction",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stage 3 - Output File",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Stage 3 - Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
]
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk",
"cachedResultName": "API Schema Crawler & Extractor"
}
},
"typeVersion": 4.5
},
{
"id": "f64254d6-4493-4aaf-8160-35e8ff4fdc34",
"name": "Get API Operations",
"type": "n8n-nodes-base.googleSheets",
"position": [
3100,
4740
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.data.service }}",
"lookupColumn": "service"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1042334767,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=1042334767",
"cachedResultName": "Extracted API Operations"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk",
"cachedResultName": "API Schema Crawler & Extractor"
}
},
"typeVersion": 4.5
},
{
"id": "fa748b63-3d2b-4cf3-b1fb-1bd953e5054b",
"name": "Contruct JSON Schema",
"type": "n8n-nodes-base.code",
"position": [
3280,
4740
],
"parameters": {
"jsCode": "const service = {\n documentation_url: $('EventRouter').first().json.data.url,\n endpoints: [],\n};\n\nconst resources = Array.from(new Set($input.all().map(item => item.json.resource.toLowerCase().trim())));\n\nfor (const resource of resources) {\n const resourceLabel = resource.replace('api', '').trim();\n if (!resourceLabel) continue;\n const endpoint = {\n resource: resourceLabel[0].toUpperCase() + resourceLabel.substring(1, resourceLabel.length)\n };\n const operations = $input.all()\n .filter(item => item.json.resource.toLowerCase().trim() === resource)\n .map(item => item.json);\n endpoint.operations = operations.map(op => ({\n \"operation\": op.operation[0].toUpperCase() + op.operation.substring(1, op.operation.length),\n \"description\": op.description.match(/(^[^\\.]+.)/)[0],\n \"ApiUrl\": op.url,\n \"method\": op.method.toUpperCase(),\n \"method_documentation_url\": op.documentation_url || ''\n }));\n service.endpoints.push(endpoint);\n}\n\nreturn service;"
},
"typeVersion": 2
},
{
"id": "e60b7ccb-baa2-4095-8425-0e20bcdbfdd2",
"name": "Upload to Drive",
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.
googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow streamlines the extraction and processing of information from web sources, delivering structured text chunks ready for analysis or AI integration. It suits content creators, researchers, or developers handling large datasets, such as scraping API documentation or webpage details to feed into tools like Google Gemini for summarisation. The key step involves using the recursive character text splitter to divide lengthy content into manageable 50,000-character segments, ensuring efficient handling without data loss.
Use this workflow when you need to automate the breakdown of verbose web-scraped data for AI processing, like preparing documents for chat models, particularly in event-driven scenarios requiring quick iterations. Avoid it for simple, small-scale fetches where basic HTTP requests suffice, or if your sources are already chunked. Common variations include adjusting chunk sizes for different AI providers or adding filters to the initial HTTP requests for targeted scraping.
About this workflow
Wait Splitout. Uses manualTrigger, httpRequest, splitOut, textSplitterRecursiveCharacterTextSplitter. Event-driven trigger; 88 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Api Schema Extractor. Uses manualTrigger, httpRequest, splitOut, textSplitterRecursiveCharacterTextSplitter. Event-driven trigger; 88 nodes.
This workflow automates the process of discovering and extracting APIs from various services, followed by generating custom schemas. It works in three distinct stages: research, extraction, and schema
Agent IA Projet Client. Uses executeWorkflowTrigger, lmChatOpenAi, toolWorkflow, vectorStoreQdrant. Event-driven trigger; 79 nodes.
This n8n template automatically classifies incoming emails (Sales, Support, Internal, Finance, Promotions) and routes them to a dedicated OpenAI LLM Agent for processing. Depending on the category, th
This simple philosophy changes the way we think about automated sales agents. Context changes everything. In this 4-part workflow, we start by creating a knowledge base that will act as context across