{
  "workflow": {
    "id": 8516,
    "name": "Automate Gradle dependency updates with Slack notifications",
    "views": 8,
    "recentViews": 0,
    "totalViews": 8,
    "createdAt": "2025-09-12T10:36:13.910Z",
    "description": "# Gradle Project Dependency & Version Update - Smart Tracker\n\nThis workflow automatically checks your project’s libraries for updates. It identifies outdated dependencies, flags major version changes, and compares current and latest versions. Libraries that are already up-to-date are skipped, while outdated ones are automatically updated in build.gradle. Slack notifications inform your team which dependencies were updated or already current, keeping your project dependencies safe and up-to-date without manual effort.\n\n### Quick Start – Implementation Steps\n\n1.  Connect an SSH account with access to your project folder.\n2.  Configure Slack credentials and select the channel for notifications.\n3.  Adjust the schedule trigger (e.g., every 30 days at 10:30 AM).\n4.  Activate the workflow — automatic dependency tracking and alerts start running.\n    \n## What It Does\n\nThis workflow automates dependency management for your project. It runs a Gradle command to list outdated libraries, parses the output to identify all available updates, and marks major version changes (like 1.x → 2.x) as critical. Libraries already at the latest version are ignored, while outdated libraries can automatically update the build.gradle file. Slack messages notify your team of both updated dependencies and those already up-to-date. This reduces manual tracking and ensures your project stays current and secure.\n\n## Who’s It For\nThis workflow is ideal for:\n- Development teams managing Android projects.\n- DevOps engineers maintaining dependency health.\n- Project managers tracking library updates.\n- Companies wanting automated dependency monitoring and alerts.\n- Teams using Slack for internal notifications\n\n## Requirements to Use This Workflow\nTo fully use this workflow, you need:\n- An **n8n instance** (self-hosted or cloud).\n- SSH access to your Android project folder.\n- A **Slack workspace** with API access.\n- Gradle installed in your project environment.\n- Basic understanding of Gradle dependencies and JSON outputs.\n\n## How It Works\n\n- **Run Gradle Dependency Check** – Executes a Gradle command to list outdated libraries.\n- **Extract Dependency Updates** – Parses the output and collects each library’s name, current version, and latest version.\n- **Mark Major Updates** – Flags libraries with major version changes as critical.\n- **Check Same Version** – Compares current and latest versions and keeps the “major” flag.\n- **Conditional Routing** – Libraries already up-to-date are skipped; outdated ones proceed.\n- **Update build.gradle** – Critical updates can automatically modify your project’s Gradle file.\n- **Slack Notifications** – Sends messages about updated dependencies and ones already up-to-date.\n\n## **Setup Steps**\n- Import the workflow JSON file into n8n.\n- Configure your credentials:\n\t- SSH account for project access\n\t- Slack API access and channel selection\n- Adjust the schedule trigger for your desired update frequency.\n- Verify paths in SSH commands (cwd) match your project directory.\n- Activate the workflow.\n\n## How To Customize Nodes\n\n### **Change Update Rules**\n- Modify the “Mark Major Updates” node if you want different criteria for critical updates.\n- Adjust the “Check Same Version” node to include minor or patch updates if needed.\n\n### **Customize Slack Messages**\n- Update the text in Slack nodes to include additional info like release notes.\n- Send notifications to different channels based on project or team.\n\n### **Customize Gradle Update Command**\n- Modify the sed command in the SSH node if your build.gradle structure differs.\n- Add backup or logging steps before automatic updates.\n\n## Add-Ons (Optional Enhancements)\nYou can extend this workflow with:\n- Email notifications for critical updates.\n- Logging updates to Google Sheets or Airtable.\n- Automated pull requests for dependency updates.\n- Multi-project support by running checks in multiple directories.\n\n## Use Case Examples\n- **Keep Android libraries up-to-date** – Automatically detect and apply updates.\n- **Track major version upgrades** – Flag potentially breaking changes before updating.\n- **Team notifications via Slack** – Keep developers informed about dependency health.\n- **Reduce manual dependency tracking** – Save time and avoid human error.\n\n## Troubleshooting Guide\n| Issue                     | Possible Cause                               | Solution                                                             |\n|---------------------------|-----------------------------------------------|----------------------------------------------------------------------|\n| Slack message not sent    | Wrong API credentials or channel ID           | Check Slack credentials and channel configuration                    |\n| Gradle command fails      | Incorrect project path or invalid Gradle setup| Verify SSH cwd path and ensure Gradle is installed/configured        |\n| Dependencies not updating | Incorrect `sed` command for `build.gradle`    | Adjust the command or use a backup/preview approach                  |\n| Workflow not triggering   | Schedule trigger misconfigured                | Review and correct n8n schedule settings                             |\n\n## Need Help?\n\nIf you need assistance setting up, troubleshooting or customizing this workflow, the n8n team at WeblineIndia can help. We can automate more processes, integrate external systems or create custom workflow solutions tailored to your projects.",
    "workflow": {
      "id": "btO7TntrjfhwAxeT",
      "meta": {
        "instanceId": "14e4c77104722ab186539dfea5182e419aecc83d85963fe13f6de862c875ebfa",
        "templateCredsSetupCompleted": true
      },
      "name": "Smart Dependency Update Tracker",
      "tags": [],
      "nodes": [
        {
          "id": "0a705640-223f-40dd-a661-3c34f608fd7f",
          "name": "Check Same Version",
          "type": "n8n-nodes-base.code",
          "position": [
            -1904,
            -240
          ],
          "parameters": {
            "jsCode": "return items.map(item => {\n  const { dependency, current, latest } = item.json;\n\n  return {\n    json: {\n      dependency,\n      current,\n      latest,\n      same: current === latest,   // true if same\n      major: item.json.critical   // keep your old major detection\n    }\n  };\n});\n"
          },
          "typeVersion": 2
        },
        {
          "id": "eeb2f53b-9ae5-4e12-a7a5-237e6c95ba34",
          "name": "If same Version",
          "type": "n8n-nodes-base.if",
          "position": [
            -1744,
            -240
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "1cecbda6-929e-4e2f-acc8-024429c6a64f",
                  "operator": {
                    "name": "filter.operator.equals",
                    "type": "string",
                    "operation": "equals"
                  },
                  "leftValue": "={{$json.same}}",
                  "rightValue": ""
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "9ea87c06-bafd-4576-9544-3b3fc542c8c3",
          "name": "Run Gradle Dependency Check",
          "type": "n8n-nodes-base.ssh",
          "position": [
            -2464,
            -240
          ],
          "parameters": {
            "cwd": "/home/user/Documents/andorid/project/AndroidBoilerplate/",
            "command": "./gradlew dependencyUpdates"
          },
          "credentials": {
            "sshPassword": {
              "id": "credential-id",
              "name": "sshPassword Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "e22ad97d-cdb3-45b9-9afb-46c67f5c8a1a",
          "name": "Extract Dependency Updates",
          "type": "n8n-nodes-base.code",
          "position": [
            -2256,
            -240
          ],
          "parameters": {
            "jsCode": "const stdout = $json[\"stdout\"];\nconst lines = stdout.split(\"\\n\");\n\nconst updates = [];\nlet section = null;\n\nfor (let line of lines) {\n\tline = line.trim();\n\n\t// enter update section\n\tif (line.startsWith(\"The following dependencies have later milestone versions:\")) {\n\t\tsection = \"updates\";\n\t\tcontinue;\n\t}\n\n\t// stop at next section\n\tif (section === \"updates\" && line.startsWith(\"Gradle release-candidate updates:\")) {\n\t\tsection = null;\n\t}\n\n\t// capture dependencies with version change\n\tif (section === \"updates\" && line.startsWith(\"-\")) {\n\t\tconst match = line.match(/- (.*?) \\[(.*?) -> (.*?)\\]/);\n\t\tif (match) {\n\t\t\tupdates.push({\n\t\t\t\tdependency: match[1],\n\t\t\t\tcurrent: match[2],\n\t\t\t\tlatest: match[3]\n\t\t\t});\n\t\t}\n\t}\n}\n\nreturn updates.map(dep => ({ json: dep }));\n"
          },
          "typeVersion": 2
        },
        {
          "id": "b23738bf-99d4-4d18-bd42-31923be36cd0",
          "name": "Mark Major Updates",
          "type": "n8n-nodes-base.code",
          "position": [
            -2080,
            -240
          ],
          "parameters": {
            "jsCode": "function isMajorUpdate(current, latest) {\n\tconst parse = (v) => v.replace(/[^\\d.]/g, \"\").split(\".\").map(n => parseInt(n || \"0\", 10));\n\tconst [cMajor] = parse(current);\n\tconst [lMajor] = parse(latest);\n\treturn lMajor > cMajor;\n}\n\nreturn items.map(item => {\n\tconst { dependency, current, latest } = item.json;\n\treturn {\n\t\tjson: {\n\t\t\tdependency,\n\t\t\tcurrent,\n\t\t\tlatest,\n\t\t\tcritical: isMajorUpdate(current, latest)\n\t\t}\n\t};\n});\n"
          },
          "typeVersion": 2
        },
        {
          "id": "771c01dd-92f1-416b-a456-416598f6ed7b",
          "name": "Filter Major Updates",
          "type": "n8n-nodes-base.code",
          "position": [
            -1424,
            -64
          ],
          "parameters": {
            "jsCode": "return items.filter(i => i.json.critical === true);\n"
          },
          "typeVersion": 2
        },
        {
          "id": "2591323f-1858-4922-a487-21221dbbdbee",
          "name": "Update build.gradle",
          "type": "n8n-nodes-base.ssh",
          "position": [
            -1232,
            -64
          ],
          "parameters": {
            "cwd": "/home/user/Documents/andorid/project/AndroidBoilerplate/",
            "command": "=sed -i \"/{{ $json.dependency }}/s/{{ $json.current }}/{{ $json.latest }}/\" app/build.gradle\n"
          },
          "credentials": {
            "sshPassword": {
              "id": "credential-id",
              "name": "sshPassword Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "28998fbb-3c67-40a6-b54c-31a837bcbe82",
          "name": "Notify: Dependency Updated",
          "type": "n8n-nodes-base.slack",
          "position": [
            -1056,
            -64
          ],
          "webhookId": "ea437be9-3c09-4718-9b7b-c28ca2b49afd",
          "parameters": {
            "text": "Dependency {{$json.dependency}} has been updated successfully.\nOld version: {{$json.current}}\nNew version: {{$json.latest}}\n",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "C09S57E2JQ2",
              "cachedResultName": "n8n"
            },
            "otherOptions": {}
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.3
        },
        {
          "id": "1f45928d-cc2d-4d98-acbc-45918b5ce66c",
          "name": "Trigger Workflow Monthly",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            -2704,
            -240
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "daysInterval": 30,
                  "triggerAtHour": 10,
                  "triggerAtMinute": 30
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "d080eba8-b5b8-41de-83fa-b59fd506331e",
          "name": "Notify: Dependency Up-to-date",
          "type": "n8n-nodes-base.slack",
          "position": [
            -1456,
            -464
          ],
          "webhookId": "3f4d5f33-8f40-4fc7-a776-c4869a186499",
          "parameters": {
            "text": "=No update needed — {{$json.dependency}} is already latest ({{$json.current}})\n",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "C09S57E2JQ2",
              "cachedResultName": "n8n"
            },
            "otherOptions": {}
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.3
        },
        {
          "id": "49216e1d-6213-4c42-bb49-2a6a95814ff4",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -2784,
            -368
          ],
          "parameters": {
            "color": 7,
            "height": 304,
            "content": "## Trigger Workflow\n**The workflow starts on a schedule you choose (like a daily reminder).** \n"
          },
          "typeVersion": 1
        },
        {
          "id": "5a0229d9-3465-4e30-a07d-919cf2c5d066",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1536,
            -272
          ],
          "parameters": {
            "color": 7,
            "width": 736,
            "height": 368,
            "content": "## Apply Dependency and Status Update\n\n**Filter Major Updates** :This node filters out only the major updates that need to be applied to your project. Minor updates are ignored here.\n**Update build.gradle** : This node automatically updates the build.gradle file with the latest versions of the major dependencies. No manual editing needed. Makes sure your app uses the latest versions\n**Notify: Dependency Updated** : Shares an update summary—including which libraries were updated—straight to your team’s Slack channel, so everyone is kept in the loop\n"
          },
          "typeVersion": 1
        },
        {
          "id": "ce1f7c51-e5c2-4568-b50c-cef13c2d4697",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -2528,
            -368
          ],
          "parameters": {
            "color": 7,
            "width": 944,
            "height": 304,
            "content": "## Dependency Update Detection\nThis workflow section automatically checks your project’s libraries for available updates. It identifies major version changes, compares current and latest versions, and determines whether a library needs updating. Outdated dependencies are flagged for further action, while up-to-date libraries are skipped.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "7a3703cd-77f1-42fb-99fc-d26b0ca9d703",
          "name": "Sticky Note3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1536,
            -592
          ],
          "parameters": {
            "color": 7,
            "width": 368,
            "height": 304,
            "content": "## Notify: Dependency Uptodate\nSends a Slack message for libraries that are already up-to-date, so your team knows nothing needs to be done."
          },
          "typeVersion": 1
        },
        {
          "id": "dad20b56-55f6-4bd7-bf9c-33333452a3bc",
          "name": "Sticky Note4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -3456,
            -768
          ],
          "parameters": {
            "width": 448,
            "height": 560,
            "content": "## How it Works\nThis workflow automatically checks your project’s libraries for updates. It runs a Gradle command to list outdated dependencies, identifies major version changes, and compares current versus latest versions. Libraries that are already up-to-date are skipped, while outdated ones are flagged. Major updates can automatically modify your build.gradle file, and Slack messages notify your team about which dependencies were updated or already up-to-date. This ensures your project stays current without manual tracking.\n\n## Setup Steps\n**1.** Connect an SSH account to access your project folder.\n\n**2.** Configure the schedule trigger (e.g., every 30 days at 10:30 AM).\n\n**3.** Set up Slack credentials and select the channel for notifications.\n\n**4.** Confirm the workflow nodes are linked in this order: Run Gradle → Extract Updates → Mark Major → Check Version → Conditional → Update Gradle / Notify Slack.\n\n**5.** Activate the workflow to run automatically and start receiving update notifications."
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "8ea9f4fd-1bb9-460a-a4b1-ccbd176946fc",
      "connections": {
        "If same Version": {
          "main": [
            [
              {
                "node": "Notify: Dependency Up-to-date",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Filter Major Updates",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Check Same Version": {
          "main": [
            [
              {
                "node": "If same Version",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Mark Major Updates": {
          "main": [
            [
              {
                "node": "Check Same Version",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Update build.gradle": {
          "main": [
            [
              {
                "node": "Notify: Dependency Updated",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Filter Major Updates": {
          "main": [
            [
              {
                "node": "Update build.gradle",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Trigger Workflow Monthly": {
          "main": [
            [
              {
                "node": "Run Gradle Dependency Check",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Extract Dependency Updates": {
          "main": [
            [
              {
                "node": "Mark Major Updates",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Run Gradle Dependency Check": {
          "main": [
            [
              {
                "node": "Extract Dependency Updates",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 15,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 1
        },
        "n8n-nodes-base.ssh": {
          "count": 2
        },
        "n8n-nodes-base.code": {
          "count": 4
        },
        "n8n-nodes-base.slack": {
          "count": 2
        },
        "n8n-nodes-base.stickyNote": {
          "count": 5
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "WeblineIndia",
      "username": "weblineindia",
      "bio": "A Leading Software Engineering, Consulting & Outsourcing Services Company in USA & India serving Clients Globally since 1999.",
      "verified": true,
      "links": [
        "https://www.weblineindia.com/"
      ],
      "avatar": "https://gravatar.com/avatar/a229d43aefca4588581583c58bb37b4773aebbdf4c1fef86a08bb1d38eae91fa?r=pg&d=retro&size=200"
    },
    "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": 40,
        "icon": "file:slack.svg",
        "name": "n8n-nodes-base.slack",
        "codex": {
          "data": {
            "alias": [
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "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/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/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                },
                {
                  "url": "https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/slack/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Slack"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Slack",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 490,
        "icon": "fa:terminal",
        "name": "n8n-nodes-base.ssh",
        "codex": {
          "data": {
            "alias": [
              "remote"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.ssh/"
                }
              ]
            },
            "categories": [
              "Core Nodes",
              "Development"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": [
              "Helpers"
            ]
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "SSH",
          "color": "#000000"
        },
        "iconData": {
          "icon": "terminal",
          "type": "icon"
        },
        "displayName": "SSH",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "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": 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"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 16,
        "name": "DevOps"
      }
    ],
    "image": []
  }
}