{"workflow":{"id":14423,"name":"Audit workflow credential usage to Google Sheets using Google Drive and SQLite3","views":2,"recentViews":1,"totalViews":2,"createdAt":"2026-03-28T20:50:37.354Z","description":"# Workflow Introduction \n\nThis workflow is specifically for Self-Hosted N8N Docker users.\n\nThe purpose of this workflow is to: \n1. Take an inventory of all workflows with credentials (Workflow -&gt; Credential 1, Credential 2, etc.), connecting credential names to workflow names\n2. Create a credentials impact map (Credential -&gt; Workflow 1, Workflow 2, etc.), connecting workflow names to credential IDs and names\n\n\nThis workflow drastically minimizes the amount of time spent trying to figure out which workflows will break if a credential is updated or deleted by bridging the gap between the public API (workflow metadata) and the internal sqlite database (hidden version labels and credential mappings).\n\nIn essence this tool audits your n8n environment without touching your sensitive encrypted data, keeping you API Keys 100% secure.\n\nIt features dynamic time saving trackers, set for what I estimate to be the amount of time it would take to manually complete every individual thing this workflow does in less than 5 minutes.\n\n# Limitations\nThis workflow is optimized for the **Standard N8N Execution Mode**. Due to the high-frequency data lookups required for this tool, it is **not compatible with Task Runners (N8N_RUNNERS_ENABLED=true)**. For maximum stability and to prevent \"Database Locked\" errors, please ensure your instance is running in the default configuration.\n\nIf you use Method 1 (Direct Insertion) in the API Key Instructions below your N8N API key will not appear as connected to this workflow in the resulting Credential Impact Map. Same goes for all other credentials directly inserted into a HTTP Request node across your N8N environment.\n\n# Setting it up - Requirements\n## Environment Variables Required:\n**These enviornment variables are required in order for the version_labels and flow_names code nodes to work.**\nNODE_FUNCTION_ALLOW_BUILTIN=*\nNODE_FUNCTION_ALLOW_EXTERNAL=sqlite3\n\t- **Note:** If you need access to multiple external functions across your n8n instance, add them as a string like this: NODE_FUNCTION_ALLOW_EXTERNAL=sqlite3, better-sqlite3\n\n## Credentials Needed:\nn8n account &gt; n8n self-hosted API key \nGoogle Sheets account\nGoogle Drive account\n\nThe nodes that need manually inputted credentials or node parameter information are: Create folder, flowsList, credsList, and finalFlowEdits\n\n**Note:** If you create your credentials before openning any process nodes, your credentials will be auto connected to the associated nodes. However, this will not happen for the n8n self-hosted API keys. If you have multiple Google Sheets or Google Drive accounts you will need to point the associated nodes to the specific one you want to use. \n\n## API Key Instructions\nHow to get: Settings -&gt; API -&gt; Create API Key -&gt; Name it -&gt; Copy it \n_**Copy the API key and save it somewhere secure. You won't be able to see it again!!**_\n\nHow to use (Two Methods): **Note: The node is set up for Method 1 by default**\n**Method 1 (Direct Insertion).** In the flowsList and credsList nodes:  \n  - Authentication: None  \n  - Send Headers: on  \n  - Name: X-N8N-API-KEY  \n  - Value: &lt;YOUR N8N API KEY&gt;  \n\n**Method 2 (N8N Credential).** In the flowsList and credsList nodes: \n  - Authentication: Generic Credential Type  \n  - Generic Auth Type: Header Auth \n  - Header Auth: Select \"Create new credential\" (**If you already have a Header Auth for your N8N API key select it here**) \n  2a. In the credential creation area:\n    - Name: X-N8N-API-KEY  \n    - Value: &lt;YOUR N8N API KEY&gt; \n\nQueries and Body aren't needed.\n\nEndpoints:\nflowsList: http://localhost:5678/api/v1/workflows or https://&lt;your webhook domain&gt;/api/v1/workflows\ncredsList: http://localhost:5678/api/v1/credentials or https://&lt;your webhook domain&gt;/api/v1/credentials\n\n\n# The Workflow Processes\n## Global Actions\n1. Executes on on a set schedule (weekly on Fridays at 2pm)\n1a. A deactivated execute on command node is included for testing, or for when updated files are needed before the scheduled date/time \n2. Creates a Drive folder to house the resulting spreadsheets using the current date and time as the name\n2a. This workflow creates the folders inside a specified parent folder.\n2b. This node also sets the folder color \n\t- You are welcome to change this to your preferred color. \n\n\n## Branch 1: Workflow Credentials Inventory Process\n1. Creates a google spreadsheet with the current date in the name\n2. Gets the list of all workflows from the public API\n3. Splits the list into individual items for easier processing\n4. Gets the version labels for active workflows from the internal sqlite database\n5. Sets fields for the workflow's name, id, published status, latest published version label, current version's id (whether the workflow is published or not) \n6. Filters out the workflows that don't have any nodes with credentials\n7. Splits out the list of nodes for easier processing\n8. Filters out the nodes that don't have associated credentials\n9. Sets fields for the node names, and credential names\n10. Summarize the output from the Nodes editor, based on workflows\n10a. Append nodeNames\n10b. Append credetntials\n10c. Count the nodes\n11. Clean up the summarized information, converting it back to recognizible clean json format\n12. Set fields for spreadsheet aethestics\n\t- This step can be skipped, however, I didn't like the visual look of the direct from CleanJson to credInventory\n13. Appends header row and data rows to the spreadsheet created in Step 1.\n14. Move the file into the folder created at the start of the workflow from whereever google put it by default\n15. Track the estimated time it would have taken to manually do every step, in a time saved node\n\n\n## Branch 2: Credential Impact Map Process\n1. Creates a spreadsheet with the current date in the name\n2. Gets a list of all credentials from the public API\n3. Splits the list into individual items for easier processing\n4. Sorts the credentials by name in ascending order (A-&gt;Z) in case they come from the split out of order\n5. Gets a list of all workflows with nodes associated with each credential ID from the internal sqlite database\n6. Set fields for the credential name, id, type, created and updated timestamps, and list of workflow names\n7. Appends the header row and data rows to the spreadsheet created in Step 1 of this branch\n8. Move the file into the folder created at the start of the workflow from whereever google put it by default\n9. Track the estimated time it would have taken to manually do every step, in a time saved node","workflow":{"id":"LjqjwPSLWwbMFouQ","meta":{"instanceId":"de33315ccd8c8df612c54de8ea941ad063e50c03727d03cbfc3a7e6c3875936b"},"name":"Workflow Credentialls Auditor - Template-3","tags":[{"id":"lER6qgVHZweXztiL","name":"Template","createdAt":"2026-03-28T19:24:33.753Z","updatedAt":"2026-03-28T19:24:33.753Z"},{"id":"u2Zf7F4Fj1uPzjeQ","name":"ZMGIT","createdAt":"2026-03-14T13:30:15.728Z","updatedAt":"2026-03-14T13:30:15.728Z"}],"nodes":[{"id":"19182763-1070-4870-aa84-0bfa9a7401a2","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","disabled":true,"position":[1296,1184],"parameters":{},"typeVersion":1},{"id":"755c2df9-73e5-4574-a024-46dbf784d1b4","name":"If","type":"n8n-nodes-base.if","notes":"filter out workflows with no associated credentials","position":[3072,896],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"a4367387-89ca-4ee1-b9bc-ef036cbfcc0e","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.nodes.some(node => node.hasOwnProperty('credentials')) }}","rightValue":"="}]},"looseTypeValidation":true},"notesInFlow":true,"typeVersion":2.3},{"id":"1f828c8f-d2c3-459b-9461-5d0e23a2306d","name":"If1","type":"n8n-nodes-base.if","notes":"filter out nodes with no credentials","position":[3520,896],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"6891be3c-b3c9-47a4-8e91-2955ac98c28e","operator":{"type":"object","operation":"exists","singleValue":true},"leftValue":"={{ $json.nodes.credentials }}","rightValue":""}]},"looseTypeValidation":true},"notesInFlow":true,"typeVersion":2.3},{"id":"267f0c8b-b291-49e0-ad35-31dce4aa1cf1","name":"Summarize","type":"n8n-nodes-base.summarize","position":[3968,896],"parameters":{"options":{"outputFormat":"separateItems"},"fieldsToSplitBy":"Workflow","fieldsToSummarize":{"values":[{"field":"nodeName","aggregation":"append"},{"field":"credentials","aggregation":"append","includeEmpty":true},{"field":"nodeName"}]}},"typeVersion":1.1},{"id":"be7fa6fb-1bb2-4041-8034-e906a7357e9c","name":"Time Saved","type":"n8n-nodes-base.timeSaved","position":[3712,1408],"parameters":{"minutesSaved":10},"typeVersion":1},{"id":"bdc0ffb8-2d4a-4bcd-b99d-020c77a1e5e0","name":"Time Saved1","type":"n8n-nodes-base.timeSaved","position":[5296,896],"parameters":{"minutesSaved":15},"typeVersion":1},{"id":"c8a7460f-b391-4ba1-8e58-ac82cf75edb2","name":"credsList","type":"n8n-nodes-base.httpRequest","position":[2144,1424],"parameters":{"url":"https://<WEBHOOK DOMAIN GOES HERE>/api/v1/credentials","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"X-N8N-API-KEY","value":"API KEY GOES HERE"}]}},"typeVersion":4.4},{"id":"9b722b3a-eef0-4671-bcbb-33c449226653","name":"flowsList","type":"n8n-nodes-base.httpRequest","position":[2176,896],"parameters":{"url":"https://<WEBHOOK DOMAIN GOES HERE>/api/v1/workflows","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"X-N8N-API-KEY","value":"API KEY GOES HERE"}]}},"typeVersion":4.4},{"id":"3508f163-8ee2-44c6-8e20-7799066b1f04","name":"version_labels","type":"n8n-nodes-base.code","position":[2624,896],"parameters":{"mode":"runOnceForEachItem","jsCode":"const sqlite3 = require('sqlite3').verbose();\nconst dbPath = '/home/node/.n8n/database.sqlite';\n\n// We use a Promise because the standard sqlite3 module is asynchronous\nreturn new Promise((resolve) => {\n  const db = new sqlite3.Database(dbPath, sqlite3.OPEN_READONLY, (err) => {\n    if (err) {\n      return resolve({ ...$json, version_label: 'Conn Error: ' + err.message });\n    }\n\n    const query = `\n      SELECT name \n      FROM workflow_history \n      WHERE workflowId = ? \n      AND name IS NOT NULL \n      ORDER BY createdAt DESC \n      LIMIT 1\n    `;\n\n    db.get(query, [$json.id], (err, row) => {\n      db.close();\n      if (err) {\n        return resolve({ ...$json, version_label: 'Query Error' });\n      }\n      \n      resolve({\n        ...$json,\n        version_label: row ? row.name : 'No Label'\n      });\n    });\n  });\n});\n"},"typeVersion":2},{"id":"f353b6ee-812b-45ae-9c1e-482a36cddd22","name":"flow_names","type":"n8n-nodes-base.code","position":[2816,1440],"parameters":{"mode":"runOnceForEachItem","jsCode":"const sqlite3 = require('sqlite3').verbose();\nconst dbPath = '/home/node/.n8n/database.sqlite';\n\nreturn new Promise((resolve) => {\n  const db = new sqlite3.Database(dbPath, sqlite3.OPEN_READONLY, (err) => {\n    if (err) {\n      return resolve({ ...$json, workflow_names: 'Conn Error: ' + err.message });\n    }\n\n    // We search the JSON string in the 'nodes' column for your credential ID\n    const query = `\n      SELECT name \n      FROM workflow_entity \n      WHERE nodes LIKE ?\n    `;\n\n    // Wrapping the ID in wildcards to find it anywhere in the nodes JSON\n    const searchString = `%${$json.id}%`;\n\n    db.all(query, [searchString], (err, rows) => {\n      db.close();\n      if (err) {\n        return resolve({ ...$json, workflow_names: 'Query Error: ' + err.message });\n      }\n      \n      // Since one credential can be in many workflows, we join the names\n      const names = rows.length > 0 ? rows.map(r => r.name).join(', ') : 'Not in use';\n      \n      resolve({\n        ...$json,\n        impacted_workflows: names\n      });\n    });\n  });\n});\n"},"typeVersion":2},{"id":"0cde6968-2fbd-41d7-861d-910d2273eee9","name":"CleanJson","type":"n8n-nodes-base.code","position":[4192,896],"parameters":{"jsCode":"return $input.all().map(item => {\n  const data = item.json;\n\n  // Helper function to safely parse only if it's a string\n  const safeParse = (val) => {\n  if (!val || val === \"\") return []; // Return empty array if field is empty\n  return typeof val === 'string' ? JSON.parse(val) : val;\n};\n\n// Use Set to remove duplicates\nconst uniqueNodes = [...new Set(safeParse(data.appended_nodeName))];\nconst uniqueCreds = [...new Set(safeParse(data.appended_credentials))];\n\nconst cleanedCreds = {\n  \"workflow\": safeParse(data.Workflow),\n  \"nodeCount\": data.count_nodeName,\n  \"nodes\": uniqueNodes.join(', '),\n  \"credentials\": uniqueCreds.join(', ')\n};\n\n  // Remove nulls from nodes if they exist\n  if (Array.isArray(cleanedCreds.nodes)) {\n    cleanedCreds.nodes = cleanedCreds.nodes.filter(i => i !== null);\n  }\n    return { json: cleanedCreds };\n\n    // Remove nulls from credentials if they exist\n  if (Array.isArray(cleanedCreds.credentials)) {\n    cleanedCreds.credentials = cleanedCreds.credentials.filter(i => i !== null);\n  }\n    return { json: cleanedCreds };\n\n});"},"typeVersion":2},{"id":"3706eb1a-a1c1-4b36-ba4a-af3a417bf0db","name":"credInventory","type":"n8n-nodes-base.googleSheets","position":[4848,896],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{"locationDefine":{"values":{}}},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Sheet1"},"documentId":{"__rl":true,"mode":"id","value":"={{ $('Create credInventory').item.json.spreadsheetId }}"}},"credentials":{"googleSheetsOAuth2Api":{"id":"TgPQC99gvHvEZzvo","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"5ba9799a-633e-44f4-988e-17c2f60ddc99","name":"credEdits","type":"n8n-nodes-base.set","position":[3040,1440],"parameters":{"options":{},"assignments":{"assignments":[{"id":"75502b17-4357-4289-acab-c50d4a418868","name":"Credential","type":"string","value":"={{ $json.name }}"},{"id":"6a82ea4c-ec34-477b-9b2c-a43173d79e8b","name":"ID","type":"string","value":"='{{ $json.id }}"},{"id":"cdca344c-5126-4fd5-9063-08473a770a70","name":"Type","type":"string","value":"={{ $json.type }}"},{"id":"21a0a2f6-7f3b-45da-abe6-d41fb8b89290","name":"Created","type":"string","value":"='{{ $json.createdAt }}"},{"id":"1568460c-56cc-4ad3-b1f8-451684115b27","name":"Updated","type":"string","value":"='{{ $json.updatedAt }}"},{"id":"c908bc17-caf6-44fd-aa7d-9b440000361a","name":"Workflows","type":"string","value":"={{ $json.impacted_workflows }}"}]}},"typeVersion":3.4},{"id":"ad9d3fd1-f094-4036-b759-800ce175350e","name":"credMap","type":"n8n-nodes-base.googleSheets","position":[3280,1424],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{"locationDefine":{"values":{}}},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Sheet1"},"documentId":{"__rl":true,"mode":"id","value":"={{ $('Create credMap').item.json.spreadsheetId }}"}},"credentials":{"googleSheetsOAuth2Api":{"id":"TgPQC99gvHvEZzvo","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"f7960da2-a4d6-4a65-8172-2ea3e5dbf20c","name":"Create credInventory","type":"n8n-nodes-base.googleSheets","position":[1952,896],"parameters":{"title":"=Workflow-Credentials-Inventory_{{ $now.toISODate() }}_{{ $now.toISOTime().split('.')[0] }}","options":{},"resource":"spreadsheet","sheetsUi":{"sheetValues":[{"title":"Sheet1"}]}},"credentials":{"googleSheetsOAuth2Api":{"id":"TgPQC99gvHvEZzvo","name":"Google Sheets account"}},"executeOnce":false,"typeVersion":4.7},{"id":"7ac1b836-3724-44b4-924e-ae7008877642","name":"Create credMap","type":"n8n-nodes-base.googleSheets","position":[1920,1424],"parameters":{"title":"=Credential-Impact-Map_{{ $now.toISODate() }}_{{ $now.toISOTime().split('.')[0] }}","options":{},"resource":"spreadsheet","sheetsUi":{"sheetValues":[{"title":"Sheet1"}]}},"credentials":{"googleSheetsOAuth2Api":{"id":"TgPQC99gvHvEZzvo","name":"Google Sheets account"}},"executeOnce":false,"typeVersion":4.7},{"id":"d074d575-586d-4f4c-abc4-3f62fe1b1519","name":"splitFlows","type":"n8n-nodes-base.splitOut","position":[2400,896],"parameters":{"options":{},"fieldToSplitOut":"data"},"typeVersion":1},{"id":"75ae8f02-9f5d-4535-8614-626179822d8c","name":"splitCreds","type":"n8n-nodes-base.splitOut","position":[2368,1424],"parameters":{"options":{},"fieldToSplitOut":"data"},"typeVersion":1},{"id":"8fb91bcf-3128-4cc0-9a7c-9f87cac06c83","name":"splitNodes","type":"n8n-nodes-base.splitOut","position":[3296,896],"parameters":{"include":"allOtherFields","options":{},"fieldToSplitOut":"nodes"},"typeVersion":1},{"id":"1b496c42-038c-4bef-a377-9643aa72fb90","name":"sortCredNames","type":"n8n-nodes-base.sort","position":[2592,1440],"parameters":{"options":{},"sortFieldsUi":{"sortField":[{"fieldName":"name"}]}},"typeVersion":1},{"id":"1a26e4ba-4b30-44ae-a7fc-c2617eba3cd9","name":"nodeEdits","type":"n8n-nodes-base.set","position":[3744,896],"parameters":{"include":"selected","options":{},"assignments":{"assignments":[{"id":"ddd5cbdd-26c9-4bca-a23e-7c7b09b5eb8b","name":"nodeName","type":"string","value":"={{ $json.nodes.name }}"},{"id":"653cdd3d-4312-459d-b459-2ee7f85e6aad","name":"credentials","type":"string","value":"={{ Object.values($json.nodes.credentials)[0]?.name || 'None' }}"}]},"includeFields":"Workflow","includeOtherFields":true},"typeVersion":3.4},{"id":"9fc83561-e97f-4338-ad8b-75eb56876eab","name":"finalFlowEdits","type":"n8n-nodes-base.set","position":[4416,896],"parameters":{"options":{},"assignments":{"assignments":[{"id":"8a16eb21-ddcf-47bf-aed9-0aa706fffca9","name":"Workflow","type":"string","value":"={{ $('CleanJson').item.json.workflow.name }}"},{"id":"7ea6fd7c-88b1-45c0-b3e2-99535ccc17dc","name":"ID","type":"string","value":"='{{ $('CleanJson').item.json.workflow.id }}"},{"id":"2cf0fed2-5663-406a-9982-e6ecc944e70f","name":"Published","type":"string","value":"={{ $('CleanJson').item.json.workflow.published.status }}"},{"id":"ebf94657-01d2-4938-8810-17627a570e90","name":"Live Version","type":"string","value":"={{ $('CleanJson').item.json.workflow.published.latestVersion }}"},{"id":"699219d3-8e73-4108-b027-b9e12ab0dfa1","name":"Last Published","type":"string","value":"='{{ $('CleanJson').item.json.workflow.published.date }}"},{"id":"b2ce285e-d2a1-4a9d-9d98-5f21d8930686","name":"Current Version ID","type":"string","value":"='{{ $('CleanJson').item.json.workflow.currentVersion.id }}"},{"id":"26decaf8-7e11-44b5-9ab6-cc8d75ad19a4","name":"Node w/ Creds","type":"string","value":"={{ $('CleanJson').item.json.nodeCount }}"},{"id":"202d79ac-9e2e-4955-8596-41ab218f13b3","name":"Nodes","type":"string","value":"={{$json.nodes }}"},{"id":"57154e07-3f15-4f9e-8985-be78b7a84fed","name":"Credentials","type":"string","value":"={{ $json.credentials }}"},{"id":"f552f0db-feb7-4394-9430-b0fab509e165","name":"URL","type":"string","value":"=https://{{YOUR WEBHOOK GOES HERE}}/workflow/{{ $('CleanJson').item.json.workflow.id }}"}]}},"typeVersion":3.4},{"id":"72dc5586-68cc-425c-b867-fdcd3b5c934e","name":"flowEdits","type":"n8n-nodes-base.set","position":[2848,896],"parameters":{"options":{},"assignments":{"assignments":[{"id":"ddd5cbdd-26c9-4bca-a23e-7c7b09b5eb8b","name":"Workflow.name","type":"string","value":"={{ $json.name }}"},{"id":"a9e3a9f2-a0b7-464d-a1ea-cd109d5e121b","name":"Workflow.id","type":"string","value":"={{ $json.id }}"},{"id":"cdbea29a-c66a-438b-ac03-40c3168743e0","name":"Workflow.published.status","type":"string","value":"={{ $json.active ? 'Yes' : 'No' }}"},{"id":"1e7048e6-11c7-4f33-b1aa-2e8d4479fb6e","name":"Workflow.published.latestVersion","type":"string","value":"={{ $json.version_label }}"},{"id":"7420264e-523a-430d-9922-5a47e6dd0258","name":"Workflow.published.date","type":"string","value":"={{ $json.activeVersion.createdAt }}"},{"id":"19d81566-2ec5-4556-85b5-546460b716c1","name":"Workflow.currentVersion.id","type":"string","value":"={{ $json.versionId }}"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"3611556d-5612-409e-bc42-29d6a8aefee3","name":"Create folder","type":"n8n-nodes-base.googleDrive","position":[1568,992],"parameters":{"name":"={{ $now.toISODate() }}_{{ $now.toISOTime().split('.')[0] }}","driveId":{"__rl":true,"mode":"list","value":"My Drive"},"options":{"folderColorRgb":"#F18F17"},"folderId":{"__rl":true,"mode":"id","value":"[FOLDER ID GOES HERE]"},"resource":"folder"},"credentials":{"googleDriveOAuth2Api":{"id":"bB7qiMzHuv5AbZFx","name":"Google Drive account"}},"typeVersion":3},{"id":"e82afe17-b731-461f-8d1a-065060ccefbe","name":"moveCreds","type":"n8n-nodes-base.googleDrive","position":[3504,1424],"parameters":{"fileId":{"__rl":true,"mode":"id","value":"={{ $('Create credMap').item.json.spreadsheetId }}"},"driveId":{"__rl":true,"mode":"list","value":"My Drive"},"folderId":{"__rl":true,"mode":"id","value":"={{ $('Create folder').item.json.id }}"},"operation":"move"},"credentials":{"googleDriveOAuth2Api":{"id":"bB7qiMzHuv5AbZFx","name":"Google Drive account"}},"typeVersion":3},{"id":"b6633301-c413-4758-83c1-60669d520111","name":"moveFlows","type":"n8n-nodes-base.googleDrive","position":[5072,896],"parameters":{"fileId":{"__rl":true,"mode":"id","value":"={{ $('Create credInventory').item.json.spreadsheetId }}"},"driveId":{"__rl":true,"mode":"list","value":"My Drive"},"folderId":{"__rl":true,"mode":"id","value":"={{ $('Create folder').item.json.id }}"},"operation":"move"},"credentials":{"googleDriveOAuth2Api":{"id":"bB7qiMzHuv5AbZFx","name":"Google Drive account"}},"typeVersion":3},{"id":"46e68792-76b9-4858-8340-0788e9a1133c","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[0,-80],"parameters":{"width":1072,"height":2256,"content":"# Workflow Introduction \n\nThis workflow is specifically for Self-Hosted N8N Docker users.\n\nThe purpose of this workflow is to: \n1. Take an inventory of all workflows with credentials (Workflow -> Credential 1, Credential 2, etc.), connecting credential names to workflow names\n2. Create a credentials impact map (Credential -> Workflow 1, Workflow 2, etc.), connecting workflow names to credential IDs and names\n\n\nThis workflow drastically minimizes the amount of time spent trying to figure out which workflows will break if a credential is updated or deleted by bridging the gap between the public API (workflow metadata) and the internal sqlite database (hidden version labels and credential mappings).\n\nIn essence this tool audits your n8n environment without touching your sensitive encrypted data, keeping you API Keys 100% secure.\n\nIt features dynamic time saving trackers, set for what I estimate to be the amount of time it would take to manually complete every individual thing this workflow does in less than 5 minutes.\n\n# Limitations\nThis workflow is optimized for the **Standard N8N Execution Mode**. Due to the high-frequency data lookups required for this tool, it is **not compatible with Task Runners (N8N_RUNNERS_ENABLED=true)**. For maximum stability and to prevent \"Database Locked\" errors, please ensure your instance is running in the default configuration. If you use Method 1 (Direct Insertion) in the API Key Instructions below your N8N API key will not appear as connected to this workflow in the resulting Credential Impact Map. Same goes for all other credentials directly inserted into a HTTP Request node across your N8N environment.\n\n# Setting it up - Requirements\n## Environment Variables Required:\n**These enviornment variables are required in order for the version_labels and flow_names code nodes to work.**\nNODE_FUNCTION_ALLOW_BUILTIN=*\nNODE_FUNCTION_ALLOW_EXTERNAL=sqlite3\n\t- **Note:** If you need access to multiple external functions across your n8n instance, add them as a string like this: NODE_FUNCTION_ALLOW_EXTERNAL=sqlite3, better-sqlite3\n\n## Credentials Needed:\nn8n account > n8n self-hosted API key \nGoogle Sheets account\nGoogle Drive account\n\nThe nodes that need manually inputted credentials or node parameter information are: Create folder, flowsList, credsList, and finalFlowEdits\n\n**Note:** If you create your credentials before openning any process nodes, your credentials will be auto connected to the associated nodes. However, this will not happen for the n8n self-hosted API keys. If you have multiple Google Sheets or Google Drive accounts you will need to point the associated nodes to the specific one you want to use. \n\n## API Key Instructions\nHow to get: Setting > API > Create API key \n_**Copy the API key and save it somewhere secure. You won't be able to see it again!!**_\nHow to use (Two Methods): **Note: The node is set up for Method 1 by default**\nMethod 1 (Direct Insertion). In the flowsList and credsList nodes: \n\t   - Authentication: None \n\t- Send Headers: on \n\t- Name: X-N8N-API-KEY \n\t- Value: <YOUR N8N API KEY> \n\n Method 2 (N8N Credential). In the flowsList and credsList nodes: \n\t- Authentication: Generic Credential Type  \n\t- Generic Auth Type: Header Auth \n\t- Header Auth: Select 'Create new credential' (**If you already have a Header Auth for your N8N API key select it here**) \n\t2a. In the credential creation area:\n\t\t- Name: X-N8N-API-KEY  \n\t\t- Value: <YOUR N8N API KEY>\n\nQueries and Body aren't needed.\n\nEndpoints:\nflowsList: http://localhost:5678/api/v1/workflows or https://<your webhook domain>/api/v1/workflows\ncredsList: http://localhost:5678/api/v1/credentials or https://<your webhook domain>/api/v1/credentials\n\n\n# The Workflow Processes\n## Global Actions\n1. Executes on on a set schedule (weekly on Fridays at 2pm)\n1a. A deactivated execute on command node is included for testing, or for when updated files are needed before the scheduled date/time \n2. Creates a Drive folder to house the resulting spreadsheets using the current date and time as the name\n2a. This workflow creates the folders inside a specified parent folder.\n2b. This node also sets the folder color \n\t- You are welcome to change this to your preferred color. \n\n\n## Branch 1: Workflow Credentials Inventory Process\n1. Creates a google spreadsheet with the current date in the name\n2. Gets the list of all workflows from the public API\n3. Splits the list into individual items for easier processing\n4. Gets the version labels for active workflows from the internal sqlite database\n5. Sets fields for the workflow's name, id, published status, latest published version label, current version's id (whether the workflow is published or not) \n6. Filters out the workflows that don't have any nodes with credentials\n7. Splits out the list of nodes for easier processing\n8. Filters out the nodes that don't have associated credentials\n9. Sets fields for the node names, and credential names\n10. Summarize the output from the Nodes editor, based on workflows\n10a. Append nodeNames\n10b. Append credetntials\n10c. Count the nodes\n11. Clean up the summarized information, converting it back to recognizible clean json format\n12. Set fields for spreadsheet aethestics\n\t- This step can be skipped, however, I didn't like the visual look of the direct from CleanJson to credInventory\n13. Appends header row and data rows to the spreadsheet created in Step 1.\n14. Move the file into the folder created at the start of the workflow from whereever google put it by default\n15. Track the estimated time it would have taken to manually do every step, in a time saved node\n\n\n## Branch 2: Credential Impact Map Process\n1. Creates a spreadsheet with the current date in the name\n2. Gets a list of all credentials from the public API\n3. Splits the list into individual items for easier processing\n4. Sorts the credentials by name in ascending order (A->Z) in case they come from the split out of order\n5. Gets a list of all workflows with nodes associated with each credential ID from the internal sqlite database\n6. Set fields for the credential name, id, type, created and updated timestamps, and list of workflow names\n7. Appends the header row and data rows to the spreadsheet created in Step 1 of this branch\n8. Move the file into the folder created at the start of the workflow from whereever google put it by default\n9. Track the estimated time it would have taken to manually do every step, in a time saved node"},"typeVersion":1},{"id":"f2df049c-7107-4c71-84ce-e61a9bda7553","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[1248,928],"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[5],"triggerAtHour":14}]}},"typeVersion":1.3},{"id":"8d26ac6e-b51d-473e-90a3-ad567ba7f780","name":"Sort","type":"n8n-nodes-base.sort","position":[4624,896],"parameters":{"options":{},"sortFieldsUi":{"sortField":[{"fieldName":"Workflow"}]}},"typeVersion":1},{"id":"6914b8cb-02e9-4452-93e8-38a18760c365","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1856,1248],"parameters":{"color":7,"width":2096,"height":432,"content":"## Branch 2 - Credentials Mapping\nThis part of the workflow grabs your credentials and the associated workflows and generates a google sheet\n- Lists all credentials and all the workflows using each one\n"},"typeVersion":1},{"id":"7b37a01c-843d-4a99-88eb-36d9055df009","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1120,816],"parameters":{"color":7,"width":720,"height":608,"content":"## Global Actions"},"typeVersion":1},{"id":"a0f375f8-b4b8-4a4b-ab46-c026957ac5f7","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1856,688],"parameters":{"color":7,"width":3552,"height":528,"content":"## Branch 1 - Workflow Credentials Inventory\nThis part of the workflow grabs all your workflows that have credentials attached and all the credentials involved in each one, and generates a google sheet"},"typeVersion":1},{"id":"32e84e87-5719-421b-bd0c-0bea803e3fae","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[2096,1072],"parameters":{"color":3,"height":96,"content":"## Edit URL and API Key"},"typeVersion":1},{"id":"739ef916-2866-48eb-bd09-9f62f58a97c6","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[2080,1584],"parameters":{"color":3,"height":96,"content":"## Edit URL and API Key"},"typeVersion":1},{"id":"905b8c3f-7aac-46ac-a2e9-53a37cd5a53f","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1504,1216],"parameters":{"color":3,"height":128,"content":"## Edit folder destination and parent folder ID"},"typeVersion":1},{"id":"86e910d9-98f5-4428-8ec4-b6044a826df3","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[4368,1088],"parameters":{"color":3,"height":96,"content":"## Edit URL"},"typeVersion":1},{"id":"56e867c7-9a9d-49e3-8bf0-8ab9bea8a221","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[1152,432],"parameters":{"color":3,"width":672,"height":128,"content":"## Disable Runners - If you have runners enabled on your n8n container this workflow will not work."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","executionOrder":"v1"},"versionId":"4494a980-79f6-4ed3-ae18-a829d389ce39","connections":{"If":{"main":[[{"node":"splitNodes","type":"main","index":0}]]},"If1":{"main":[[{"node":"nodeEdits","type":"main","index":0}]]},"Sort":{"main":[[{"node":"credInventory","type":"main","index":0}]]},"credMap":{"main":[[{"node":"moveCreds","type":"main","index":0}]]},"CleanJson":{"main":[[{"node":"finalFlowEdits","type":"main","index":0}]]},"Summarize":{"main":[[{"node":"CleanJson","type":"main","index":0}]]},"credEdits":{"main":[[{"node":"credMap","type":"main","index":0}]]},"credsList":{"main":[[{"node":"splitCreds","type":"main","index":0}]]},"flowEdits":{"main":[[{"node":"If","type":"main","index":0}]]},"flowsList":{"main":[[{"node":"splitFlows","type":"main","index":0}]]},"moveCreds":{"main":[[{"node":"Time Saved","type":"main","index":0}]]},"moveFlows":{"main":[[{"node":"Time Saved1","type":"main","index":0}]]},"nodeEdits":{"main":[[{"node":"Summarize","type":"main","index":0}]]},"flow_names":{"main":[[{"node":"credEdits","type":"main","index":0}]]},"splitCreds":{"main":[[{"node":"sortCredNames","type":"main","index":0}]]},"splitFlows":{"main":[[{"node":"version_labels","type":"main","index":0}]]},"splitNodes":{"main":[[{"node":"If1","type":"main","index":0}]]},"Create folder":{"main":[[{"node":"Create credMap","type":"main","index":0},{"node":"Create credInventory","type":"main","index":0}]]},"credInventory":{"main":[[{"node":"moveFlows","type":"main","index":0}]]},"sortCredNames":{"main":[[{"node":"flow_names","type":"main","index":0}]]},"Create credMap":{"main":[[{"node":"credsList","type":"main","index":0}]]},"finalFlowEdits":{"main":[[{"node":"Sort","type":"main","index":0}]]},"version_labels":{"main":[[{"node":"flowEdits","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Create folder","type":"main","index":0}]]},"Create credInventory":{"main":[[{"node":"flowsList","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Create folder","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":37,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.set":{"count":4},"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.sort":{"count":2},"n8n-nodes-base.splitOut":{"count":3},"n8n-nodes-base.summarize":{"count":1},"n8n-nodes-base.timeSaved":{"count":2},"n8n-nodes-base.stickyNote":{"count":9},"n8n-nodes-base.googleDrive":{"count":3},"n8n-nodes-base.httpRequest":{"count":2},"n8n-nodes-base.googleSheets":{"count":4},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Ziana Mitchell","username":"zmglobalit","bio":"Beginner Automations Creature. Korean-English Document Translator with 9 years experience. Reeducated web designer with HTML, CSS, PHP/WordPress/Drupal experience.","verified":true,"links":["https://zmglobalit.com"],"avatar":"https://gravatar.com/avatar/140cfec7ec58b4248dcf970f68e5e615f3f2adc7802f95ca28979d4e9cf961e5?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":58,"icon":"file:googleDrive.svg","name":"n8n-nodes-base.googleDrive","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Drive"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Drive","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1239,"icon":"file:splitOut.svg","name":"n8n-nodes-base.splitOut","codex":{"data":{"alias":["Split","Nested","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitout/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Split Out"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjOUI2REQ1IiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQ4MCAxNDhjMC02LjYyNy01LjM3My0xMi0xMi0xMkgzMjJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxNDZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMCA5NmMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDMyMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDE0NmM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem0wIDk2YzAtNi42MjctNS4zNzMtMTItMTItMTJIMzIyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTQ2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNNDM4IDc2YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzA5Ljc4M2MtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMydjU2YzAgMjYuOTc4LTEwLjI3MiA1MS41NTctMjcuMTE5IDcwLjAzOS01LjA1NSA1LjU0NS01LjA1NSAxNC4zNzcgMCAxOS45MjIgMTYuODQ3IDE4LjQ4MiAyNy4xMTkgNDMuMDYxIDI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMySDQyNmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzA5Ljc4M2MtNDQuMTgzIDAtODAtMzUuODE3LTgwLTgwdi01NmMwLTMwLjkyOC0yNS4wNzItNTYtNTYtNTZhNS43ODMgNS43ODMgMCAwIDEtNS43ODMtNS43ODN2LTM2LjQzNGE1Ljc4MyA1Ljc4MyAwIDAgMSA1Ljc4My01Ljc4M2MzMC45MjggMCA1Ni0yNS4wNzIgNTYtNTZ2LTU2YzAtNDQuMTgzIDM1LjgxNy04MCA4MC04MEg0MjZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMzYgMjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxMTJjNi42MjcgMCAxMi01LjM3MyAxMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik01MTIgMEgwdjUxMmg1MTJ6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+"},"displayName":"Split Out","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1240,"icon":"file:sort.svg","name":"n8n-nodes-base.sort","codex":{"data":{"alias":["Sort","Order","Transform","Array","List","Item","Random"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sort/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Sort"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjODI4N0VCIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMzAuNSA0MjIuNWMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMzUxYzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMjRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYzNTFjMCA2LjYyNy01LjM3MyAxMi0xMiAxMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiM4Mjg3RUIiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTM2LjA3NyAzMzMuNDgyYzkuMzk4LTkuMzQ2IDI0LjU5NC05LjMwNCAzMy45NC4wOTVsNzIuNDgzIDcyLjg4NyA3Mi40ODItNzIuODg3YzkuMzQ3LTkuMzk5IDI0LjU0My05LjQ0MSAzMy45NDEtLjA5NXM5LjQ0MSAyNC41NDMuMDk1IDMzLjk0MWwtODkuNSA5MGEyNCAyNCAwIDAgMS0zNC4wMzYgMGwtODkuNS05MGMtOS4zNDYtOS4zOTgtOS4zMDQtMjQuNTk0LjA5NS0zMy45NDFNMzgxLjUgODkuNWM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjM1MWMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC0yNGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMzUxYzAtNi42MjcgNS4zNzMtMTIgMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjODI4N0VCIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00NzUuOTIzIDE3OC41MThjLTkuMzk4IDkuMzQ2LTI0LjU5NCA5LjMwNC0zMy45NDEtLjA5NUwzNjkuNSAxMDUuNTM2bC03Mi40ODIgNzIuODg3Yy05LjM0NyA5LjM5OS0yNC41NDMgOS40NDEtMzMuOTQxLjA5NXMtOS40NDEtMjQuNTQzLS4wOTUtMzMuOTQxbDg5LjUtOTBhMjQgMjQgMCAwIDEgMzQuMDM2IDBsODkuNSA5MGM5LjM0NiA5LjM5OCA5LjMwNCAyNC41OTQtLjA5NSAzMy45NDEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg=="},"displayName":"Sort","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1241,"icon":"file:summarize.svg","name":"n8n-nodes-base.summarize","codex":{"data":{"alias":["Append","Array","Average","Concatenate","Count","Group","Item","List","Max","Min","Pivot","Sum","Summarise","Summarize","Transform","Unique"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.summarize/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Summarize"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjRjkyIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMzIgOTFjLTE1LjQ2NCAwLTI4IDEyLjUzNi0yOCAyOHYzMTdjMCAxNS40NjQgMTIuNTM2IDI4IDI4IDI4aDI0OGMxNS40NjQgMCAyOC0xMi41MzYgMjgtMjhWMTE5YzAtMTUuNDY0LTEyLjUzNi0yOC0yOC0yOGgtNmE2IDYgMCAwIDEtNi02VjQ5YTYgNiAwIDAgMSA2LTZoNmM0MS45NzQgMCA3NiAzNC4wMjYgNzYgNzZ2MzE3YzAgNDEuOTc0LTM0LjAyNiA3Ni03NiA3NkgxMzJjLTQxLjk3NCAwLTc2LTM0LjAyNi03Ni03NlYxMTljMC00MS45NzQgMzQuMDI2LTc2IDc2LTc2aDZhNiA2IDAgMCAxIDYgNnYzNmE2IDYgMCAwIDEtNiA2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI0Y5MiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDBjLTI3LjIzMiAwLTUwLjIyNyAxOC4xNDItNTcuNTU4IDQzSDE4MmE2IDYgMCAwIDAtNiA2djcwYTYgNiAwIDAgMCA2IDZoMTQ4YTYgNiAwIDAgMCA2LTZWNDlhNiA2IDAgMCAwLTYtNmgtMTYuNDQyQzMwNi4yMjcgMTguMTQyIDI4My4yMzIgMCAyNTYgMG0wIDQwYTE5LjkgMTkuOSAwIDAgMC0xMC41NDEgM0MyMzkuNzgxIDQ2LjUyOCAyMzYgNTIuODIzIDIzNiA2MGMwIDExLjA0NiA4Ljk1NCAyMCAyMCAyMHMyMC04Ljk1NCAyMC0yMGMwLTcuMTc3LTMuNzgxLTEzLjQ3Mi05LjQ1OS0xN0ExOS45IDE5LjkgMCAwIDAgMjU2IDQwbTEwMSAxNzljMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgyMzNjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjRjkyIiBkPSJNMTk3IDIwN2MwIDEzLjI1NS0xMC43NDUgMjQtMjQgMjRzLTI0LTEwLjc0NS0yNC0yNCAxMC43NDUtMjQgMjQtMjQgMjQgMTAuNzQ1IDI0IDI0Ii8+PHBhdGggZmlsbD0iI0Y5MiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzU3IDM5NWMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDIzM2MtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxMTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNGOTIiIGQ9Ik0xOTcgMzgzYzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNHMtMjQtMTAuNzQ1LTI0LTI0IDEwLjc0NS0yNCAyNC0yNCAyNCAxMC43NDUgMjQgMjQiLz48cGF0aCBmaWxsPSIjRjkyIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNTcgMzA3YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMjMzYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDExMmM2LjYyNyAwIDEyIDUuMzczIDEyIDEyeiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI0Y5MiIgZD0iTTE5NyAyOTVjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0cy0yNC0xMC43NDUtMjQtMjQgMTAuNzQ1LTI0IDI0LTI0IDI0IDEwLjc0NSAyNCAyNCIvPjwvc3ZnPg=="},"displayName":"Summarize","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1325,"icon":"fa:timer","name":"n8n-nodes-base.timeSaved","codex":{"data":{"alias":["time","track","saved"],"details":"Track Saved Time","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.savedTime/"}]},"categories":["Core Nodes","Development"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"organization\"]","defaults":{"name":"Time Saved","color":"#1E90FF"},"iconData":{"icon":"timer","type":"icon"},"displayName":"Track Time Saved","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":16,"name":"DevOps"}],"image":[]}}