{
  "id": "77rHmiPUDfM2b5GU",
  "name": "GitHub Node Tracker",
  "tags": [],
  "nodes": [
    {
      "id": "b5976683-f376-46b0-a645-8d2fdc228fef",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1100,
        75
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d2c2ba08-2201-4885-bd09-413988e06488",
      "name": "Get Repository Contents",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -660,
        75
      ],
      "parameters": {
        "url": "https://api.github.com/repos/n8n-io/n8n/contents/packages/nodes-base/nodes",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "githubApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "b3a765a0-6f9d-465b-8a10-f00d86cfa75e",
      "name": "Get Directory Contents",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -220,
        0
      ],
      "parameters": {
        "url": "={{$json[\"url\"]}}",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "githubApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "81b77950-986e-49f5-a2b4-4d4821759a18",
      "name": "Filter Node Files",
      "type": "n8n-nodes-base.code",
      "position": [
        0,
        0
      ],
      "parameters": {
        "jsCode": "return items\n  .filter(item => item.json.name.endsWith('.node.json'))\n  .map(item => ({ json: { download_url: item.json.download_url } }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "8317f7ce-5204-48e3-9fb9-787fe6f7a615",
      "name": "Download Node File",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        220,
        0
      ],
      "parameters": {
        "url": "={{$json[\"download_url\"]}}",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "githubApi"
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "4824efd4-72b7-4cdf-ac57-1adf047fe0f4",
      "name": "Append to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        880,
        0
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "node",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "node",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "nodeVersion",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "nodeVersion",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "codexVersion",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "codexVersion",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "categories",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "categories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "resources",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "resources",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "details",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "details",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "alias",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "alias",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "subcategories",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "subcategories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "node"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_DOCUMENT_ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_DOCUMENT_ID/edit",
          "cachedResultName": "Node Tracker"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "5798af97-3f0a-4646-9f41-21bb8492d8ea",
      "name": "Parse JSON Data",
      "type": "n8n-nodes-base.code",
      "position": [
        440,
        0
      ],
      "parameters": {
        "jsCode": "let obj;\ntry {\n  obj = typeof $json.data === 'string' ? JSON.parse($json.data) : $json.data;\n} catch (e) {\n  obj = {};\n}\nreturn [{ json: obj }];\n"
      },
      "executeOnce": false,
      "typeVersion": 2
    },
    {
      "id": "8b219e76-f904-4371-8b05-4d5d1721130e",
      "name": "Process in Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -440,
        75
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "6711691f-d06a-4d09-aeb1-a454ee60712d",
      "name": "Clear Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -880,
        75
      ],
      "parameters": {
        "operation": "clear",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_DOCUMENT_ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_DOCUMENT_ID/edit",
          "cachedResultName": "Node Tracker"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "fd3c5069-03ff-4c6b-b220-329f25462eb4",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1100,
        75
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "ce99d911-3bac-468d-8fba-d04a7b28ad09",
      "name": "Format Data",
      "type": "n8n-nodes-base.set",
      "position": [
        660,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7b2d5bbd-7e05-467d-91a0-265068725b85",
              "name": "node",
              "type": "string",
              "value": "={{ $json.node }}"
            },
            {
              "id": "c3e8a928-57b9-4087-b3fc-3ed8aeb8ff17",
              "name": "nodeVersion",
              "type": "string",
              "value": "={{ $json.nodeVersion }}"
            },
            {
              "id": "ba800404-034c-48ba-9324-7bf6bef79b65",
              "name": "codexVersion",
              "type": "string",
              "value": "={{ $json.codexVersion }}"
            },
            {
              "id": "488b89ec-80f3-47d2-ac9d-eae7bb298e3f",
              "name": "categories",
              "type": "string",
              "value": "={{ $json.categories[0] }}, {{ $json.categories[1] }}"
            },
            {
              "id": "34d98f83-ba03-421e-aa85-6831291344df",
              "name": "credentialDocumentation",
              "type": "string",
              "value": "={{ $json.resources.credentialDocumentation[0].url }}"
            },
            {
              "id": "b148a39c-cddf-480a-af78-ca564f143ec8",
              "name": "primaryDocumentation",
              "type": "string",
              "value": "={{ $json.resources.primaryDocumentation[0].url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "sticky-start",
      "name": "\ud83d\ude80 WORKFLOW START",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1300,
        -180
      ],
      "parameters": {
        "color": 1,
        "width": 360,
        "height": 200,
        "content": "## GitHub Node Tracker\n\n**Purpose:** Automatically scan n8n's GitHub repository for node definitions and export them to Google Sheets for tracking and analysis.\n\n**Trigger:** Manual execution\n**Output:** Structured data in Google Sheets"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-preparation",
      "name": "\ud83d\udccb DATA PREPARATION",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1020,
        -180
      ],
      "parameters": {
        "color": 2,
        "width": 340,
        "height": 200,
        "content": "## Step 1: Setup\n\n1. **Clear existing data** from Google Sheets to ensure fresh start\n2. **Fetch repository structure** from GitHub API\n3. **Process in batches** to handle large number of directories efficiently"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-extraction",
      "name": "\ud83d\udd0d DATA EXTRACTION",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -380,
        -200
      ],
      "parameters": {
        "color": 3,
        "width": 340,
        "height": 220,
        "content": "## Step 2: Extract Node Data\n\n1. **Browse each directory** to find node files\n2. **Filter for .node.json files** only\n3. **Download individual files** containing node metadata\n4. **Parse JSON** to extract structured data"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-processing",
      "name": "\u2699\ufe0f DATA PROCESSING",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        520,
        -180
      ],
      "parameters": {
        "color": 4,
        "width": 340,
        "height": 200,
        "content": "## Step 3: Format & Export\n\n1. **Format data** for Google Sheets compatibility\n2. **Map fields** to spreadsheet columns\n3. **Append to Google Sheets** with structured data\n4. **Rate limiting** with wait nodes to respect API limits"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-loop",
      "name": "\ud83d\udd04 BATCH PROCESSING",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -600,
        250
      ],
      "parameters": {
        "color": 5,
        "width": 320,
        "height": 180,
        "content": "## Batch Loop Logic\n\nThis workflow processes directories in batches to:\n- **Avoid API rate limits**\n- **Handle large repositories**\n- **Ensure reliable execution**\n\nThe loop continues until all directories are processed."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-output",
      "name": "\ud83d\udcca OUTPUT FORMAT",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        -180
      ],
      "parameters": {
        "color": 6,
        "width": 320,
        "height": 220,
        "content": "## Google Sheets Columns\n\n- **node**: Node name\n- **nodeVersion**: Version number\n- **codexVersion**: Codex version\n- **categories**: Node categories\n- **resources**: Documentation URLs\n- **details**: Additional metadata\n- **alias**: Alternative names\n- **subcategories**: Sub-classification"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-requirements",
      "name": "\u26a0\ufe0f REQUIREMENTS",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1300,
        250
      ],
      "parameters": {
        "color": 7,
        "width": 360,
        "height": 220,
        "content": "## Setup Requirements\n\n**Before running:**\n1. Configure GitHub API credentials\n2. Set up Google Sheets credentials\n3. Replace YOUR_GOOGLE_SHEETS_DOCUMENT_ID with actual document ID\n4. Replace YOUR_WEBHOOK_ID with actual webhook ID\n\n**Permissions needed:**\n- GitHub: Read repository contents\n- Google Sheets: Edit spreadsheet"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "520b4030-b5a0-4274-91e3-653968ffd046",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Process in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Data": {
      "main": [
        [
          {
            "node": "Append to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Clear Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse JSON Data": {
      "main": [
        [
          {
            "node": "Format Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Node Files": {
      "main": [
        [
          {
            "node": "Download Node File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Node File": {
      "main": [
        [
          {
            "node": "Parse JSON Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process in Batches": {
      "main": [
        [],
        [
          {
            "node": "Get Directory Contents",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clear Google Sheets": {
      "main": [
        [
          {
            "node": "Get Repository Contents",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Directory Contents": {
      "main": [
        [
          {
            "node": "Filter Node Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append to Google Sheets": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Repository Contents": {
      "main": [
        [
          {
            "node": "Process in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}