{"id":"k22TSNIZXHaQ9rGr","meta":{"instanceId":"workflow-8909a408","versionId":"1.0.0","createdAt":"2025-09-29T07:07:55.743000","updatedAt":"2025-09-29T07:07:55.743005","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"name":"Clockify Backup Template","nodes":[{"id":"24115363-9a03-4f8a-aa6e-2a9d4247f035","name":"Extract from File","type":"n8n-nodes-base.extractFromFile","position":[660,400],"parameters":{"options":{},"operation":"fromJson"},"typeVersion":1,"notes":"This extractFromFile node performs automated tasks as part of the workflow."},{"id":"11aa4b51-98f9-4df8-b2d2-6757fe686894","name":"Compare Datasets","type":"n8n-nodes-base.compareDatasets","position":[880,280],"parameters":{"options":{},"mergeByFields":{"values":[{"field1":"data","field2":"data"}]}},"typeVersion":2.3,"notes":"This compareDatasets node performs automated tasks as part of the workflow."},{"id":"831ad368-6a46-4dd4-bb6c-8ea46200cdf0","name":"Stop and Error","type":"n8n-nodes-base.stopAndError","position":[880,700],"parameters":{"errorMessage":"={{ $json.error }}"},"typeVersion":1,"notes":"This stopAndError node performs automated tasks as part of the workflow."},{"id":"2f838fc8-96bf-4111-aaba-743e0c88b688","name":"Globals","type":"n8n-nodes-base.set","position":[-660,480],"parameters":{"options":{},"assignments":{"assignments":[{"id":"6bd5904d-0218-4075-a767-d4b659def9b0","name":"workspace_id","type":"string","value":"={{ $json.id }}"},{"id":"63fa6231-6c5b-414f-b813-18f7dd5c33e9","name":"github_repo.owner","type":"string","value":""},{"id":"be2530d7-b2b5-41c5-af19-ab8d27f18e2e","name":"github_repo.name","type":"string","value":""}]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"bea9590e-355e-410a-bc4b-ae777efb9f15","name":"Set month indexes","type":"n8n-nodes-base.set","position":[-440,480],"parameters":{"options":{},"assignments":{"assignments":[{"id":"ad278249-5320-4ffa-8d75-e47194c83e58","name":"monthIndex","type":"array","value":"=[0, 1, 2]"}]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"f541d535-80d9-439d-8543-9c3cb156a5ff","name":"Split Out indexes","type":"n8n-nodes-base.splitOut","position":[-220,480],"parameters":{"options":{},"fieldToSplitOut":"monthIndex"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"76c74727-d338-4a61-9bf2-e97893721995","name":"Set intervals","type":"n8n-nodes-base.set","position":[0,480],"parameters":{"options":{},"assignments":{"assignments":[{"id":"7f5ff2ee-b93c-4121-b3dc-ce592513db88","name":"reportName","type":"string","value":"=detailed_report_{{ $now.minus($json.monthIndex, 'month').format('yyyy-MM') }}"},{"id":"ea571bdb-8f51-4852-9fda-55ff1a929d1f","name":"startDate","type":"string","value":"={{ $now.minus($json.monthIndex, 'month').startOf('month').format('yyyy-MM-dd') }}"},{"id":"e88726c4-1eb8-4f29-9805-7b0a5ee484a4","name":"endDate","type":"string","value":"={{ $now.minus($json.monthIndex, 'month').endOf('month').format('yyyy-MM-dd') }}"}]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"6d5e917e-68ac-4dbd-98be-4c8ad97fa54a","name":"Skip empty reports","type":"n8n-nodes-base.filter","position":[880,500],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f6c69f9b-9e78-4a1e-af33-a1197f35e970","operator":{"type":"array","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.timeentries }}","rightValue":""}]}},"typeVersion":2.2,"notes":"This filter node performs automated tasks as part of the workflow."},{"id":"60c7a408-74d3-4c6c-ac78-1ed1071e873e","name":"Get first workspace","type":"n8n-nodes-base.clockify","position":[-880,480],"parameters":{"limit":1,"resource":"workspace"},"credentials":{"clockifyApi":{"id":"CMJ0LAYOs143GAXw","name":"Clockify (octionictest)"}},"typeVersion":1,"notes":"This clockify node performs automated tasks as part of the workflow."},{"id":"824bf2c6-9159-40ec-83f3-3f0b8d87c208","name":"Get detailed monthly report","type":"n8n-nodes-base.httpRequest","position":[220,480],"parameters":{"url":"{{ $env.BASE_URL }}","method":"POST","options":{},"jsonBody":"={\n  \"dateRangeStart\": \"{{ $json.startDate }}T00:00:00Z\",\n  \"dateRangeEnd\": \"{{ $json.endDate }}T23:59:59.999Z\",\n  \"detailedFilter\": {\n    \"page\": 1,\n    \"pageSize\": 50\n  },\n  \"exportType\": \"json\"\n}","sendBody":true,"specifyBody":"json","authentication":"{{ $credentials.predefinedCredentialType }}","nodeCredentialType":"YOUR_CREDENTIAL_HERE"},"credentials":{"clockifyApi":{"id":"CMJ0LAYOs143GAXw","name":"Clockify (octionictest)"}},"typeVersion":4.2,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"f9323c68-c70f-4f22-ae18-916d5fc1b264","name":"Check if file exists in GitHub","type":"n8n-nodes-base.github","onError":"continueErrorOutput","position":[440,480],"parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Globals').first().json.github_repo.owner }}"},"filePath":"=reports/{{ $('Set intervals').item.json.reportName }}","resource":"file","operation":"get","repository":{"__rl":true,"mode":"name","value":"={{ $('Globals').first().json.github_repo.name }}"},"additionalParameters":{}},"credentials":{"githubApi":{"id":"Eb9yCfVJGJvXD05z","name":"GitHub (n8n-test-01)"}},"retryOnFail":false,"typeVersion":1,"notes":"This github node performs automated tasks as part of the workflow."},{"id":"41877a6a-ba5b-43bd-8ca3-f8402793685f","name":"Point to new data","type":"n8n-nodes-base.set","position":[660,200],"parameters":{"options":{},"assignments":{"assignments":[{"id":"00d2885f-451e-436e-8852-b9ad086d231b","name":"data","type":"array","value":"={{ $('Get detailed monthly report').item.json.timeentries }}"}]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"9f448921-5b9d-4937-a7d9-00a62b1fba99","name":"Check for 404 error message","type":"n8n-nodes-base.if","position":[660,600],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6b34c09d-0136-433c-856d-b29a0c3aac34","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $json.error }}","rightValue":"could not be found"}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"900905ed-cff6-4ebb-b0da-67db9f02b301","name":"Update file in GitHub","type":"n8n-nodes-base.github","position":[1100,180],"parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Globals').first().json.github_repo.owner }}"},"filePath":"=reports/{{ $('Set intervals').item.json.reportName }}","resource":"file","operation":"edit","repository":{"__rl":true,"mode":"name","value":"={{ $('Globals').first().json.github_repo.name }}"},"fileContent":"={{ JSON.stringify($json.data, null, 2) }}","commitMessage":"Update report"},"credentials":{"githubApi":{"id":"Eb9yCfVJGJvXD05z","name":"GitHub (n8n-test-01)"}},"typeVersion":1,"notes":"This github node performs automated tasks as part of the workflow."},{"id":"b928cdb2-b21a-45ff-9bc6-9be483891c4c","name":"Create file in GitHub","type":"n8n-nodes-base.github","position":[1100,500],"parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Globals').first().json.github_repo.owner }}"},"filePath":"=reports/{{ $('Set intervals').item.json.reportName }}","resource":"file","repository":{"__rl":true,"mode":"name","value":"={{ $('Globals').first().json.github_repo.name }}"},"fileContent":"={{ JSON.stringify($json.timeentries, null, 2) }}","commitMessage":"Create report"},"credentials":{"githubApi":{"id":"Eb9yCfVJGJvXD05z","name":"GitHub (n8n-test-01)"}},"typeVersion":1,"notes":"This github node performs automated tasks as part of the workflow."},{"id":"04a5b42d-ea1f-4b32-98b5-953e22b26819","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-1100,480],"parameters":{"rule":{"interval":[{"triggerAtHour":5}]}},"typeVersion":1.2,"notes":"This scheduleTrigger node performs automated tasks as part of the workflow."},{"id":"4728f389-df04-4f8d-a436-ac06508d28ba","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-720,260],"parameters":{"width":220,"height":380,"content":"## Set Globals\n- Define the repository owner (username / organization) and repository name\n- By default the fist available Clockify workspace ID is set. This can be overridden here."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"2e31df0a-1e67-4a9a-8dc1-42360b4da978","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1160,360],"parameters":{"width":220,"height":280,"content":"## Set trigger\nBy default this workflow runs once a day."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"696721c6-25fc-48f9-b0f5-53d1b6462183","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-500,300],"parameters":{"width":220,"height":340,"content":"## Set Scope (optional)\nBy default the last three moths are being backed up.\n_0 = current month, 1 = last month, etc._"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"a0ebb845-7472-40ec-b2b5-abc2f118b0e1","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[160,360],"parameters":{"color":7,"width":220,"height":280,"content":"A detailed report is being retrieved for every month across all entries in the workspace."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"feb9f194-4c9d-41c8-9b46-3759dcdae9d5","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[380,100],"parameters":{"color":7,"width":920,"height":780,"content":"The reports are created or updated in GitHub.\n**It is essential to back up previous months as well, as values like tags may still change over time.**"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."}],"active":false,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"34ab93f2-a965-42ac-bd44-478c19a0f7d6","connections":{"Extract from File":{"main":[[]]},"Get detailed monthly report":{"main":[[],[],[],[],[],[],[],[]]}},"description":"Automated workflow: Clockify Backup Template. This workflow integrates 12 different services: filter, httpRequest, stickyNote, scheduleTrigger, splitOut. It contains 23 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Clockify Backup Template. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}