{"workflow":{"id":12721,"name":"Back up and restore n8n workflows with GitHub sync","views":171,"recentViews":0,"totalViews":171,"createdAt":"2026-01-15T09:03:56.419Z","description":"# n8n Workflows GitHub Manager\n\n&gt; A comprehensive **n8n workflow** that provides complete bidirectional sync between your n8n instance and GitHub - automatically backs up all your workflows with intelligent change detection AND restores them when needed.\n\nThis workflow combines two powerful features in one:\n* **Backup**: Automatically detects new, edited, renamed, and deleted workflows in your n8n instance, then syncs them to GitHub with smart commit messages and an index tracking system.\n* **Restore**: Easily restore all workflows from your GitHub repository back to n8n - perfect for disaster recovery, new instance setup, or environment cloning.\n\n---\n\n## How It Works\n\n### 🔄 Backup Mode (Automatic)\n\n1. **Trigger**: Runs automatically every day at 7 PM UTC (or manually when triggered via the Schedule Trigger).\n2. **Get/Create Index**: Attempts to fetch `index.json` from your GitHub repository.\n   * **If found** → Downloads and parses it.\n   * **If not found** → Creates a new empty index file and waits 3 seconds for GitHub to process.\n3. **Fetch All Workflows**: Retrieves all workflows from your n8n instance via the n8n API.\n4. **Smart Comparison**: The \"C,E,D Checker\" (Create, Edit, Delete) analyzes differences:\n   * **CREATE** → New workflow not in index.\n   * **RENAME** → Workflow name changed (deletes old file, creates new one).\n   * **EDIT** → Existing workflow (flagged for content comparison).\n   * **DELETE** → Workflow removed from n8n but still in GitHub.\n   * **INDEX UPDATE** → Triggered if any changes detected.\n5. **Route Actions**: Switch node routes each action to the appropriate branch:\n   * **Create Branch** → Creates new workflow files in GitHub.\n   * **Edit Branch** → Performs smart edit detection:\n     * Fetches current file from GitHub.\n     * Compares GitHub version vs. n8n version (normalized JSON).\n     * **Only commits if content actually changed** (avoids timestamp-only updates).\n   * **Delete Branch** → Removes workflow files from GitHub.\n   * **Update Index Branch** → Updates `index.json` with latest mappings.\n6. **Commit Messages**: Auto-generated with format: `[Workflow Name] (Action) YYYY-MM-DD`\n\n### ⬇️ Restore Mode (Manual)\n\n1. **Trigger**: Manually execute via the \"When clicking 'Execute workflow'\" manual trigger.\n2. **Set GitHub Details**: Configure your repository owner and name.\n3. **List Workflow Files**: Fetches all workflow JSON files from the `workflows/` folder in your GitHub repository.\n   * **If folder not found** → Workflow stops gracefully (ensure backup ran at least once first).\n4. **Loop Through Files**: Sequentially processes each workflow file:\n   * Downloads the JSON content from GitHub.\n   * Creates the workflow in your n8n instance via the n8n API.\n5. **Sequential Processing**: Handles one workflow at a time to prevent conflicts and respect rate limits.\n6. **Result**: All workflows from GitHub are restored to your n8n instance.\n\n---\n\n## Requirements\n\n* **GitHub OAuth2 Credentials**:\n  * Go to [GitHub Developer Settings](https://github.com/settings/developers) → OAuth Apps → New OAuth App.\n  * Set **Authorization callback URL** to your n8n instance URL (e.g., `https://your-n8n.com/rest/oauth2-credential/callback`).\n  * Copy **Client ID** and **Client Secret**.\n  * Add as OAuth2 credential in n8n (*Credentials → New → GitHub OAuth2*).\n\n* **GitHub Repository**:\n  * Create a new repository (public or private).\n  * Note your **username** (repo owner) and **repository name**.\n\n* **n8n API Credentials**:\n  * In your n8n instance → *Settings → API* → Create new API key.\n  * Add as n8n API credential in the workflow.\n\n---\n\n## How to Use\n\n### Initial Setup\n\n1. **Import the Workflow**:\n   * Copy the provided JSON file.\n   * In your n8n instance → click **Import Workflow** → paste or upload the JSON.\n\n2. **Create GitHub Repository**:\n   * Go to GitHub → Create a new repository (e.g., `n8n-workflows-manager`).\n   * Leave it empty (no README, no .gitignore).\n\n3. **Set Up GitHub OAuth2**:\n   * In n8n → *Credentials → New → GitHub OAuth2*.\n   * Fill in:\n     * **Client ID** → from GitHub OAuth App.\n     * **Client Secret** → from GitHub OAuth App.\n   * Click **Connect my account** and authorize.\n\n4. **Set Up n8n API Credentials**:\n   * In n8n → *Settings → API* → Create new API key.\n   * Copy the key.\n   * In workflow → *Credentials → New → n8n API* → paste the key.\n   * Set **Base URL** to your n8n instance (e.g., `https://your-n8n.com`).\n\n5. **Configure Repository Details**:\n   * Find **both** \"Set Github Data\" nodes in the workflow (one for backup, one for restore).\n   * Edit the assignments in each:\n     * `repo_owner`: Replace `\"your-github-username\"` with your GitHub username.\n     * `repo_name`: Replace `\"your-github-repository-name\"` with your repository name.\n\n6. **Connect Credentials to Nodes**:\n   * Open each **GitHub node** (there are 8 total):\n     * **Backup section**: Create Index File, Get Download Url for Index File, Create New Files, Update Index File, Get Download Url for Github File, Delete Files, Edit Files\n     * **Restore section**: List Workflow Files\n   * Set **Credential for GitHub OAuth2** to the one you created.\n   * Open the **n8n API nodes** (Get All Workflows, Create Workflow) → Set **Credential for n8n API** to the one you created.\n\n### Using Backup Mode\n\n7. **Test Backup**:\n   * Click the **\"Schedule Trigger\"** node at the top of the workflow.\n   * Click **\"Test workflow\"**.\n   * Monitor execution → All nodes in the backup section should turn green.\n   * Check your GitHub repository → Should see `index.json` and `workflows/` folder with your workflows.\n\n8. **Activate for Auto Backup**:\n   * Once tested successfully, toggle the workflow to **Active**.\n   * It will now run automatically every day at 7 PM UTC.\n\n### Using Restore Mode\n\n9. **Test Restore** (only after you have backups in GitHub):\n   * Click the **\"When clicking 'Execute workflow'\"** manual trigger node at the bottom.\n   * Click **\"Test workflow\"**.\n   * Monitor execution → All nodes in the restore section should turn green.\n   * Check your n8n workflows list → All workflows from GitHub should now be present.\n\n10. **When to Use Restore**:\n    * Setting up a new n8n instance.\n    * Recovering after data loss.\n    * Cloning workflows to another environment.\n    * Rolling back to a previous state (manually download older commits from GitHub first).\n\n---\n\n## Important Notes\n\n* **Smart Edit Detection**: Uses normalized JSON comparison to avoid unnecessary commits when only timestamps change.\n* **Credentials**: Credential IDs are included but not actual secrets. You must reconnect credentials after restore.\n* **Restored Workflows**: Created as new workflows with new IDs in **inactive** state by default.\n* **File Structure**: `index.json` tracks all workflows; `workflows/` folder contains individual workflow files.\n* **Security**: Use a private repository if workflows contain sensitive data. Credential secrets are never backed up.\n\n---\n\n## Customization\n\n* **Change Schedule**: Edit \"Schedule Trigger\" node → modify `triggerAtHour` (default: 19 = 7 PM UTC)\n* **File Path**: Modify `filePath` in GitHub nodes to change storage location\n* **Notifications**: Add email/notification nodes to get alerts on backup completion\n* **Selective Restore**: Add IF nodes to filter which workflows to restore\n* **Multiple Repos**: Duplicate workflow for separate prod/dev backups\n\n---\n\n**Author:** Muhammad Anas Farooq","workflow":{"meta":{"instanceId":"0cf1013c00750bfab7ca7f6a76bf0e8c2407d7a4a9a4e66c4888ec456837f043"},"nodes":[{"id":"66f1d868-3d2f-4d01-a44d-65a1683c60a2","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[960,-336],"parameters":{"rule":{"interval":[{"triggerAtHour":19}]}},"typeVersion":1.2},{"id":"6683f526-0831-457c-9b3d-9149b6aa72c4","name":"Create Index File","type":"n8n-nodes-base.github","position":[1808,-176],"webhookId":"b1c00612-30d6-402d-a737-b9d06e473053","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').item.json.repo_owner }}"},"filePath":"=index.json","resource":"file","repository":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').item.json.repo_name }}"},"fileContent":"{}","commitMessage":"=Index (Created) {{ new Date().toISOString().split('T')[0] }}","authentication":"oAuth2"},"credentials":{"githubOAuth2Api":{"id":"UBHtZxEV1OPvxU9F","name":"GitHub account"}},"retryOnFail":true,"typeVersion":1.1},{"id":"ef2313ca-a8d4-4518-bd7e-72500c90a6bc","name":"Get Download Url for Index File","type":"n8n-nodes-base.github","onError":"continueErrorOutput","position":[1360,-336],"webhookId":"6e7d3020-5558-4a80-9647-3c5a9de59a29","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $json.repo_owner }}"},"filePath":"index.json","resource":"file","operation":"get","repository":{"__rl":true,"mode":"name","value":"={{ $json.repo_name }}"},"authentication":"oAuth2","asBinaryProperty":false,"additionalParameters":{}},"credentials":{"githubOAuth2Api":{"id":"UBHtZxEV1OPvxU9F","name":"GitHub account"}},"retryOnFail":true,"typeVersion":1.1},{"id":"8643952a-3860-451c-96e3-4e4271c2bec0","name":"Get Index File Content","type":"n8n-nodes-base.httpRequest","position":[1584,-352],"parameters":{"url":"={{ $json.download_url }}","options":{}},"retryOnFail":true,"typeVersion":4.2},{"id":"b4d05bc7-36de-4cf3-9ff0-dac7faff26a2","name":"Index File Not Found","type":"n8n-nodes-base.if","position":[1584,-160],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"3e028766-cfb2-4464-9a97-b0845f082ed4","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.error }}","rightValue":"=The resource you are requesting could not be found"}]}},"typeVersion":2.2},{"id":"f5544061-062b-4a5a-b98b-f8c274e78104","name":"Set Github Data","type":"n8n-nodes-base.set","position":[1168,-336],"parameters":{"options":{},"assignments":{"assignments":[{"id":"452d7af0-1a81-4426-a171-0379eb83f575","name":"repo_owner","type":"string","value":"your-github-username"},{"id":"eed5e0e0-4a5e-4df9-adec-a266d175e40d","name":"repo_name","type":"string","value":"your-github-repository-name"}]}},"typeVersion":3.4},{"id":"dfd491c1-6c20-4c99-801a-867d5b1e6376","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[992,752],"parameters":{},"typeVersion":1},{"id":"fb17c3b6-5501-4f1f-bd78-10b39d3cc135","name":"Wait","type":"n8n-nodes-base.wait","position":[2016,-176],"webhookId":"6d7f1445-a6c5-4ebb-bae3-a4ebbeed5f95","parameters":{"amount":3},"typeVersion":1.1},{"id":"8d2a68af-641f-43ff-96c0-5e4d1a3d419f","name":"Get All Workflows","type":"n8n-nodes-base.n8n","position":[1792,-352],"parameters":{"filters":{"excludePinnedData":true},"requestOptions":{}},"credentials":{"n8nApi":{"id":"K60r3zn5x560PMdo","name":"Github Backup"}},"executeOnce":false,"retryOnFail":true,"typeVersion":1,"alwaysOutputData":true},{"id":"ca083a23-d014-4623-8375-a58ed5cc4a08","name":"C,E,D Checker","type":"n8n-nodes-base.code","position":[2016,-352],"parameters":{"jsCode":"// =======================\n// READ INPUTS\n// =======================\n\n// Current workflows from n8n\nconst workflows = $input.all()\n  .map(i => i.json)\n  .filter(w => w && typeof w.id === 'string' && typeof w.name === 'string');\n\nconst indexData = JSON.parse($('Get Index File Content').first()?.json?.data || '{}');\n\n// =======================\n// PREPARE STATE\n// =======================\n\nconst results = [];\nconst updatedIndex = { ...indexData };\n\n// Track only REAL workflow IDs from index\nconst existingIds = new Set(Object.keys(indexData));\n\n// =======================\n// STEP 1: CREATE / EDIT / RENAME\n// =======================\n\nfor (const workflow of workflows) {\n  const id = workflow.id;\n  const name = workflow.name || 'unnamed';\n  const path = `workflows/${name}.json`;\n\n  // -------- CREATE --------\n  if (!indexData[id]) {\n    updatedIndex[id] = { name, file_path: path };\n\n    results.push({\n      status: 'create',\n      workflowId: id,\n      name,\n      path,\n      data: workflow\n    });\n\n    continue;\n  }\n\n  // -------- RENAME --------\n  if (indexData[id].name !== name) {\n    // delete old file\n    results.push({\n      status: 'delete',\n      workflowId: id,\n      name: indexData[id].name,\n      path: indexData[id].file_path\n    });\n\n    // create new file\n    results.push({\n      status: 'create',\n      workflowId: id,\n      name,\n      path,\n      data: workflow\n    });\n\n    updatedIndex[id] = { name, file_path: path };\n    existingIds.delete(id);\n    continue;\n  }\n\n  // -------- EDIT --------\n  results.push({\n    status: 'edit',\n    workflowId: id,\n    name,\n    path: indexData[id].file_path,\n    data: workflow\n  });\n\n  existingIds.delete(id);\n}\n\n// =======================\n// STEP 2: DELETE REMOVED WORKFLOWS\n// =======================\n\nfor (const id of existingIds) {\n  results.push({\n    status: 'delete',\n    workflowId: id,\n    name: indexData[id].name,\n    path: indexData[id].file_path\n  });\n\n  delete updatedIndex[id];\n}\n\n// =======================\n// STEP 3: INDEX UPDATE (ONLY IF CHANGED)\n// =======================\n\nif (JSON.stringify(indexData) !== JSON.stringify(updatedIndex)) {\n  results.push({\n    status: 'index',\n    data: updatedIndex\n  });\n}\n\n// =======================\n// OUTPUT FOR N8N\n// =======================\n\nreturn results.map(r => ({ json: r }));"},"typeVersion":2},{"id":"2ed6483e-158f-4865-aa19-8d9a6a9ad9a1","name":"Create New Files","type":"n8n-nodes-base.github","position":[2544,-624],"webhookId":"b1c00612-30d6-402d-a737-b9d06e473053","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_owner }}"},"filePath":"={{ $json.path }}","resource":"file","repository":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_name }}"},"fileContent":"={{ JSON.stringify($json.data, null, 2) }}","commitMessage":"={{ $json.name }} (Created) {{ new Date().toISOString().split('T')[0] }}","authentication":"oAuth2"},"credentials":{"githubOAuth2Api":{"id":"UBHtZxEV1OPvxU9F","name":"GitHub account"}},"retryOnFail":true,"typeVersion":1.1},{"id":"61fedd05-149c-4257-9de2-5cc784009ade","name":"Update Index File","type":"n8n-nodes-base.github","position":[2544,-64],"webhookId":"0cfd3844-d625-413e-9760-c352d50d4c79","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_owner }}"},"filePath":"index.json","resource":"file","operation":"edit","repository":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_name }}"},"fileContent":"={{ JSON.stringify($json.data, null, 2) }}","commitMessage":"=Index (Edited) {{ new Date().toISOString().split('T')[0] }}","authentication":"oAuth2"},"credentials":{"githubOAuth2Api":{"id":"UBHtZxEV1OPvxU9F","name":"GitHub account"}},"retryOnFail":true,"typeVersion":1.1},{"id":"0df1da12-7855-43c5-a039-7f9ec057ca4f","name":"Get Download Url for Github File","type":"n8n-nodes-base.github","position":[2544,-464],"webhookId":"6e7d3020-5558-4a80-9647-3c5a9de59a29","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_owner }}"},"filePath":"={{ $json.path }}","resource":"file","operation":"get","repository":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_name }}"},"authentication":"oAuth2","asBinaryProperty":false,"additionalParameters":{}},"credentials":{"githubOAuth2Api":{"id":"UBHtZxEV1OPvxU9F","name":"GitHub account"}},"retryOnFail":true,"typeVersion":1.1},{"id":"3b665fc8-6273-4223-ab7a-b1ab1cb524f8","name":"Switch","type":"n8n-nodes-base.switch","position":[2224,-384],"parameters":{"rules":{"values":[{"outputKey":"Create","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"97023852-faa0-4c13-91fc-7d080beae826","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"create"}]},"renameOutput":true},{"outputKey":"Edit","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"ae9ec2ae-f5d7-47be-85a5-7c13cf4b6688","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"edit"}]},"renameOutput":true},{"outputKey":"Delete","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"8f1e5618-6223-4ad3-afc8-b8e8d74b8f05","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"delete"}]},"renameOutput":true},{"outputKey":"Update Index","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"b548ed0b-878d-45da-80c7-28347fa3d555","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"index"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.3},{"id":"4ca08961-1c75-4d40-8f85-203ef0e5ce1c","name":"Delete Files","type":"n8n-nodes-base.github","position":[2544,-240],"webhookId":"b1c00612-30d6-402d-a737-b9d06e473053","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_owner }}"},"filePath":"={{ $json.path }}","resource":"file","operation":"delete","repository":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_name }}"},"commitMessage":"={{ $json.name }} (Deleted) {{ new Date().toISOString().split('T')[0] }}","authentication":"oAuth2"},"credentials":{"githubOAuth2Api":{"id":"UBHtZxEV1OPvxU9F","name":"GitHub account"}},"retryOnFail":true,"typeVersion":1.1},{"id":"d9be1383-2cbe-467d-95b6-5193fd01080e","name":"Get Github File Content","type":"n8n-nodes-base.httpRequest","position":[2800,-464],"parameters":{"url":"={{ $json.download_url }}","options":{}},"typeVersion":4.2},{"id":"a8b185c6-dd27-407a-8156-8fd3b10bbb65","name":"Parse Github File Content","type":"n8n-nodes-base.code","position":[3024,-464],"parameters":{"jsCode":"return $input.all().map(i => ({\n  json: {\n    githubData: JSON.parse(i.json.data || '{}')\n  }\n}));"},"typeVersion":2},{"id":"a54da607-6234-4661-960e-1954b72d28a9","name":"File Edit Checker","type":"n8n-nodes-base.code","position":[3472,-448],"parameters":{"jsCode":"const normalize = (obj) =>\n  JSON.stringify(obj, (_, value) =>\n    value && typeof value === 'object' && !Array.isArray(value)\n      ? Object.keys(value)\n          .sort()\n          .reduce((o, k) => {\n            o[k] = value[k];\n            return o;\n          }, {})\n      : value\n  );\n\nreturn $input.all()\n  .filter(item =>\n    normalize(item.json.githubData) !== normalize(item.json.data)\n  )\n  .map(item => {\n    const { githubData, ...rest } = item.json;\n    return { json: rest };\n  });"},"executeOnce":false,"typeVersion":2,"alwaysOutputData":true},{"id":"a830aab5-48fe-4e9f-a836-6a70dce2d625","name":"Merge Github & n8n File","type":"n8n-nodes-base.merge","position":[3248,-448],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.2},{"id":"623fafcc-e4c7-4643-bfde-6b618cb39bd7","name":"If File Edited","type":"n8n-nodes-base.if","position":[3696,-448],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"7f597ed3-ce0c-4830-97b8-3a07e9dda11f","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.status !== null && $json.status !== undefined }}","rightValue":""}]}},"typeVersion":2.2},{"id":"00098dfc-2bc6-4492-9562-8122a536954f","name":"Edit Files","type":"n8n-nodes-base.github","position":[3920,-464],"webhookId":"0cfd3844-d625-413e-9760-c352d50d4c79","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_owner }}"},"filePath":"={{ $json.path }}","resource":"file","operation":"edit","repository":{"__rl":true,"mode":"name","value":"={{ $('Set Github Data').first().json.repo_name }}"},"fileContent":"={{ JSON.stringify($json.data, null, 2) }}","commitMessage":"={{ $json.name }} (Edited) {{ new Date().toISOString().split('T')[0] }}","authentication":"oAuth2"},"credentials":{"githubOAuth2Api":{"id":"UBHtZxEV1OPvxU9F","name":"GitHub account"}},"retryOnFail":true,"typeVersion":1.1},{"id":"23b09a8a-983f-477f-be9a-96fe59dca49f","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[864,-896],"parameters":{"color":7,"width":3270,"height":1443,"content":"# n8n-Workflow-Github-Backup"},"typeVersion":1},{"id":"81fe00c0-4469-4f57-a8e7-441b5619b754","name":"Workflow Summary","type":"n8n-nodes-base.stickyNote","position":[320,-48],"parameters":{"color":2,"width":512,"height":416,"content":"## 📋 WORKFLOW SUMMARY\n\n**Purpose:** Automatically backup n8n workflows to GitHub\n\n**Flow:**\n1. Trigger (Schedule/Manual)\n2. Get/Create index.json in GitHub\n3. Fetch all n8n workflows\n4. Compare with GitHub index\n5. Create/Edit/Delete files as needed\n6. Update index.json\n\n\n**Features:**\n- Daily automatic backups (7 PM)\n- Detects new, edited, renamed, and deleted workflows\n- Maintains an index for tracking\n- Smart comparison to avoid unnecessary commits"},"typeVersion":1},{"id":"8d64b719-713f-4f0c-9054-55707357fab2","name":"Setup Requirements","type":"n8n-nodes-base.stickyNote","position":[320,-704],"parameters":{"color":4,"width":500,"height":608,"content":"## ⚙️ SETUP REQUIREMENTS\n\n**1️⃣ GitHub OAuth Credentials**\n- Go to *Credentials → New → GitHub OAuth2*\n- Create GitHub OAuth App:\n  - Settings → Developer settings → OAuth Apps\n  - Authorization callback URL: your n8n instance\n  - Enter Client ID & Secret in n8n\n\n\n**2️⃣ GitHub Repository**\n- Create a new repository (public/private)\n- Copy repository owner and name\n\n\n**3️⃣ Configure Workflow**\n- Edit \"Set Github Data\" node:\n  - `repo_owner`: your GitHub username\n  - `repo_name`: your repository name\n- Connect GitHub OAuth credentials to all GitHub nodes\n\n\n**4️⃣ n8n API Credentials**\n- Go to *Settings → API*\n- Create new API key\n- Add as n8n credential in workflow\n\n✅ Test manually before enabling schedule"},"typeVersion":1},{"id":"3fd029b9-9573-4f10-b464-333728f5791a","name":"Index System","type":"n8n-nodes-base.stickyNote","position":[1632,32],"parameters":{"color":5,"width":420,"height":472,"content":"## 📂 INDEX SYSTEM\n\n**index.json structure:**\n```json\n{\n  \"workflow_id_1\": {\n    \"name\": \"Workflow Name\",\n    \"file_path\": \"workflows/Workflow Name.json\"\n  },\n  \"workflow_id_2\": { ... }\n}\n```\n\n**Purpose:**\n- Tracks which workflows exist in GitHub\n- Maps workflow IDs to file paths\n- Enables detection of renames and deletes\n\n**First Run:**\n- If index.json doesn't exist, it's created automatically\n- 3-second wait allows file creation to complete"},"typeVersion":1},{"id":"9ab1adc8-5de8-4eba-9128-aed991abae8c","name":"C,E,D Checker Logic","type":"n8n-nodes-base.stickyNote","position":[1808,-848],"parameters":{"color":6,"width":400,"height":456,"content":"## 🔍 C,E,D CHECKER\n\n**Compare & Decision Logic:**\n\nFor each n8n workflow:\n- **CREATE:** New workflow not in index\n- **RENAME:** Workflow name changed\n  - Deletes old file\n  - Creates new file with new name\n- **EDIT:** Existing workflow (checked later for actual changes)\n\n\nFor workflows in index but not in n8n:\n- **DELETE:** Workflow removed from n8n\n\n\nFor index itself:\n- **UPDATE INDEX:** If any changes detected\n\n**Output:** Array of actions to take"},"typeVersion":1},{"id":"3e687dee-c761-4cfc-b7b0-301e414a0cf8","name":"Switch Routing","type":"n8n-nodes-base.stickyNote","position":[2128,16],"parameters":{"color":7,"width":360,"height":496,"content":"## 🔀 SWITCH ROUTING\n\nRoutes items based on status:\n\n**Create Branch:**\n- New workflows → Create New Files\n\n\n**Edit Branch:**\n- Existing workflows → Smart edit check\n- Fetches GitHub version\n- Compares with n8n version\n- Only commits if actually different\n\n\n**Delete Branch:**\n- Removed workflows → Delete Files\n\n\n**Update Index Branch:**\n- Index changed → Update Index File\n\n\nEach branch processes independently."},"typeVersion":1},{"id":"fc8aa3ca-ab5b-463a-ba87-40a10e7486e1","name":"Smart Edit Detection","type":"n8n-nodes-base.stickyNote","position":[3456,-288],"parameters":{"color":6,"width":380,"height":428,"content":"## ✏️ SMART EDIT DETECTION\n\n**Why needed:**\n- n8n changes timestamps/metadata on save\n- Prevents unnecessary commits\n\n\n**Process:**\n1. Fetch current file from GitHub\n2. Parse both GitHub & n8n versions\n3. Normalize JSON (sort keys)\n4. Compare stringified versions\n5. Only commit if truly different\n\n\n**Benefits:**\n- Cleaner commit history\n- No spam commits\n- Saves GitHub API calls"},"typeVersion":1},{"id":"52fef552-2ada-4451-8909-08dcc301a6d2","name":"Commit Messages","type":"n8n-nodes-base.stickyNote","position":[2832,-240],"parameters":{"color":3,"width":360,"height":404,"content":"## 📝 COMMIT MESSAGES\n\nAuto-generated commit messages:\n\n**Format:** `[Workflow Name] ([Action]) YYYY-MM-DD`\n\n**Examples:**\n- `My Workflow (Created) 2026-01-15`\n- `My Workflow (Edited) 2026-01-15`\n- `My Workflow (Deleted) 2026-01-15`\n- `Index (Edited) 2026-01-15`\n\n\n**Benefits:**\n- Clear action history\n- Easy to track changes\n- Searchable by date"},"typeVersion":1},{"id":"a9f5ca79-fb19-436b-92e7-87f167759636","name":"Workflows Folder Not Found","type":"n8n-nodes-base.if","position":[1632,976],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"3e028766-cfb2-4464-9a97-b0845f082ed4","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.error }}","rightValue":"=The resource you are requesting could not be found"}]}},"typeVersion":2.2},{"id":"a2bb07be-ea57-4098-8f2e-94b62cdaf00b","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[1632,736],"parameters":{"options":{}},"typeVersion":3},{"id":"0715c423-09e1-4743-84bf-0c3f133810e5","name":"Get File Content","type":"n8n-nodes-base.httpRequest","position":[1872,752],"parameters":{"url":"={{ $json.download_url }}","options":{}},"retryOnFail":true,"typeVersion":4.2},{"id":"bff04c86-1ace-4b5b-9ab6-bbe4f146846b","name":"List Workflow Files","type":"n8n-nodes-base.github","onError":"continueErrorOutput","position":[1408,752],"webhookId":"b4034155-275a-407e-8168-e9e9c7b1babe","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $json.repo_owner }}"},"filePath":"workflows/","resource":"file","operation":"list","repository":{"__rl":true,"mode":"name","value":"={{ $json.repo_name }}"},"authentication":"oAuth2"},"credentials":{"githubOAuth2Api":{"id":"UBHtZxEV1OPvxU9F","name":"GitHub account"}},"retryOnFail":true,"typeVersion":1.1},{"id":"1ec8abd6-051a-411f-a889-15bc605a8afb","name":"Create Workflow","type":"n8n-nodes-base.n8n","position":[2096,752],"parameters":{"operation":"create","requestOptions":{},"workflowObject":"={{ $json.data }}"},"credentials":{"n8nApi":{"id":"K60r3zn5x560PMdo","name":"Github Backup"}},"executeOnce":false,"retryOnFail":true,"typeVersion":1,"alwaysOutputData":false},{"id":"e839c8ca-d8cc-47cb-9ceb-05b9235e6e94","name":"How It Works","type":"n8n-nodes-base.stickyNote","position":[1136,944],"parameters":{"color":6,"width":400,"height":284,"content":"## 🔄 HOW IT WORKS\n\n**Sequential Processing:**\n- Loops through files one at a time\n- Downloads JSON from GitHub\n- Creates workflow in n8n\n- Prevents conflicts and rate limits\n\n**Error Handling:**\n- If `workflows/` folder not found → stops gracefully\n- Ensure backup workflow ran at least once first"},"typeVersion":1},{"id":"782b9b5e-067b-4fb1-ba54-64d2f6c813c4","name":"Set Github Data1","type":"n8n-nodes-base.set","position":[1200,752],"parameters":{"options":{},"assignments":{"assignments":[{"id":"452d7af0-1a81-4426-a171-0379eb83f575","name":"repo_owner","type":"string","value":"your-github-username"},{"id":"eed5e0e0-4a5e-4df9-adec-a266d175e40d","name":"repo_name","type":"string","value":"your-github-repository-name"}]}},"typeVersion":3.4},{"id":"a02ef593-96ca-42d1-b072-e96d82b044f8","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[864,592],"parameters":{"color":7,"width":1494,"height":675,"content":"# n8n-Workflow-Github-Restore"},"typeVersion":1},{"id":"9910bb0d-581e-4a82-94ad-3e2066c99625","name":"Workflow Summary1","type":"n8n-nodes-base.stickyNote","position":[416,592],"parameters":{"color":2,"width":416,"height":372,"content":"## 📋 WORKFLOW SUMMARY\n\n**Purpose:** Restore n8n workflows from GitHub backup\n\n**Flow:**\n1. Manual trigger\n2. Set GitHub repo details\n3. List workflow files from GitHub\n4. Loop through each file\n5. Download & create workflow in n8n\n\n\n**Use Cases:**\n- New n8n instance setup\n- Disaster recovery\n- Cloning workflows to another environment"},"typeVersion":1}],"pinData":{},"connections":{"Wait":{"main":[[{"node":"Set Github Data","type":"main","index":0}]]},"Switch":{"main":[[{"node":"Create New Files","type":"main","index":0}],[{"node":"Get Download Url for Github File","type":"main","index":0},{"node":"Merge Github & n8n File","type":"main","index":1}],[{"node":"Delete Files","type":"main","index":0}],[{"node":"Update Index File","type":"main","index":0}]]},"C,E,D Checker":{"main":[[{"node":"Switch","type":"main","index":0}]]},"If File Edited":{"main":[[{"node":"Edit Files","type":"main","index":0}]]},"Create Workflow":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"Get File Content","type":"main","index":0}]]},"Set Github Data":{"main":[[{"node":"Get Download Url for Index File","type":"main","index":0}]]},"Get File Content":{"main":[[{"node":"Create Workflow","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Set Github Data","type":"main","index":0}]]},"Set Github Data1":{"main":[[{"node":"List Workflow Files","type":"main","index":0}]]},"Create Index File":{"main":[[{"node":"Wait","type":"main","index":0}]]},"File Edit Checker":{"main":[[{"node":"If File Edited","type":"main","index":0}]]},"Get All Workflows":{"main":[[{"node":"C,E,D Checker","type":"main","index":0}]]},"List Workflow Files":{"main":[[{"node":"Loop Over Items","type":"main","index":0}],[{"node":"Workflows Folder Not Found","type":"main","index":0}]]},"Index File Not Found":{"main":[[{"node":"Create Index File","type":"main","index":0}]]},"Get Index File Content":{"main":[[{"node":"Get All Workflows","type":"main","index":0}]]},"Get Github File Content":{"main":[[{"node":"Parse Github File Content","type":"main","index":0}]]},"Merge Github & n8n File":{"main":[[{"node":"File Edit Checker","type":"main","index":0}]]},"Parse Github File Content":{"main":[[{"node":"Merge Github & n8n File","type":"main","index":0}]]},"Get Download Url for Index File":{"main":[[{"node":"Get Index File Content","type":"main","index":0}],[{"node":"Index File Not Found","type":"main","index":0}]]},"Get Download Url for Github File":{"main":[[{"node":"Get Github File Content","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Set Github Data1","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":38,"nodeTypes":{"n8n-nodes-base.if":{"count":3},"n8n-nodes-base.n8n":{"count":2},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.github":{"count":8},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.stickyNote":{"count":11},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Muhammad Anas Farooq","username":"anasn-farooq","bio":"","verified":true,"links":["https://github.com/anas-farooq8"],"avatar":"https://gravatar.com/avatar/8b14b291d9ae7f24b8f8bb4b44848fc9cd1221754372f8f82bfd121cfbb845ad?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":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":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"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/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/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/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.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"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":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"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/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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"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/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/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/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"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/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.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"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":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"}]}],"categories":[{"id":16,"name":"DevOps"}],"image":[]}}