This workflow corresponds to n8n.io template #13436 — we link there as the canonical source.
This workflow follows the Agent → Google Docs 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 →
{
"id": "4ooy6K06SygsEmPW9vVAe",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Documentation Crawler",
"tags": [
{
"id": "xRJNyiRIpAsEzL8y",
"name": "Olostep",
"createdAt": "2026-01-31T11:17:46.807Z",
"updatedAt": "2026-01-31T11:17:46.807Z"
}
],
"nodes": [
{
"id": "93d0600b-1761-428f-8b67-e917a15da853",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-256,
224
],
"parameters": {},
"typeVersion": 1
},
{
"id": "9b6038ad-662b-448a-85c8-7b132a0406c6",
"name": "Split Out1",
"type": "n8n-nodes-base.splitOut",
"position": [
160,
224
],
"parameters": {
"options": {},
"fieldToSplitOut": "urls"
},
"typeVersion": 1
},
{
"id": "eb0a1432-1ab5-48fa-b498-757217974c55",
"name": "Service Name",
"type": "n8n-nodes-base.set",
"position": [
-256,
464
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "33676969-d132-4694-b415-73f096903e45",
"name": "Service",
"type": "string",
"value": "={{ $json.url.split('.')[1] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "7401b2b1-a43d-4a29-a8fe-40e9abc3e8bc",
"name": "Create Parent Folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
-48,
464
],
"parameters": {
"name": "={{ $json.Service }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1ogVqaOeuMSGOs_jUclfs8Mj6oKX71EhZ",
"cachedResultUrl": "https://drive.google.com/drive/folders/1ogVqaOeuMSGOs_jUclfs8Mj6oKX71EhZ",
"cachedResultName": "api workflow"
},
"resource": "folder"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "8af70f1f-c2fb-442f-b7b9-1be3305ff8dd",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
400,
448
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3.2
},
{
"id": "243f7547-455c-49d8-8160-dc6989a8bfe5",
"name": "Create a map",
"type": "n8n-nodes-olostep.olostepScrape",
"position": [
-48,
224
],
"parameters": {
"url": "https://docs.tavily.com",
"top_n": {},
"resource": "map"
},
"credentials": {
"olostepScrapeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "16cc6f72-7685-454a-a827-1133995198fa",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
160,
464
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8f7262f0-45ed-4026-8d48-6f7fa151918a",
"name": "parent_id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "ae51e430-afb2-4ce1-82e7-983c465e5f21",
"name": "counter",
"type": "number",
"value": 3
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5e6e7cc3-ab78-4a90-b053-ba4aac5049ce",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
608,
352
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "aa4f21b0-caad-48f5-9c4a-d63b264fd957",
"name": "Search files and folders",
"type": "n8n-nodes-base.googleDrive",
"maxTries": 2,
"position": [
1296,
608
],
"parameters": {
"limit": 1,
"filter": {
"folderId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.parent_id }}"
}
},
"options": {},
"resource": "fileFolder",
"queryString": "={{ $json.url.split('/') [$json.counter] }}"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 3,
"alwaysOutputData": true
},
{
"id": "7e0811ed-48fb-4ff3-ab73-88e52d6bd4ac",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
1488,
608
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ab76138d-20b8-4628-ae2b-0056d263c9bb",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "f3722176-6062-4b55-b9da-cc8960d8f650",
"name": "Create folder",
"type": "n8n-nodes-base.googleDrive",
"maxTries": 2,
"position": [
1696,
688
],
"parameters": {
"name": "={{ $('counter').item.json.url.split('/') [$('counter').item.json.counter] }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "id",
"value": "={{ $('counter').item.json.parent_id }}"
},
"resource": "folder"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 3
},
{
"id": "6f884d85-dddd-4d8d-8773-4068be63072f",
"name": "counter",
"type": "n8n-nodes-base.set",
"position": [
880,
544
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "188107ae-8644-4884-bbdd-50fec46da9b4",
"name": "counter",
"type": "number",
"value": "={{ $json.counter }}"
},
{
"id": "8926402d-dd93-4c01-9bea-12948012a58c",
"name": "url",
"type": "string",
"value": "={{ $('Loop Over Items').item.json.urls }}"
},
{
"id": "957104a3-48d8-4222-ab08-8102f26cfed7",
"name": "parent_id",
"type": "string",
"value": "={{ $json.parent_id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "8df4e323-a936-4c58-9390-8114b8aa5c41",
"name": "counter++",
"type": "n8n-nodes-base.set",
"position": [
1904,
688
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e84010b9-6e1f-4fb5-9b8a-7726e62cf629",
"name": "counter",
"type": "string",
"value": "={{ $('counter').item.json.counter + 1 }}"
},
{
"id": "ca7ee778-c0fb-4646-adc1-c5bb49011cf7",
"name": "parent_id",
"type": "string",
"value": "={{ $json.id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "60809abf-4c76-4d60-8e6c-e2261a3f28b5",
"name": "If1",
"type": "n8n-nodes-base.if",
"position": [
1088,
544
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d4b6d38f-ba2a-446d-80d9-a04570c81844",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.url.split('/') [$json.counter] }}",
"rightValue": 4
},
{
"id": "04f5e03f-00e1-4d25-bee7-52035b7b9b06",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.url.split('/') [$json.counter + 1] }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "acf1e25e-836e-4810-8acb-1cfe8380c0ff",
"name": "counter++1",
"type": "n8n-nodes-base.set",
"position": [
1696,
544
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e84010b9-6e1f-4fb5-9b8a-7726e62cf629",
"name": "counter",
"type": "string",
"value": "={{ $('counter').item.json.counter + 1 }}"
},
{
"id": "ca7ee778-c0fb-4646-adc1-c5bb49011cf7",
"name": "parent_id",
"type": "string",
"value": "={{ $json.id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5887437c-f134-4f21-b7ac-c0a168a201f5",
"name": "Scrape a URL",
"type": "n8n-nodes-olostep.olostepScrape",
"maxTries": 2,
"position": [
1584,
336
],
"parameters": {
"url_to_scrape": "={{ $json.url }}"
},
"credentials": {
"olostepScrapeApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 1
},
{
"id": "3dd3970c-7251-4afd-9053-1c38f471f824",
"name": "set data",
"type": "n8n-nodes-base.set",
"position": [
1376,
336
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b06502a3-ca99-4707-85ae-0d7dee158c3a",
"name": "counter",
"type": "number",
"value": "={{ $json.counter }}"
},
{
"id": "7e8ca9e4-a61a-4f7e-829d-7dd08de7edf1",
"name": "url",
"type": "string",
"value": "={{ $json.url }}"
},
{
"id": "1ded19f1-a837-47e6-b17f-723df31148d0",
"name": "parent_id",
"type": "string",
"value": "={{ $json.parent_id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b5176eb3-3a48-4e06-bc8d-63b4fee01651",
"name": "No Operation, do nothing",
"type": "n8n-nodes-base.noOp",
"position": [
816,
256
],
"parameters": {},
"typeVersion": 1
},
{
"id": "66ae48a6-7705-4d45-9aa3-a3621686c72a",
"name": "Information Extractor",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"maxTries": 2,
"position": [
1904,
96
],
"parameters": {
"text": "={{ $json.markdown_content }}",
"options": {},
"attributes": {
"attributes": [
{
"name": "Curl",
"required": true,
"description": "A ready-to-use curl command or a JavaScript/Python code snippet for that specific endpoint."
},
{
"name": "Quick Summary",
"required": true,
"description": "One sentence on what the endpoint does."
},
{
"name": "Authentication",
"required": true,
"description": "Does this specifically need a Bearer YOUR_TOKEN_HERE or API key?"
},
{
"name": "Common Gotchas",
"required": true,
"description": "identify potential errors (e.g., \"This endpoint is rate-limited to 5 requests per second\")."
}
]
}
},
"retryOnFail": true,
"typeVersion": 1.2
},
{
"id": "a220f30c-6118-4f22-a1d3-3a9f88c5f32f",
"name": "Google Gemini Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1856,
320
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7f256970-9fb3-4de9-a097-0c9a6f0e71dd",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"maxTries": 2,
"position": [
2464,
320
],
"parameters": {
"text": "=## Extracted Metadata\n- Curl: {{ $json.output.Curl }}\n- Quick Summary: {{ $json.output['Quick Summary'] }}\n- Authentication: {{ $json.output.Authentication }}\n- Common Gotchas: {{ $json.output['Common Gotchas'] }}\n- URL: {{ $json.url }}\n\n## Raw documentation\n{{ $json.markdown_content }}",
"options": {
"systemMessage": "=# Role\nYou are an Expert Technical Writer specialized in creating developer-focused API guides. Objective: Transform raw API documentation and its extracted metadata into a comprehensive, highly readable \"Developer Reference Article.\"\n\n## Task\nCreate a well-structured technical article. The goal is to provide a \"single source of truth\" that combines high-level understanding with deep-dive technical details.\n\n## Article Structure & Requirements\n\n H1 Title: Create a clear title (e.g., \"The Complete Developer Guide to [Endpoint Name]\").\n\n The TL;DR Section: Start with a \"Quick Start\" callout box containing the Quick Summary and the Authentication requirements.\n\n Implementation Guide: * Explain the request flow.\n\n Embed the Copy-Paste Snippet here.\n\n Provide a table of parameters (extracted from the full page content).\n\n Deep Dive: Include the Full Page Content here, but reformat it for better readability (use bolding for key terms, clean up tables, and ensure hierarchy with H2/H3 headers).\n\n Developer Tips & Gotchas: Create a dedicated section for the Common Gotchas. Present these as \"Pro-Tips\" or \"Warnings\" to help the developer avoid bugs.\n\n Response Examples: Include a section showing what a successful response looks like (JSON/XML).\n\n## Writing Style\n\n Action-Oriented: Use verbs like \"Send,\" \"Configure,\" and \"Retrieve.\"\n\n Scannable: Use bullet points, tables, and code blocks. No long, dense paragraphs.\n\n Clarity: Ensure that if the full documentation is messy, this article cleans up the hierarchy."
},
"promptType": "define"
},
"retryOnFail": true,
"typeVersion": 3.1
},
{
"id": "be5789db-1cf4-4a6a-b266-307276711872",
"name": "Merge1",
"type": "n8n-nodes-base.merge",
"position": [
2080,
320
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "07cd6030-a934-422a-ab5d-5cbbae7b9644",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
2384,
544
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b0d3c996-1c83-4ba6-a16c-e78a17d0c4f6",
"name": "Create a document",
"type": "n8n-nodes-base.googleDocs",
"maxTries": 2,
"position": [
2784,
320
],
"parameters": {
"title": "={{ $('set data').item.json.url.split('/') [$('set data').item.json.counter] }}",
"folderId": "={{ $('set data').item.json.parent_id }}"
},
"credentials": {
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 2
},
{
"id": "3c2d656e-0881-4220-9f62-0c750bb92856",
"name": "Update a document",
"type": "n8n-nodes-base.googleDocs",
"maxTries": 2,
"position": [
2976,
320
],
"parameters": {
"simple": false,
"actionsUi": {
"actionFields": [
{
"text": "={{ $('AI Agent').item.json.output }}",
"action": "insert"
}
]
},
"operation": "update",
"documentURL": "={{ $json.id }}"
},
"credentials": {
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 2
},
{
"id": "2ecabcd6-c060-4c7d-8516-ad42fcaac332",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
2272,
320
],
"parameters": {
"unit": "minutes",
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "26d42d74-1df5-41e8-8ec2-2e98d515fb81",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1216,
-384
],
"parameters": {
"width": 832,
"height": 1792,
"content": "# AI Documentation Crawler & Knowledge Base Builder \n\nThis n8n template automatically crawls technical documentation websites, scrapes their content, and converts it into **clean, structured, developer-friendly documentation**. \nEach page is organized into folders and saved as Google Docs, making it easy to build or maintain an internal knowledge base.\n\n## Who\u2019s it for \n- Developer teams maintaining internal or external documentation \n- SaaS companies onboarding users or support teams \n- AI builders creating documentation-based knowledge bases \n- Anyone who wants to turn raw docs into structured, readable references \n\n## How it works / What it does \n1. **Manual Trigger** \n - The workflow starts manually whenever you want to crawl or refresh documentation.\n\n2. **Documentation Discovery (Crawler)** \n - The workflow crawls a root documentation URL and generates a sitemap of all discoverable documentation pages.\n\n3. **URL Processing** \n - The sitemap is split into individual URLs. \n - The workflow dynamically analyzes URL depth to recreate the documentation hierarchy.\n\n4. **Folder Structure Creation** \n - A parent folder is created in Google Drive for the service. \n - Subfolders are automatically generated to mirror the documentation structure (based on URL paths).\n\n5. **Content Scraping** \n - Each documentation page is scraped using the Olostep API. \n - Clean markdown content is extracted from the page.\n\n6. **Information Extraction** \n - AI extracts structured technical details such as: \n - API summaries \n - cURL examples \n - Authentication methods \n - Key notes and pitfalls \n\n7. **AI Documentation Generation** \n - An AI agent transforms the scraped content into a polished, human-readable API reference or guide.\n\n8. **Document Creation** \n - A Google Doc is created for each documentation page. \n - The generated content is inserted into the document and saved in the correct folder.\n\n9. **Rate Control** \n - A wait step prevents API throttling during large documentation crawls.\n\nThe result is a fully structured documentation library generated automatically from live documentation websites.\n\n## How to set up \n1. Import the template into your n8n workspace. \n2. Set the root documentation URL you want to crawl. \n3. Connect your **Google Drive** and **Google Docs** accounts. \n4. Add your **Olostep API key** and AI model credentials. \n5. Execute the workflow to generate your documentation library.\n\n## Requirements \n- n8n account (cloud or self-hosted) \n- Olostep API key \n- Google Drive & Google Docs access \n- AI model provider (OpenAI or Gemini)\n\n## How to customize the workflow \n- Limit the number of pages crawled per run. \n- Adjust AI prompts to match your documentation style. \n- Store results in Notion, Confluence, or Markdown files instead of Google Docs. \n- Add vector storage (Pinecone, Supabase) to turn docs into an AI knowledge base. \n- Schedule automatic re-crawls to keep documentation up to date.\n\n---\n\n\ud83d\udc49 This template turns complex technical documentation into an organized, searchable knowledge base \u2014 automatically.\n"
},
"typeVersion": 1
},
{
"id": "b59393ae-e8a8-4466-ab0c-91558d51f17f",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
128
],
"parameters": {
"color": 7,
"width": 624,
"height": 240,
"content": "## Creates a Map\nCrawls the root documentation URL and generates a full sitemap.\nReturns all discoverable documentation URLs under the given domain."
},
"typeVersion": 1
},
{
"id": "828f217c-9cb4-4e3e-b31d-c53cee0a3c16",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
368
],
"parameters": {
"color": 7,
"width": 624,
"height": 256,
"content": "## Creates Parent Folder\nCreates a parent folder for this service in Google Drive.\nAll generated API reference documents will be stored here."
},
"typeVersion": 1
},
{
"id": "fbeaefd2-55fd-4e73-918b-f32afeffde2c",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
272
],
"parameters": {
"color": 7,
"height": 352,
"content": "## Merge\nMerges service metadata with the list of documentation URLs\nso both are available during processing."
},
"typeVersion": 1
},
{
"id": "5ce248f9-41d7-47d2-89a1-fa1211ab1a8f",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
784,
384
],
"parameters": {
"color": 7,
"width": 448,
"height": 480,
"content": "## Counter\nTracks the current URL depth being processed.\nUsed to dynamically create nested folder structures that match the doc hierarchy. After that checks whether additional URL path segments exist.\nDetermines whether to create a subfolder or proceed with scraping."
},
"typeVersion": 1
},
{
"id": "1679e8af-6fea-4d89-83d2-b7a373d19b47",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1232,
496
],
"parameters": {
"color": 7,
"width": 416,
"height": 368,
"content": "## Search files/folders\nChecks if a folder for the current documentation section already exists.\nPrevents duplicate folder creation."
},
"typeVersion": 1
},
{
"id": "e32d6342-bee9-4d15-b3d9-76a139ba99d0",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1808,
496
],
"parameters": {
"color": 7,
"width": 368,
"height": 368,
"content": "## Create Folder\nCreates a subfolder that mirrors the documentation URL structure.\nKeeps generated docs neatly organized by section.\n\nIncrements the URL depth counter.\nMoves the workflow deeper into the documentation structure."
},
"typeVersion": 1
},
{
"id": "ae7b1cc9-4c9f-4cb9-b6c4-8205c8ec9e96",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1648,
496
],
"parameters": {
"color": 7,
"width": 160,
"height": 368,
"content": ""
},
"typeVersion": 1
},
{
"id": "9b11932b-6bad-4163-81cd-51fa4de5c28d",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1232,
224
],
"parameters": {
"color": 7,
"width": 512,
"height": 272,
"content": "## Scrape URL\nScrapes the full documentation page content.\nExtracts clean markdown content for AI processing."
},
"typeVersion": 1
},
{
"id": "10d153fd-c057-48df-82f2-634f510f3a6f",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
-16
],
"parameters": {
"color": 7,
"width": 464,
"height": 512,
"content": "## Information extractor\nUses AI to extract structured metadata from the documentation: Curl example, endpoint summary, authentication method, and common pitfalls."
},
"typeVersion": 1
},
{
"id": "f075928a-ed3a-4c4c-a6e6-56d1b8c94bc8",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
2208,
208
],
"parameters": {
"color": 7,
"width": 512,
"height": 288,
"content": "## Writer Agent\nConverts raw documentation + extracted metadata into a clean,\ndeveloper-friendly API reference article."
},
"typeVersion": 1
},
{
"id": "b09c514b-d0f7-47e7-900f-8bf40bbb1efe",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
2720,
208
],
"parameters": {
"color": 7,
"width": 416,
"height": 288,
"content": "## Create a Document\nCreates a new Google Doc for the current documentation page and update that document with the full context.\nThe document title matches the URL path segment."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "6ce0628b-63fa-4e84-ba38-eacff7428be0",
"connections": {
"If": {
"main": [
[
{
"node": "counter++1",
"type": "main",
"index": 0
}
],
[
{
"node": "Create folder",
"type": "main",
"index": 0
}
]
]
},
"If1": {
"main": [
[
{
"node": "Search files and folders",
"type": "main",
"index": 0
}
],
[
{
"node": "set data",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"counter": {
"main": [
[
{
"node": "If1",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Create a document",
"type": "main",
"index": 0
}
]
]
},
"set data": {
"main": [
[
{
"node": "Scrape a URL",
"type": "main",
"index": 0
}
]
]
},
"counter++": {
"main": [
[
{
"node": "counter",
"type": "main",
"index": 0
}
]
]
},
"Split Out1": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"counter++1": {
"main": [
[
{
"node": "counter",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Create a map": {
"main": [
[
{
"node": "Service Name",
"type": "main",
"index": 0
},
{
"node": "Split Out1",
"type": "main",
"index": 0
}
]
]
},
"Scrape a URL": {
"main": [
[
{
"node": "Information Extractor",
"type": "main",
"index": 0
},
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Service Name": {
"main": [
[
{
"node": "Create Parent Folder",
"type": "main",
"index": 0
}
]
]
},
"Create folder": {
"main": [
[
{
"node": "counter++",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "No Operation, do nothing",
"type": "main",
"index": 0
}
],
[
{
"node": "counter",
"type": "main",
"index": 0
}
]
]
},
"Create a document": {
"main": [
[
{
"node": "Update a document",
"type": "main",
"index": 0
}
]
]
},
"Update a document": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Create Parent Folder": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Information Extractor": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Search files and folders": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model2": {
"ai_languageModel": [
[
{
"node": "Information Extractor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Create a map",
"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.
googleDocsOAuth2ApigoogleDriveOAuth2ApigooglePalmApiolostepScrapeApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This n8n template automatically crawls technical documentation websites, scrapes their content, and converts it into clean, structured, developer-friendly documentation. Each page is organized into folders and saved as Google Docs, making it easy to build or maintain an internal…
Source: https://n8n.io/workflows/13436/ — 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.
CV → Match → Screen → Decide, all automated
This n8n template automates complaint mining from unstructured text sources and turns raw user feedback into clear, actionable insights. It uses AI to identify recurring complaints, pain points, and t
This template is designed for healthcare providers, sales reps, and medical tourism companies who need to process diagnosis emails efficiently. It automates the full flow from email to report delivery
Overview The Automated Invoice-Processing AI Agent in n8n is designed to streamline and optimize invoice management for finance teams and accounts payable (AP) professionals. This solution addresses t
Generate professional sales proposals from a simple form—AI writes the content, you deliver the document.