Workflow: Todoist Weekly Review Template
Integrations: code, emailSend, httpRequest, manualTrigger, scheduleTrigger

{"id": "VLRbAr4OrtnHUU2l", "name": "Todoist Weekly Review Template", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "45351dbb-6c0c-4442-a350-35d966a26fa1", "name": "When clicking \u2018Test workflow\u2019", "type": "n8n-nodes-base.manualTrigger", "position": [0, 180], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "9644a07e-0b97-4b48-846c-821f620128cc", "name": "Get completed tasks via Todoist API", "type": "n8n-nodes-base.httpRequest", "position": [220, 0], "parameters": {"url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "authentication": "{{ $credentials.predefinedCredentialType }}", "bodyParameters": {"parameters": [{"name": "since", "value": "={{ $now.minus(7, 'days') }}"}, {"name": "until", "value": "={{ $now }}"}]}, "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"todoistApi": {}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "94f40824-43ff-45ae-adfd-b18a5903cba1", "name": "Optional: Ignore specific projects", "type": "n8n-nodes-base.code", "position": [440, 0], "parameters": {"jsCode": "// maintain this array with ignored Todoist project_id's\n// empty \"[]\" it when you don't want to ignore any\nconst ignoredProjects = ['2335544024'];\n\n// Remove ignored projects\nconst items = $input.all()[0].json.items;\nvar newItems = [];\nfor(j = 0; j < items.length; j++) {\n  if(!ignoredProjects.includes(items[j].project_id)) {\n    newItems.push(items[j]);\n  }\n}\n\nreturn newItems;"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "c50b00d6-4e9c-43e5-b6b8-ee0caac78c68", "name": "Format the email body", "type": "n8n-nodes-base.code", "position": [660, 0], "parameters": {"jsCode": "const items = $input.all();\n\n// Group items by day\nconst grouped = items.reduce((acc, item) => {\n  const date = new Date(item.json.completed_at).toISOString().split('T')[0];\n  acc[date] = acc[date] || [];\n  acc[date].push(item.json.content);\n  return acc;\n}, {});\n\n// Format the grouped data into an HTML string for the email\nlet emailBody = \"<h1>Completed Items</h1>\";\nfor (const [date, contents] of Object.entries(grouped)) {\n  emailBody += `<h2>${date}</h2><ul>`;\n  contents.forEach(content => {\n    emailBody += `<li>${content}</li>`;\n  });\n  emailBody += `</ul>`;\n}\n\nreturn [{ json: { emailBody } }];\n"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "42b38a9b-2dbc-46f5-895c-f8597eb48bf1", "name": "Every Friday afternoon", "type": "n8n-nodes-base.scheduleTrigger", "position": [0, 0], "parameters": {"rule": {"interval": [{"field": "weeks", "triggerAtDay": [5], "triggerAtHour": 15}]}}, "typeVersion": 1.2, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "adece42d-d84a-41c8-8269-35ba08879e52", "name": "Send Email", "type": "n8n-nodes-base.emailSend", "position": [860, 0], "parameters": {"options": {}, "subject": "Todoist Weekly Review", "emailFormat": "={{ $('Format the email body').item.json.emailBody }}"}, "typeVersion": 2.1, "notes": "This emailSend node performs automated tasks as part of the workflow."}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "fcf19ca1-c2bc-4832-8cfe-184424484f60", "connections": {"9644a07e-0b97-4b48-846c-821f620128cc": {"main": [[{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc", "type": "main", "index": 0}], [{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc-fe0efe6b", "type": "main", "index": 0}], [{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc-7ed1cfa3", "type": "main", "index": 0}], [{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc-2fa2290e", "type": "main", "index": 0}], [{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc-253c3f80", "type": "main", "index": 0}], [{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc-48dab3ce", "type": "main", "index": 0}], [{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc-f6ea80b2", "type": "main", "index": 0}], [{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc-84bace8c", "type": "main", "index": 0}], [{"node": "error-handler-9644a07e-0b97-4b48-846c-821f620128cc-ea9672fc", "type": "main", "index": 0}]]}, "adece42d-d84a-41c8-8269-35ba08879e52": {"main": [[{"node": "error-handler-adece42d-d84a-41c8-8269-35ba08879e52-02308f8d", "type": "main", "index": 0}], [{"node": "error-handler-adece42d-d84a-41c8-8269-35ba08879e52-d1b77c95", "type": "main", "index": 0}], [{"node": "error-handler-adece42d-d84a-41c8-8269-35ba08879e52-cd25e91b", "type": "main", "index": 0}], [{"node": "error-handler-adece42d-d84a-41c8-8269-35ba08879e52-ceefcf75", "type": "main", "index": 0}], [{"node": "error-handler-adece42d-d84a-41c8-8269-35ba08879e52-95aa7064", "type": "main", "index": 0}], [{"node": "error-handler-adece42d-d84a-41c8-8269-35ba08879e52-6c120159", "type": "main", "index": 0}], [{"node": "error-handler-adece42d-d84a-41c8-8269-35ba08879e52-2c934178", "type": "main", "index": 0}], [{"node": "error-handler-adece42d-d84a-41c8-8269-35ba08879e52-7c0b4044", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Todoist Weekly Review Template. This workflow processes data and performs automated tasks.", "meta": {"instanceId": "workflow-25bc2f0b", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:43.584725", "updatedAt": "2025-09-29T07:07:43.584747", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "notes": "Excellent quality workflow: Todoist Weekly Review Template. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}