{"workflow":{"id":14925,"name":"Sync self-hosted workflow backups to GitHub for version control","views":0,"recentViews":0,"totalViews":0,"createdAt":"2026-04-08T14:35:00.556Z","description":"Automatically back up and sync your n8n workflows to GitHub with unlimited version control. This workflow ensures your repository always reflects the latest state of your n8n instance by creating, updating, and deleting workflow files as needed.\n\nIdeal for developers, teams, and DevOps use cases where workflow backup, versioning, and audit tracking are important.\n\n## ♾️ Unlimited Version Control\n\nThis workflow enables unlimited version control using GitHub, solving the limitation of version history that is not available in the self-hosted free version of n8n.\n\nEvery workflow change is stored as a Git commit, allowing you to:\n\nTrack full history of changes\nRoll back to previous versions anytime\nMaintain a reliable audit trail\n## ⚡ Key Features\n🔄 Automatic Sync – Runs on a schedule to keep workflows updated\n🆕 Create New Workflows – Automatically adds new workflows to GitHub\n✏️ Update Only When Changed – Detects and updates modified workflows\n🧹 Auto Cleanup – Removes deleted or renamed workflows from GitHub\n⚡ Smart Diff Check – Skips unchanged workflows to avoid unnecessary commits\n🕒 Timestamped Commits – Clear and trackable commit history\n♾️ Unlimited Version Control – Store unlimited workflow versions in GitHub\n\n## 🛠️ How It Works\nFetch existing files from your GitHub repository\nRetrieve all workflows from your n8n instance via API\nCompare workflows using size-based change detection\nCreate or update workflow JSON files in GitHub\nRemove orphaned files (deleted or renamed workflows)\n## ⚙️ Setup Requirements \nGitHub Personal Access Token (with repo scope)\nn8n API Key (Settings → API)\nA GitHub repository for storing workflow backups\nUpdate GitHub nodes with your repository name and owner\nConfigure the schedule trigger as needed\n\n## 📁 File Naming\n\nWorkflows are stored as:\nworkflow-name.json\n(lowercase, hyphen-separated)\n\n## 🛡️ Safety Mechanism\n\nIncludes a safety check to prevent accidental deletion of all files if the n8n API returns zero workflows (e.g., due to an error).\n\n## 💡 Use Cases\nBackup and restore n8n workflows\nVersion control and change tracking\nTeam collaboration via GitHub\nCI/CD integration for workflow management\n\n## 📬 Support\nContact us for suggestions or support: support@ucartz.com","workflow":{"id":"31KRPNmyQMZIp6VO","meta":{"instanceId":"8092fa4049227323a149371608ea3866a55d8ecabf77a24abc6f810f767416b2"},"name":"n8n Workflows → GitHub Backup (Auto-Sync)","tags":[],"nodes":[{"id":"2048b09a-260d-42cd-b5b6-5848f3065788","name":"README","type":"n8n-nodes-base.stickyNote","position":[-592,1104],"parameters":{"color":7,"width":820,"height":700,"content":"# 🗂️ n8n → GitHub sync Workflow versioning\n\n## What this does\nAutomatically backs up all your n8n workflows as JSON files to a GitHub repository on a schedule.\n\n## Features\n- ✅ Creates new files for new workflows\n- ✅ Updates existing files when workflows change\n- ✅ Deletes files for workflows that were renamed or removed\n- ✅ Skips unchanged workflows (size-based diff check)\n- ✅ Timestamped commit messages\n\n## Setup (one-time)\n1. **GitHub credential** — create a Personal Access Token with `repo` scope and add it as a GitHub credential in n8n\n2. **n8n API credential** — generate an n8n API key under *Settings → API* and add it as an n8n credential\n3. **GitHub repo** — create an empty repository on GitHub (e.g. `your-username/n8n-backup`)\n4. Update all GitHub nodes: set your **owner** (GitHub username) and **repository** name\n5. Adjust the **Schedule Trigger** to your preferred backup interval (default: every hour)\n\n## Notes\n- Workflow files are named using the workflow name, lowercased and hyphenated (e.g. `my-workflow.json`)\n- The repo at the top of the canvas links to a working example\n\nContact us if you have any suggestions or need support for this workflow: support@ucartz.com"},"typeVersion":1},{"id":"9f9ad33e-c8fd-4cce-9fa9-3a50d7e89b29","name":"Sticky Note — Fetch GitHub Files","type":"n8n-nodes-base.stickyNote","position":[448,1088],"parameters":{"color":"#FFFFFF","width":532,"height":268,"content":"### 📥 Step 1 — Fetch current GitHub repo contents\nLists all files already in the GitHub backup repository.\nThis is used later to:\n- Detect which workflows are new vs existing\n- Identify files to delete (renamed/removed workflows)"},"typeVersion":1},{"id":"eacbafe7-43f0-42ec-bdcd-9a863cdb30c7","name":"Sticky Note — Fetch & Filter Workflows","type":"n8n-nodes-base.stickyNote","position":[1008,1088],"parameters":{"color":"#FFFFFF","width":820,"height":268,"content":"### ⚙️ Step 2 — Fetch & filter n8n workflows\nRetrieves all workflows from this n8n instance via API.\n\nThe **Filter Changed Files** node compares each workflow's byte size against the file size stored on GitHub. Only workflows that are **new or modified** pass through — skipping unchanged ones avoids unnecessary GitHub commits."},"typeVersion":1},{"id":"85b82ade-8598-45d2-a7e0-ced7fb165527","name":"Sticky Note — Commit to GitHub","type":"n8n-nodes-base.stickyNote","position":[288,1472],"parameters":{"color":"#F2F2F2","width":700,"height":300,"content":"### 💾 Step 3 — Commit files to GitHub\nFor each changed workflow:\n1. Build the target filename and commit timestamp\n2. Check if the file already exists in the repo\n3. **Update** it (edit) if it exists, or **Create** it (upload) if it's new\n\nFiles are named: `workflow-name.json` (lowercase, hyphenated)"},"typeVersion":1},{"id":"39d4e194-b7c1-4598-ada4-cf37d8739509","name":"Sticky Note — Cleanup Deleted Workflows","type":"n8n-nodes-base.stickyNote","position":[1008,1472],"parameters":{"color":"#FFFFFF","width":824,"height":304,"content":"### 🗑️ Step 4 — Clean up deleted/renamed workflows\nAfter committing, compare:\n- **GitHub files** (what's in the repo)\n- **n8n workflows** (what currently exists)\n\nAny GitHub file with **no matching n8n workflow** means the workflow was renamed or deleted — those files are removed from the repo automatically.\n\n⚠️ Safety: if n8n returns 0 workflows (e.g. API error), the deletion step is aborted to prevent wiping the entire repo."},"typeVersion":1},{"id":"402bcfba-fb37-41d1-862d-72a2633c7992","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[272,1264],"parameters":{"rule":{"interval":[{}]}},"typeVersion":1.2},{"id":"6f319899-5007-4c08-926c-fb948e2d1600","name":"List Files in GitHub Repo","type":"n8n-nodes-base.github","position":[544,1264],"webhookId":"6c5a413f-1a30-4ca9-8174-46e02f3ecf22","parameters":{"owner":{"__rl":true,"mode":"name","value":"YOUR_GITHUB_USERNAME"},"filePath":"=","resource":"file","operation":"list","repository":{"__rl":true,"mode":"list","value":"n8n_backup","cachedResultUrl":"https://github.com/YOUR_GITHUB_USERNAME/n8n_backup","cachedResultName":"n8n_backup"}},"credentials":{"githubApi":{"id":"Uq5YyACHjNGYTcJj","name":"GitHub account 3"}},"typeVersion":1,"alwaysOutputData":true},{"id":"149ce3df-686a-427e-b6f5-51b540db0d88","name":"Collect GitHub Filenames","type":"n8n-nodes-base.aggregate","position":[720,1264],"parameters":{"options":{},"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"name"}]}},"typeVersion":1},{"id":"fb0e9a96-84fc-43f2-b1e4-2b2946dfecb3","name":"Fetch All n8n Workflows","type":"n8n-nodes-base.n8n","position":[1104,1264],"parameters":{"filters":{},"requestOptions":{}},"credentials":{"n8nApi":{"id":"m2d0HT9UuFtzGfuP","name":"n8n account 3"}},"typeVersion":1},{"id":"0078cdf4-092d-45be-ba2a-b58c67948941","name":"Filter Changed/New Workflows","type":"n8n-nodes-base.code","position":[1296,1264],"parameters":{"jsCode":"// Compare each workflow's current size with its GitHub file size.\n// Only workflows that are NEW or have CHANGED content pass through.\n// This avoids creating unnecessary commits for unmodified workflows.\n\nconst githubFileMap = {};\n$('List Files in GitHub Repo').all().forEach(i => {\n  if (i.json.name) {\n    githubFileMap[i.json.name] = i.json.size;\n  }\n});\n\nconst results = $input.all().map(item => {\n  const workflowJson = JSON.stringify(item.json, null, 2);\n  const fileName = item.json.name.replace(/\\s+/g, '-').toLowerCase() + '.json';\n\n  const currentSize = Buffer.byteLength(workflowJson, 'utf8');\n  const githubSize = githubFileMap[fileName];\n\n  const isNew = githubSize === undefined;\n  const changed = isNew || currentSize !== githubSize;\n\n  return {\n    json: {\n      ...item.json,\n      _fileName: fileName,\n      _currentSize: currentSize,\n      _githubSize: githubSize ?? null,\n      _changed: changed,\n      _isNew: isNew\n    },\n    pairedItem: item.pairedItem\n  };\n});\n\n// Only return workflows that need to be committed\nreturn results.filter(r => r.json._changed || r.json._isNew);"},"typeVersion":2},{"id":"c0ccceb3-807e-4f95-a55a-21294d1af105","name":"Convert Workflow to JSON File","type":"n8n-nodes-base.convertToFile","position":[1472,1264],"parameters":{"mode":"each","options":{"format":true},"operation":"toJson"},"typeVersion":1.1},{"id":"c028c372-7599-409f-b32b-c41dfd81d8ca","name":"Encode as Base64","type":"n8n-nodes-base.extractFromFile","position":[1664,1264],"parameters":{"options":{},"operation":"binaryToPropery"},"typeVersion":1},{"id":"f5e69083-0dbf-46a1-877e-5c030e9dd75d","name":"Build Filename & Commit Date","type":"n8n-nodes-base.set","position":[304,1680],"parameters":{"options":{},"assignments":{"assignments":[{"id":"fe4a36ef-9f04-40e3-99bd-cc517a49b440","name":"commitDate","type":"string","value":"={{ $now.format('dd-MM-yyyy/H:mm') }}"},{"id":"b0fe1bcc-e79c-4a6b-b8b4-44222c8bf4e8","name":"fileName","type":"string","value":"={{ $('Fetch All n8n Workflows').item.json.name.replace(/\\s+/g, '-').toLowerCase() }}.json"}]}},"typeVersion":3.4},{"id":"930f04fd-1707-475e-881a-a6fc1c1485cb","name":"File Already Exists in Repo?","type":"n8n-nodes-base.if","position":[480,1680],"parameters":{"conditions":{"string":[{"value1":"={{ $('Collect GitHub Filenames').item.json.name }}","value2":"={{ $('Fetch All n8n Workflows').item.json.name.replace(/\\s+/g, '-').toLowerCase() }}.json","operation":"contains"}]}},"typeVersion":1},{"id":"d70e8cd5-e429-4238-9917-1c80d4f1f20f","name":"Update Existing File","type":"n8n-nodes-base.github","position":[880,1680],"webhookId":"b877ef15-f96f-457b-8cac-5107a6b0f40f","parameters":{"owner":{"__rl":true,"mode":"name","value":"YOUR_GITHUB_USERNAME"},"filePath":"={{ $('Fetch All n8n Workflows').item.json.name.replace(/\\s+/g, '-').toLowerCase() }}.json","resource":"file","operation":"edit","repository":{"__rl":true,"mode":"list","value":"n8n_backup","cachedResultUrl":"https://github.com/YOUR_GITHUB_USERNAME/n8n_backup","cachedResultName":"n8n_backup"},"fileContent":"={{ $('Encode as Base64').item.json.data }}","commitMessage":"=Sync-{{ $('Build Filename & Commit Date').item.json.commitDate }}"},"credentials":{"githubApi":{"id":"Uq5YyACHjNGYTcJj","name":"GitHub account 3"}},"typeVersion":1},{"id":"1c456abc-750e-4892-b025-2cfdfdcbe77b","name":"Create New File","type":"n8n-nodes-base.github","position":[688,1680],"webhookId":"207cadf0-dfdd-41d3-be32-806b7dfac41c","parameters":{"owner":{"__rl":true,"mode":"name","value":"YOUR_GITHUB_USERNAME"},"filePath":"={{ $('Fetch All n8n Workflows').item.json.name.replace(/\\s+/g, '-').toLowerCase() }}.json","resource":"file","repository":{"__rl":true,"mode":"list","value":"n8n_backup","cachedResultUrl":"https://github.com/YOUR_GITHUB_USERNAME/n8n_backup","cachedResultName":"n8n_backup"},"fileContent":"={{ $('Encode as Base64').item.json.data }}","commitMessage":"=Sync-{{ $('Build Filename & Commit Date').item.json.commitDate }}"},"credentials":{"githubApi":{"id":"Uq5YyACHjNGYTcJj","name":"GitHub account 3"}},"typeVersion":1},{"id":"67e962f0-e8ec-4c13-be19-e063d4cd756d","name":"Find Orphaned Files to Delete","type":"n8n-nodes-base.code","position":[1168,1680],"parameters":{"jsCode":"// Find GitHub files that no longer have a matching n8n workflow.\n// These are workflows that were renamed or deleted in n8n.\n// Safety: if n8n returned 0 workflows, abort to avoid mass deletion.\n\nconst githubFiles = $('List Files in GitHub Repo').all()\n  .map(i => i.json.name)\n  .filter(Boolean);\n\nconst n8nWorkflowFiles = $('Fetch All n8n Workflows').all().map(i => {\n  return i.json.name.replace(/\\s+/g, '-').toLowerCase() + '.json';\n});\n\nif (n8nWorkflowFiles.length === 0) {\n  throw new Error('Safety abort: n8n returned 0 workflows. Refusing to delete any GitHub files.');\n}\n\nif (githubFiles.length === 0) {\n  return [{ json: { skipped: true, reason: 'GitHub repo is empty — nothing to delete.' } }];\n}\n\nconst filesToDelete = githubFiles.filter(f => !n8nWorkflowFiles.includes(f));\n\nif (filesToDelete.length === 0) {\n  return [{ json: { skipped: true, reason: 'All GitHub files match existing workflows. Nothing to delete.' } }];\n}\n\nreturn filesToDelete.map(f => ({ json: { path: f, skipped: false } }));"},"typeVersion":2},{"id":"cd2aaf3d-5af3-4732-8a95-7d9844871ef2","name":"Any Files to Delete?","type":"n8n-nodes-base.if","position":[1360,1680],"parameters":{"conditions":{"boolean":[{"value1":"={{ $json.skipped }}"}]}},"typeVersion":1},{"id":"b9a2a6fd-2e83-4bc0-b5c4-bd4ee7713319","name":"Delete Orphaned File","type":"n8n-nodes-base.github","position":[1632,1680],"webhookId":"4c9b3fa2-1af8-4243-85eb-83aa9d7b4ffe","parameters":{"owner":{"__rl":true,"mode":"name","value":"YOUR_GITHUB_USERNAME"},"filePath":"={{ $json.path }}","resource":"file","operation":"delete","repository":{"__rl":true,"mode":"list","value":"n8n_backup","cachedResultUrl":"https://github.com/YOUR_GITHUB_USERNAME/n8n_backup","cachedResultName":"n8n_backup"},"commitMessage":"=chore: remove deleted workflow {{ $json.path }}"},"credentials":{"githubApi":{"id":"Uq5YyACHjNGYTcJj","name":"GitHub account 3"}},"typeVersion":1.1},{"id":"ecdb18a9-8ec1-44b0-a338-f89e37498bc8","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1872,1088],"parameters":{"width":320,"height":272,"content":"## 🔧 Configuration Required — GitHub Username\n\nSearch for all GitHub nodes in this workflow (List Files in GitHub Repo, Create New File, Update Existing File, Delete Orphaned File) and replace the owner field value YOUR_GITHUB_USERNAME with your actual GitHub username. The same username should also be reflected in the repository URL of each node."},"typeVersion":1}],"active":true,"pinData":{},"settings":{"binaryMode":"separate","executionOrder":"v1"},"versionId":"40daf65b-515b-459e-8374-f9813d6beb0a","connections":{"Encode as Base64":{"main":[[{"node":"Build Filename & Commit Date","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"List Files in GitHub Repo","type":"main","index":0}]]},"Any Files to Delete?":{"main":[[{"node":"Delete Orphaned File","type":"main","index":0}]]},"Update Existing File":{"main":[[{"node":"Find Orphaned Files to Delete","type":"main","index":0}]]},"Fetch All n8n Workflows":{"main":[[{"node":"Filter Changed/New Workflows","type":"main","index":0}]]},"Collect GitHub Filenames":{"main":[[{"node":"Fetch All n8n Workflows","type":"main","index":0}]]},"List Files in GitHub Repo":{"main":[[{"node":"Collect GitHub Filenames","type":"main","index":0}]]},"Build Filename & Commit Date":{"main":[[{"node":"File Already Exists in Repo?","type":"main","index":0}]]},"File Already Exists in Repo?":{"main":[[{"node":"Update Existing File","type":"main","index":0}],[{"node":"Create New File","type":"main","index":0}]]},"Filter Changed/New Workflows":{"main":[[{"node":"Convert Workflow to JSON File","type":"main","index":0}]]},"Convert Workflow to JSON File":{"main":[[{"node":"Encode as Base64","type":"main","index":0}]]},"Find Orphaned Files to Delete":{"main":[[{"node":"Any Files to Delete?","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":20,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.n8n":{"count":1},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.github":{"count":4},"n8n-nodes-base.aggregate":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.convertToFile":{"count":1},"n8n-nodes-base.extractFromFile":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Ucartz Online","username":"ucartz","bio":"Ucartz specializes in server infrastructure, cloud hosting, and workflow automation. We build scalable n8n automations, API integrations, and AI-powered workflows that help businesses connect systems, automate processes, and reduce manual work.","verified":false,"links":["https://www.ucartz.com"],"avatar":"https://gravatar.com/avatar/36b6ebcee3af6aa6b878a9f454df31a69ac4938094d7d932b148b1f8f6786ce7?r=pg&d=retro&size=200"},"nodes":[{"id":16,"icon":"file:github.svg","name":"n8n-nodes-base.github","codex":{"data":{"resources":{"generic":[{"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/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"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-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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.github/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/github/"}]},"categories":["Development"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"GitHub"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC4wMTY1IDBDOC45NDc5MSAwIDAgOS4wMTM4OCAwIDIwLjE2NTNDMCAyOS4wNzkyIDUuNzMzMjQgMzYuNjI0NiAxMy42ODY4IDM5LjI5NTJDMTQuNjgxMiAzOS40OTYgMTUuMDQ1NCAzOC44NjEzIDE1LjA0NTQgMzguMzI3NEMxNS4wNDU0IDM3Ljg1OTkgMTUuMDEyNiAzNi4yNTc1IDE1LjAxMjYgMzQuNTg3OUM5LjQ0NDUgMzUuNzkgOC4yODQ5OCAzMi4xODQxIDguMjg0OTggMzIuMTg0MUM3LjM5MDE1IDI5Ljg0NyA2LjA2NDI5IDI5LjI0NjMgNi4wNjQyOSAyOS4yNDYzQzQuMjQxODUgMjguMDExIDYuMTk3MDQgMjguMDExIDYuMTk3MDQgMjguMDExQzguMjE4NjEgMjguMTQ0NiA5LjI3OTM4IDMwLjA4MSA5LjI3OTM4IDMwLjA4MUMxMS4wNjg2IDMzLjE1MjIgMTMuOTUxOCAzMi4yODQ0IDE1LjExMTggMzEuNzUwMkMxNS4yNzczIDMwLjQ0ODEgMTUuODA3OSAyOS41NDY3IDE2LjM3MTMgMjkuMDQ2QzExLjkzMDMgMjguNTc4NSA3LjI1NzgxIDI2Ljg0MjUgNy4yNTc4MSAxOS4wOTY3QzcuMjU3ODEgMTYuODkzMiA4LjA1MjY3IDE1LjA5MDUgOS4zMTIxNiAxMy42ODg0QzkuMTEzNDQgMTMuMTg3NyA4LjQxNzMyIDExLjExNzQgOS41MTEyOCA4LjM0NjQ0QzkuNTExMjggOC4zNDY0NCAxMS4yMDE0IDcuODEyMTcgMTUuMDEyMiAxMC40MTY0QzE2LjY0MzggOS45NzQ5NSAxOC4zMjYzIDkuNzUwNCAyMC4wMTY1IDkuNzQ4NTFDMjEuNzA2NyA5Ljc0ODUxIDIzLjQyOTUgOS45ODI0NiAyNS4wMjA1IDEwLjQxNjRDMjguODMxNyA3LjgxMjE3IDMwLjUyMTggOC4zNDY0NCAzMC41MjE4IDguMzQ2NDRDMzEuNjE1OCAxMS4xMTc0IDMwLjkxOTIgMTMuMTg3NyAzMC43MjA1IDEzLjY4ODRDMzIuMDEzMiAxNS4wOTA1IDMyLjc3NTMgMTYuODkzMiAzMi43NzUzIDE5LjA5NjdDMzIuNzc1MyAyNi44NDI1IDI4LjEwMjggMjguNTQ0OSAyMy42Mjg3IDI5LjA0NkMyNC4zNTggMjkuNjgwMiAyNC45ODczIDMwLjg4MiAyNC45ODczIDMyLjc4NTFDMjQuOTg3MyAzNS40ODkzIDI0Ljk1NDUgMzcuNjU5NiAyNC45NTQ1IDM4LjMyN0MyNC45NTQ1IDM4Ljg2MTMgMjUuMzE5MiAzOS40OTYgMjYuMzEzMiAzOS4yOTU2QzM0LjI2NjcgMzYuNjI0MiAzOS45OTk5IDI5LjA3OTIgMzkuOTk5OSAyMC4xNjUzQzQwLjAzMjcgOS4wMTM4OCAzMS4wNTIgMCAyMC4wMTY1IDBaIiBmaWxsPSIjMjQyOTJGIi8+Cjwvc3ZnPgo="},"displayName":"GitHub","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"}]},{"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":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":826,"icon":"file:n8n.svg","name":"n8n-nodes-base.n8n","codex":{"data":{"alias":["Workflow","Execution"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.n8n/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/api/authentication/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Other Trigger Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"n8n"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMzAgMTIwIj48cGF0aCBmaWxsPSIjRUE0QjcxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMDQgNDhjLTExLjE4MyAwLTIwLjU4LTcuNjQ5LTIzLjI0NC0xOGgtMjcuNTA4YTEyIDEyIDAgMCAwLTExLjgzNiAxMC4wMjdsLS45ODcgNS45MTlBMjMuOTQgMjMuOTQgMCAwIDEgMTMyLjYyNiA2MGEyMy45NCAyMy45NCAwIDAgMSA3Ljc5OSAxNC4wNTRsLjk4NyA1LjkxOUExMiAxMiAwIDAgMCAxNTMuMjQ4IDkwaDMuNTA4QzE1OS40MiA3OS42NDkgMTY4LjgxNyA3MiAxODAgNzJjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0cy0xMC43NDUgMjQtMjQgMjRjLTExLjE4MyAwLTIwLjU4LTcuNjQ5LTIzLjI0NC0xOGgtMy41MDhjLTExLjczMiAwLTIxLjc0NC04LjQ4Mi0yMy42NzMtMjAuMDU0bC0uOTg3LTUuOTE5QTEyIDEyIDAgMCAwIDExNi43NTIgNjZoLTkuNTA4QzEwNC41OCA3Ni4zNTEgOTUuMTgzIDg0IDg0IDg0cy0yMC41OC03LjY0OS0yMy4yNDQtMThINDcuMjQ0QzQ0LjU4IDc2LjM1MSAzNS4xODMgODQgMjQgODQgMTAuNzQ1IDg0IDAgNzMuMjU1IDAgNjBzMTAuNzQ1LTI0IDI0LTI0YzExLjE4MyAwIDIwLjU4IDcuNjQ5IDIzLjI0NCAxOGgxMy41MTJDNjMuNDIgNDMuNjQ5IDcyLjgxNyAzNiA4NCAzNnMyMC41OCA3LjY0OSAyMy4yNDQgMThoOS41MDhhMTIgMTIgMCAwIDAgMTEuODM2LTEwLjAyN2wuOTg3LTUuOTE5QzEzMS41MDQgMjYuNDgyIDE0MS41MTYgMTggMTUzLjI0OCAxOGgyNy41MDhDMTgzLjQyIDcuNjQ5IDE5Mi44MTcgMCAyMDQgMGMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjRzLTEwLjc0NSAyNC0yNCAyNG0wLTEyYzYuNjI3IDAgMTItNS4zNzMgMTItMTJzLTUuMzczLTEyLTEyLTEyLTEyIDUuMzczLTEyIDEyIDUuMzczIDEyIDEyIDEyTTI0IDcyYzYuNjI3IDAgMTItNS4zNzMgMTItMTJzLTUuMzczLTEyLTEyLTEyLTEyIDUuMzczLTEyIDEyIDUuMzczIDEyIDEyIDEybTcyLTEyYzAgNi42MjctNS4zNzMgMTItMTIgMTJzLTEyLTUuMzczLTEyLTEyIDUuMzczLTEyIDEyLTEyIDEyIDUuMzczIDEyIDEybTk2IDM2YzAgNi42MjctNS4zNzMgMTItMTIgMTJzLTEyLTUuMzczLTEyLTEyIDUuMzczLTEyIDEyLTEyIDEyIDUuMzczIDEyIDEyIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4="},"displayName":"n8n","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"},{"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"}]},{"id":1234,"icon":"file:convertToFile.svg","name":"n8n-nodes-base.convertToFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","encode","encoding","Move Binary Data","Binary","File","JSON","HTML","ICS","iCal","RTF","64","Base64"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Convert to File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjc2MTkgMkMxMy4yNDM3IDIgMTIuODIzNiAyLjQyMDA5IDEyLjgyMzYgMi45MzgzMVYxNS4yNTI2QzEzLjMxOTkgMTUuNDY0MyAxMy43ODUxIDE1Ljc3MiAxNC4xOTEgMTYuMTc1N0wyMS4yMjgzIDIzLjE3MzlDMjIuMDU0OCAyMy45OTU4IDIyLjUxOTUgMjUuMTEzMiAyMi41MTk1IDI2LjI3ODhDMjIuNTE5NSAyNy40NDQzIDIyLjA1NDggMjguNTYxOCAyMS4yMjgzIDI5LjM4MzdMMTQuMTkxIDM2LjM4MTlDMTMuNzg1IDM2Ljc4NTYgMTMuMzE5OSAzNy4wOTMyIDEyLjgyMzYgMzcuMzA1VjM3LjM1MjdDMTIuODIzNiAzNy44NzA5IDEzLjI0MzcgMzguMjkxIDEzLjc2MTkgMzguMjkxSDM5LjA2MTdDMzkuNTc5OSAzOC4yOTEgNDAgMzcuODcwOSA0MCAzNy4zNTI3TDQwIDE1Ljc5NEgyNy4xNDQzQzI2LjYyNjEgMTUuNzk0IDI2LjIwNiAxNS4zNzM5IDI2LjIwNiAxNC44NTU3VjJIMTMuNzYxOVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTI4Ljg2NDUgMkMyOC43NzgxIDIgMjguNzA4MSAyLjA3MDAyIDI4LjcwODEgMi4xNTYzOVYxMi44MjI3QzI4LjcwODEgMTMuMDgxOCAyOC45MTgyIDEzLjI5MTkgMjkuMTc3MyAxMy4yOTE5SDM5Ljg0MzZDMzkuOTMgMTMuMjkxOSA0MCAxMy4yMjE5IDQwIDEzLjEzNTVMNDAgMTIuNjI2M0M0MCAxMi4zNzc4IDM5LjkwMTQgMTIuMTM5NSAzOS43MjYgMTEuOTYzNkwzMC4wNjEgMi4yNzU2MUMyOS44ODUgMi4wOTkxNiAyOS42NDYgMiAyOS4zOTY3IDJIMjguODY0NVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTkuNzcyNjggMzQuNjAwM0M5LjA0MTg2IDMzLjg2NTQgOS4wNDUxNyAzMi42NzcyIDkuNzgwMDcgMzEuOTQ2NEwxMy42MzE1IDI4LjExNjNMMC45MzgzMTEgMjguMTE2M0MwLjQyMDA5NiAyOC4xMTYzIC0yLjI2NTE5ZS0wOCAyNy42OTYyIDAgMjcuMTc4TDguMjAyOTdlLTA4IDI1LjMwMTRDMS4wNDY4MmUtMDcgMjQuNzgzMiAwLjQyMDA5NSAyNC4zNjMxIDAuOTM4MzExIDI0LjM2MzFIMTMuNTUyOUw5Ljc4MDA3IDIwLjYxMTJDOS4wNDUxNyAxOS44ODA0IDkuMDQxODYgMTguNjkyMiA5Ljc3MjY4IDE3Ljk1NzNDMTAuNTAzNSAxNy4yMjI0IDExLjY5MTcgMTcuMjE5MSAxMi40MjY2IDE3Ljk0OTlMMTkuNDYzOSAyNC45NDgxQzE5LjgxODEgMjUuMzAwNCAyMC4wMTczIDI1Ljc3OTMgMjAuMDE3MyAyNi4yNzg4QzIwLjAxNzMgMjYuNzc4MyAxOS44MTgxIDI3LjI1NzIgMTkuNDYzOSAyNy42MDk1TDEyLjQyNjYgMzQuNjA3N0MxMS42OTE3IDM1LjMzODUgMTAuNTAzNSAzNS4zMzUyIDkuNzcyNjggMzQuNjAwM1oiIGZpbGw9IiMzQTQyRTkiLz4KPC9zdmc+Cg=="},"displayName":"Convert to File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1236,"icon":"file:aggregate.svg","name":"n8n-nodes-base.aggregate","codex":{"data":{"alias":["Aggregate","Combine","Flatten","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Aggregate"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="},"displayName":"Aggregate","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":16,"name":"DevOps"}],"image":[]}}