{
  "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
          }
        ]
      ]
    }
  }
}