AutomationFlowsData & Sheets › Create Workflow Inventory Dashboard with N8n API and Google Sheets

Create Workflow Inventory Dashboard with N8n API and Google Sheets

ByPollupAI @Pollup on n8n.io

This workflow provides a powerful way to automatically document and maintain an inventory of all your n8n workflows in a Google Sheet. By running on a schedule or manually, it fetches details about every workflow on your instance, processes the key information, and then…

Cron / scheduled trigger★★★★☆ complexity12 nodesn8nGoogle Sheets
Data & Sheets Trigger: Cron / scheduled Nodes: 12 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #9113 — we link there as the canonical source.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "id": "77258fdc-d5a6-436a-9f62-a27198c6f260",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -416,
        400
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4fd61bbf-3610-40f2-9382-3f7db4781d5a",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -416,
        576
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "598ff657-359e-47c3-b129-47bde05253f9",
      "name": "Get All Workflows",
      "type": "n8n-nodes-base.n8n",
      "position": [
        -128,
        400
      ],
      "parameters": {
        "filters": {},
        "requestOptions": {}
      },
      "credentials": {
        "n8nApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "46e7b134-ecbf-4700-aa78-a1df918fbd78",
      "name": "Loop Through Each Workflow",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        96,
        400
      ],
      "parameters": {
        "options": {}
      },
      "executeOnce": false,
      "typeVersion": 3
    },
    {
      "id": "d9d2e331-2711-42a4-8c01-e76a27adfdf5",
      "name": "Extract Workflow Details",
      "type": "n8n-nodes-base.code",
      "position": [
        304,
        496
      ],
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nlet info = {\n  name: $input.first().json.name,\n  id: $input.first().json.id,\n  tags: $input.first().json.tags.map(ar => ar.name).join(\"\\n\")\n}\n  \nlet nodeTypes = {}\nfor (const node of $input.first().json.nodes) {\n  nodeTypes[node.type] = 1\n}\nlet nodes = Object.keys(nodeTypes).join(\"\\n\");\nreturn {nodes, info }"
      },
      "typeVersion": 2
    },
    {
      "id": "0b00faee-6d4f-45a1-a80b-a7dfba598410",
      "name": "Add/Update Row in Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        512,
        496
      ],
      "parameters": {
        "columns": {
          "value": {
            "id": "={{ $json.info.id }}",
            "link": "=https://n8n.pollup.net/workflow/{{ $json.info.id }}",
            "tags": "={{ $json.info.tags }}",
            "nodes": "={{ $json.nodes }}",
            "title": "={{ $json.info.name }}",
            "Active": "={{ $('Loop Through Each Workflow').item.json.active }}",
            "Archived": "={{ $('Loop Through Each Workflow').item.json.isArchived }}",
            "CreatedAt": "={{ $('Loop Through Each Workflow').item.json.createdAt }}",
            "UpdatedAt": "={{ $('Loop Through Each Workflow').item.json.updatedAt }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tags",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "tags",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "nodes",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "nodes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CreatedAt",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "CreatedAt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "UpdatedAt",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "UpdatedAt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Active",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Active",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Archived",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Archived",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eDe3oYL2WVw3t20xqEc9lLx6BIfATIxtKLike5e5QzE/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1eDe3oYL2WVw3t20xqEc9lLx6BIfATIxtKLike5e5QzE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eDe3oYL2WVw3t20xqEc9lLx6BIfATIxtKLike5e5QzE/edit?usp=drivesdk",
          "cachedResultName": "Techical list of n8n workflows"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "0bbf1258-df8b-47cf-abad-b8552bceca64",
      "name": "Pause to Avoid Rate Limits",
      "type": "n8n-nodes-base.wait",
      "position": [
        720,
        496
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "16fe9a20-47d1-4d7a-a258-f5417ba094b2",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -672,
        -96
      ],
      "parameters": {
        "width": 704,
        "height": 208,
        "content": "## Workflow Inventory in Google Sheets\nThis workflow creates a centralized inventory of all your n8n workflows in a Google Sheet.\n\n**Setup Steps:**\n1. **Get All Workflows Node:** Add your n8n API credentials.\n2. **Google Sheet Node:** Add your Google Sheets credentials and enter your Spreadsheet ID and Sheet Name.\n3. **Activate:** Choose either the manual or scheduled trigger and activate the workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "c2d22c7d-87ee-4d30-90e7-c27b1546d034",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -672,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 528,
        "content": "## Trigger Choice\nUse one of these triggers to run the workflow.\n\n- **Scheduled Start:** Runs automatically at a set interval.\n- **Manual Start:** Runs only when you click 'Execute Workflow'.\n\nYou can delete the one you don't need."
      },
      "typeVersion": 1
    },
    {
      "id": "74f65a95-8664-4c54-9773-c832aa440cbb",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 352,
        "height": 192,
        "content": "## Google Sheets Configuration\n**CRITICAL:**\nIn the 'Columns' section, make sure to set `id` as the \"Matching Column\".\n\nThis allows the node to find existing rows and update them instead of creating duplicates.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2564a727-da3c-4f08-933f-0bb6d99a3f4b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        160
      ],
      "parameters": {
        "color": 7,
        "height": 480,
        "content": "## Customization Tip\nWant to track more data?\n\nYou can edit this code to extract additional details from the workflow JSON (e.g., specific node settings, email addresses from triggers, etc.). Just be sure to add a matching column in your Google Sheet!"
      },
      "typeVersion": 1
    },
    {
      "id": "a8f58c9f-88d3-466e-ad24-7a74438dcd9c",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -672,
        752
      ],
      "parameters": {
        "width": 460,
        "height": 196,
        "content": "## Contact me\n- If you need any modification to this workflow\n- if you need some help with this workflow\n- Or if you need any workflow in n8n, Make, or Langchain / Langgraph\n\nWrite to me: [thomas@pollup.net](mailto:thomas@pollup.net)\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get All Workflows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get All Workflows": {
      "main": [
        [
          {
            "node": "Loop Through Each Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Workflow Details": {
      "main": [
        [
          {
            "node": "Add/Update Row in Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Through Each Workflow": {
      "main": [
        [],
        [
          {
            "node": "Extract Workflow Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pause to Avoid Rate Limits": {
      "main": [
        [
          {
            "node": "Loop Through Each Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add/Update Row in Google Sheet": {
      "main": [
        [
          {
            "node": "Pause to Avoid Rate Limits",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Get All Workflows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow provides a powerful way to automatically document and maintain an inventory of all your n8n workflows in a Google Sheet. By running on a schedule or manually, it fetches details about every workflow on your instance, processes the key information, and then…

Source: https://n8n.io/workflows/9113/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

Useful if a team is working within a single instance and you want to be notified of what workflows have changed since you last visited them. Another use-case might be monitoring your managed instances

Google Sheets, Execute Workflow Trigger, n8n
Data & Sheets

If you're using a self-hosted n8n instance, there's no built-in version history or undo for your workflows. If a workflow is accidentally modified or deleted, there's no way to roll back. This backup

n8n, Google Sheets, Google Drive
Data & Sheets

This workflow automates video distribution to 9 social platforms simultaneously using Blotato's API. It includes both a scheduled publisher (checks Google Sheets for videos marked "Ready") and a subwo

Google Sheets, HTTP Request, Form Trigger +2
Data & Sheets

YogiAI. Uses googleSheets, googleSheetsTool, httpRequest, stopAndError. Scheduled trigger; 61 nodes.

Google Sheets, Google Sheets Tool, HTTP Request +1
Data & Sheets

This workflow monitors Google Calendar for events indicating that a customer will visit the company today or the next day, retrieves the required details, and sends reminder notifications to the relev

Google Calendar, Google Sheets, HTTP Request +1