This workflow follows the Form → Form Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"createdAt": "2025-04-15T19:30:49.651Z",
"updatedAt": "2025-05-02T11:15:42.000Z",
"id": "h4IaVqG7YjldMsXK",
"name": "Git Commit",
"active": true,
"nodes": [
{
"parameters": {
"operation": "formatDate",
"date": "={{ $json.currentDate }}",
"format": "custom",
"customFormat": "dd-MM-yyyy/H:mm",
"options": {}
},
"id": "8875cf95-83d2-4d27-ba68-b74c876354c8",
"name": "Format date",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 2,
"position": [
-2300,
140
]
},
{
"parameters": {
"keepOnlySet": true,
"values": {
"string": [
{
"name": "commitDate",
"value": "={{ $json.formattedDate }}"
}
]
},
"options": {}
},
"id": "a9561742-a7ed-4fa1-bfe4-aa941217a1e5",
"name": "Set commit date",
"type": "n8n-nodes-base.set",
"typeVersion": 2,
"position": [
-2080,
140
]
},
{
"parameters": {
"authentication": "oAuth2",
"resource": "file",
"operation": "list",
"owner": {
"__rl": true,
"value": "=https://github.com/{{ $('git_repos').item.json.user }}",
"mode": "url"
},
"repository": {
"__rl": true,
"value": "=https://github.com/CyrilDenoyelle/{{ $('git_repos').item.json.repos }}",
"mode": "url"
},
"filePath": "={{ $('git_repos').item.json.folder }}"
},
"id": "e34ca03d-cd5a-4d1a-bcfc-87b4b36c44d1",
"name": "List files from repository [GITHUB]",
"type": "n8n-nodes-base.github",
"typeVersion": 1,
"position": [
-1200,
340
],
"alwaysOutputData": true,
"credentials": {
"githubOAuth2Api": {
"name": "<your credential>"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"filters": {},
"requestOptions": {}
},
"id": "bc226377-e7e1-4503-9119-642d743f5258",
"name": "Retrieve workflows [N8N]",
"type": "n8n-nodes-base.n8n",
"typeVersion": 1,
"position": [
-1860,
-210
],
"credentials": {
"n8nApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"authentication": "oAuth2",
"resource": "file",
"owner": {
"__rl": true,
"value": "=https://github.com/{{ $('git_repos').first().json.user }}",
"mode": "url"
},
"repository": {
"__rl": true,
"value": "=https://github.com/CyrilDenoyelle/{{ $('git_repos').first().json.repos }}",
"mode": "url"
},
"filePath": "={{ $('git_repos').first().json.folder }}/{{ $('n8n_workflow').item.json.fileName }}",
"fileContent": "={{ $('IndentJsonUpload1').item.json.string }}",
"commitMessage": "={{ $('git add untracked').first().json[\"commit message\"] }}"
},
"id": "03f69ebf-8438-4ca8-9c98-6a6250a503ed",
"name": "Upload file [GITHUB]",
"type": "n8n-nodes-base.github",
"typeVersion": 1,
"position": [
120,
240
],
"credentials": {
"githubOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "{\n \"user\": \"CyrilDenoyelle\",\n \"repos\": \"n8n_game_master_ai\",\n \"folder\": \"workflows\"\n}",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-2520,
140
],
"id": "8429a2ba-08c9-4ae4-b58a-b504b2294b38",
"name": "git_repos"
},
{
"parameters": {
"formTitle": "Commit",
"formFields": {
"values": [
{
"fieldLabel": "Sure ?",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "sure !"
}
]
}
}
]
},
"options": {
"path": "commit"
}
},
"type": "n8n-nodes-base.formTrigger",
"typeVersion": 2.2,
"position": [
-2740,
140
],
"id": "eb1018e2-a3b3-4f7b-a0e6-abfe22d3d542",
"name": "On form submission"
},
{
"parameters": {
"authentication": "oAuth2",
"resource": "file",
"operation": "edit",
"owner": {
"__rl": true,
"value": "=https://github.com/{{ $('git_repos').first().json.user }}",
"mode": "url"
},
"repository": {
"__rl": true,
"value": "=https://github.com/CyrilDenoyelle/{{ $('git_repos').first().json.repos }}",
"mode": "url"
},
"filePath": "={{ $('git_repos').first().json.folder }}/{{ $('Check if file changed').item.json.git.fileName }}",
"fileContent": "={{ $('IndentJsonUpload').item.json.string }}",
"commitMessage": "={{ $('git add update').first().json[\"commit message\"] }}"
},
"id": "ac955b0e-caae-43d2-a098-7d5c8a166b26",
"name": "Update file [GITHUB]",
"type": "n8n-nodes-base.github",
"typeVersion": 1,
"position": [
1440,
-60
],
"credentials": {
"githubOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"url": "={{ $json.URL }}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-320,
-160
],
"id": "f80860ad-292a-4526-ad05-8eaf5a2d3c21",
"name": "HTTP Request",
"alwaysOutputData": false
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"gitVersionId\": \"{{ $json.git.versionId }}\",\n \"currentVersionId\": \"{{ $json.current.versionId }}\",\n \"option\": \"{{ $json.current.fileName }}\"\n}",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
340,
-160
],
"id": "742b755c-208a-4b97-a3ec-5e87a8a3d758",
"name": "versionIds"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"URL\": \"{{ $node['Sorted git files'].json.download_url }}\"\n}\n",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-540,
-160
],
"id": "f339ad8f-fcf4-447d-adef-ffc08bd28e93",
"name": "url",
"notes": "\"URL\": \"{{ $('List files from repository [GITHUB]').all()[$node[\"Loop Over Items\"].context[\"currentRunIndex\"]].json.download_url }}\"\n\n\"URL\": \"{{ $node['List files from repository [GITHUB]'].all()[$node[\"Loop Over Items\"].context[\"currentRunIndex\"]].json.download_url }}\""
},
{
"parameters": {
"sortFieldsUi": {
"sortField": [
{
"fieldName": "name"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.sort",
"typeVersion": 1,
"position": [
-980,
340
],
"id": "21abdc6d-e3aa-4ee8-9f06-2ec836844c2f",
"name": "Sorted git files"
},
{
"parameters": {
"sortFieldsUi": {
"sortField": [
{
"fieldName": "fileName"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.sort",
"typeVersion": 1,
"position": [
-1420,
-210
],
"id": "70a233d6-bb1c-404b-84ce-5bf5fe5776ea",
"name": "Sorted workflows"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"fileName\": \"{{ $json.name.replace(/\\s+/g, '-').toLowerCase() }}.json\"\n}\n",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-1640,
-210
],
"id": "cf88587e-1a43-4ef1-ad8b-9bb8a11209fa",
"name": "set fileName"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"n8n_workflow\": {{ $json.toJsonString() }}\n}\n",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-980,
-210
],
"id": "ae973906-63a9-46e9-b4fe-fd05998b3530",
"name": "n8n_workflow"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"git\": {{ $json.data.parseJson().toJsonString() }}\n}",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-100,
-160
],
"id": "c79ec67f-d9db-4034-b78c-8df43c86c60c",
"name": "git"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"current\": {{ $('n8n_workflow').item.json.toJsonString() }}\n}",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
120,
-160
],
"id": "bc6214b5-2268-4bc9-856f-8bdc7bc9cf44",
"name": "current"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"fileName\": \"{{ $json.name.replace(/\\s+/g, '-').toLowerCase() }}.json\",\n \"option\": \"{{ $json.name.replace(/\\s+/g, '-').toLowerCase() }}.json\"\n}\n",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-1200,
-210
],
"id": "31553a09-5e8f-4f5e-942a-370331b2a572",
"name": "reset fileName"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={{ $json.n8n_workflow.toJsonString() }}\n",
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-540,
140
],
"id": "78ab9e3b-e0d3-4ea4-b397-9495c2822182",
"name": "get workflow",
"notes": "\"URL\": \"{{ $('List files from repository [GITHUB]').all()[$node[\"Loop Over Items\"].context[\"currentRunIndex\"]].json.download_url }}\"\n\n\"URL\": \"{{ $node['List files from repository [GITHUB]'].all()[$node[\"Loop Over Items\"].context[\"currentRunIndex\"]].json.download_url }}\""
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={{ $('n8n_workflow').item.json.n8n_workflow.toJsonString() }}",
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1000,
-60
],
"id": "d6c82cc8-baf5-4d7e-b2b5-ca0181ea28f2",
"name": "set current for updload"
},
{
"parameters": {
"mode": "combine",
"advanced": true,
"mergeByFields": {
"values": [
{
"field1": "fileName",
"field2": "name"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.1,
"position": [
-760,
-160
],
"id": "d5ecd191-1a59-4b32-b0fd-1911fc5f837a",
"name": "Filter gited and in n8n"
},
{
"parameters": {
"mode": "combine",
"advanced": true,
"mergeByFields": {
"values": [
{
"field1": "fileName",
"field2": "=name"
}
]
},
"joinMode": "keepNonMatches",
"outputDataFrom": "input2",
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.1,
"position": [
-760,
340
],
"id": "4f754ed4-c6d9-4411-b6cb-503478acde8c",
"name": "Filter gited and not in n8n"
},
{
"parameters": {
"mode": "combine",
"advanced": true,
"mergeByFields": {
"values": [
{
"field1": "fileName",
"field2": "name"
}
]
},
"joinMode": "keepNonMatches",
"outputDataFrom": "input1",
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.1,
"position": [
-760,
140
],
"id": "7a7e042f-8c6e-4a64-aaaa-d2b80a2fe0d7",
"name": "Filter in n8n not gited"
},
{
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.string = JSON.stringify(item.json, null, 2);\n}\n\nreturn $input.all();"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1220,
-60
],
"id": "5b3c00dc-2708-4878-b9b2-51e14afe6d0c",
"name": "IndentJsonUpload"
},
{
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.string = JSON.stringify(item.json, null, 2);\n}\n\nreturn $input.all();"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-320,
140
],
"id": "d9f01600-1e56-498b-b458-e298ab66dd0f",
"name": "IndentJsonUpload1"
},
{
"parameters": {
"aggregate": "aggregateAllItemData",
"include": "specifiedFields",
"fieldsToInclude": "option",
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
780,
-260
],
"id": "d8b7f6ae-04b8-4d82-b3f6-1d27b4e81264",
"name": "Aggregate git add select"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"file to commit\": {{ $json[\"file to commit (update)\"] }}\n}\n ",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1220,
-260
],
"id": "026f76b6-a388-486e-9081-9ace48bd2fbb",
"name": "files to commit"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "2c6c86b3-b6fc-40a5-9d5a-87ba92096112",
"leftValue": "={{ $('files to commit1').first().json['file to commit'] }}",
"rightValue": "={{ $json.fileName }}",
"operator": {
"type": "array",
"operation": "contains",
"rightType": "any"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
-100,
240
],
"id": "dcae7a3b-fade-462e-acd3-8ac18c60982e",
"name": "Filter in files to commit add"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "2c6c86b3-b6fc-40a5-9d5a-87ba92096112",
"leftValue": "={{ $('files to commit').first().json['file to commit'] }}",
"rightValue": "={{ $json.git.fileName }}",
"operator": {
"type": "array",
"operation": "contains",
"rightType": "any"
}
},
{
"id": "9eebeec3-5d78-4564-a1d9-69ceb8ac00b2",
"leftValue": "",
"rightValue": "",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
780,
-60
],
"id": "162cf082-90c3-4ba6-93f3-0b9599841a19",
"name": "Filter in files to commit update"
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.git.nodes.toJsonString() }}",
"operation": "notEqual",
"value2": "={{ $json.current.nodes.toJsonString() }}"
},
{
"value1": "={{ $json.git.connections.toJsonString() }}",
"operation": "notEqual",
"value2": "={{ $json.current.connections.toJsonString() }}"
}
],
"boolean": [
{
"value1": "={{ $json.git.active }}",
"operation": "notEqual",
"value2": "={{ $json.current.active }}"
}
]
},
"combineOperation": "any"
},
"id": "a61a522c-d295-4e53-ac43-87321b1f977c",
"name": "Check if file changed",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
560,
-160
],
"notes": "{{ $json.data?.parseJson().versionId }}"
},
{
"parameters": {
"aggregate": "aggregateAllItemData",
"include": "specifiedFields",
"fieldsToInclude": "option",
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
-100,
40
],
"id": "5d82846a-c553-45d6-a1e6-ab8428d4b3a0",
"name": "Aggregate git add select1"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\n \"file to commit\": {{ $json[\"file to commit (untracked)\"] }}\n}\n ",
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
340,
40
],
"id": "73dc885b-fcba-483d-b67f-4128d25065ef",
"name": "files to commit1"
},
{
"parameters": {
"defineForm": "json",
"jsonOutput": "=[\n {\n \"fieldLabel\": \"commit message\",\n\t\t\"placeholder\": \"commit message\"\n\t},\n {\n\t\t\"fieldLabel\": \"file to commit (untracked)\",\n\t\t\"fieldType\": \"dropdown\",\n\t\t\"fieldOptions\": {\n\t\t\t\"values\": {{ $json.data }}\n\t\t},\n\t\t\"requiredField\": false,\n \"multiselect\": true \n\t}\n]",
"options": {}
},
"type": "n8n-nodes-base.form",
"typeVersion": 1,
"position": [
120,
40
],
"id": "b2c663f1-3cae-499a-ac9d-8066ad58756e",
"name": "git add untracked"
},
{
"parameters": {
"defineForm": "json",
"jsonOutput": "=[\n {\n \"fieldLabel\": \"commit message\",\n\t\t\"placeholder\": \"commit message\"\n\t},\n {\n\t\t\"fieldLabel\": \"file to commit (update)\",\n\t\t\"fieldType\": \"dropdown\",\n\t\t\"fieldOptions\": {\n\t\t\t\"values\": {{ $json.data }}\n\t\t},\n\t\t\"requiredField\": false,\n \"multiselect\": true \n\t}\n]",
"options": {}
},
"type": "n8n-nodes-base.form",
"typeVersion": 1,
"position": [
1000,
-260
],
"id": "036b89cc-caf6-4917-9716-b6cbad428350",
"name": "git add update"
}
],
"connections": {
"Format date": {
"main": [
[
{
"node": "Set commit date",
"type": "main",
"index": 0
}
]
]
},
"Set commit date": {
"main": [
[
{
"node": "List files from repository [GITHUB]",
"type": "main",
"index": 0
},
{
"node": "Retrieve workflows [N8N]",
"type": "main",
"index": 0
}
]
]
},
"List files from repository [GITHUB]": {
"main": [
[
{
"node": "Sorted git files",
"type": "main",
"index": 0
}
]
]
},
"Retrieve workflows [N8N]": {
"main": [
[
{
"node": "set fileName",
"type": "main",
"index": 0
}
]
]
},
"Upload file [GITHUB]": {
"main": [
[]
]
},
"git_repos": {
"main": [
[
{
"node": "Format date",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "git_repos",
"type": "main",
"index": 0
}
]
]
},
"Update file [GITHUB]": {
"main": [
[]
]
},
"HTTP Request": {
"main": [
[
{
"node": "git",
"type": "main",
"index": 0
}
]
]
},
"versionIds": {
"main": [
[
{
"node": "Check if file changed",
"type": "main",
"index": 0
}
]
]
},
"url": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Sorted git files": {
"main": [
[
{
"node": "Filter gited and in n8n",
"type": "main",
"index": 1
},
{
"node": "Filter gited and not in n8n",
"type": "main",
"index": 1
},
{
"node": "Filter in n8n not gited",
"type": "main",
"index": 1
}
]
]
},
"Sorted workflows": {
"main": [
[
{
"node": "reset fileName",
"type": "main",
"index": 0
}
]
]
},
"set fileName": {
"main": [
[
{
"node": "Sorted workflows",
"type": "main",
"index": 0
}
]
]
},
"n8n_workflow": {
"main": [
[
{
"node": "Filter gited and in n8n",
"type": "main",
"index": 0
},
{
"node": "Filter gited and not in n8n",
"type": "main",
"index": 0
},
{
"node": "Filter in n8n not gited",
"type": "main",
"index": 0
}
]
]
},
"git": {
"main": [
[
{
"node": "current",
"type": "main",
"index": 0
}
]
]
},
"current": {
"main": [
[
{
"node": "versionIds",
"type": "main",
"index": 0
}
]
]
},
"reset fileName": {
"main": [
[
{
"node": "n8n_workflow",
"type": "main",
"index": 0
}
]
]
},
"get workflow": {
"main": [
[
{
"node": "IndentJsonUpload1",
"type": "main",
"index": 0
}
]
]
},
"set current for updload": {
"main": [
[
{
"node": "IndentJsonUpload",
"type": "main",
"index": 0
}
]
]
},
"Filter gited and in n8n": {
"main": [
[
{
"node": "url",
"type": "main",
"index": 0
}
]
]
},
"Filter in n8n not gited": {
"main": [
[
{
"node": "get workflow",
"type": "main",
"index": 0
}
]
]
},
"IndentJsonUpload": {
"main": [
[
{
"node": "Update file [GITHUB]",
"type": "main",
"index": 0
}
]
]
},
"IndentJsonUpload1": {
"main": [
[
{
"node": "Filter in files to commit add",
"type": "main",
"index": 0
},
{
"node": "Aggregate git add select1",
"type": "main",
"index": 0
}
]
]
},
"Aggregate git add select": {
"main": [
[
{
"node": "git add update",
"type": "main",
"index": 0
}
]
]
},
"files to commit": {
"main": [
[]
]
},
"Filter in files to commit add": {
"main": [
[
{
"node": "Upload file [GITHUB]",
"type": "main",
"index": 0
}
]
]
},
"Filter in files to commit update": {
"main": [
[
{
"node": "set current for updload",
"type": "main",
"index": 0
}
]
]
},
"Check if file changed": {
"main": [
[
{
"node": "Filter in files to commit update",
"type": "main",
"index": 0
},
{
"node": "Aggregate git add select",
"type": "main",
"index": 0
}
]
]
},
"Aggregate git add select1": {
"main": [
[
{
"node": "git add untracked",
"type": "main",
"index": 0
}
]
]
},
"git add untracked": {
"main": [
[
{
"node": "files to commit1",
"type": "main",
"index": 0
}
]
]
},
"git add update": {
"main": [
[
{
"node": "files to commit",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"staticData": null,
"meta": {
"templateCredsSetupCompleted": true
},
"versionId": "e8243198-623e-44d8-9bb7-9f237df8e57a",
"triggerCount": 2,
"tags": [],
"fileName": "git-commit.json",
"option": "git-commit.json"
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
githubOAuth2Apin8nApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Git Commit. Uses github, n8n, formTrigger, httpRequest. Event-driven trigger; 34 nodes.
Source: https://github.com/CyrilDenoyelle/n8n_game_master_ai/blob/293a5c990f98d096130f9882990f186b3e52cb01/workflows/git-commit.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t
N8n recently introduced folders and it has been a big improvement on workflow management on top of the tags.
[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.
[](https://youtu.be/c7yCZhmMjtI)
Remixed Backup your workflows to GitHub from Solomon's work. Check out his templates.