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 →
{
"nodes": [
{
"id": "d45cf237-dbbc-48ed-a7f0-fa9506ae1d67",
"name": "Update priority in todoist",
"type": "n8n-nodes-base.todoist",
"position": [
2060,
520
],
"parameters": {
"taskId": "={{ $('Get inbox tasks').item.json.id }}",
"operation": "update",
"updateFields": {
"priority": "={{ $('Your Projects').first().json.projects[$json.message.content] }}"
}
},
"credentials": {
"todoistApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 2,
"waitBetweenTries": 5000
},
{
"id": "4d0ebf98-5a1d-4dfd-85df-da182b3c5099",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
600,
520
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "a950e470-6885-42f4-9b17-7b2c2525d3e4",
"name": "Get inbox tasks",
"type": "n8n-nodes-base.todoist",
"position": [
1020,
520
],
"parameters": {
"filters": {
"projectId": "938017196"
},
"operation": "getAll",
"returnAll": true
},
"credentials": {
"todoistApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 2,
"waitBetweenTries": 5000
},
{
"id": "093bcb2e-79b7-427e-b13d-540a5b28f427",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
540,
200
],
"parameters": {
"color": 3,
"width": 358.6620209059232,
"height": 256.5853658536585,
"content": "## \ud83d\udcab To setup this template\n\n1. Add your Todoist credentials\n2. Add your OpenAI credentials\n3. Set your project names and add priority"
},
"typeVersion": 1
},
{
"id": "430290e7-1732-46fe-a38d-fa6dc7f78a26",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
700
],
"parameters": {
"width": 192.77351916376313,
"height": 80,
"content": " \ud83d\udc46\ud83c\udffd Add your projects and priority here"
},
"typeVersion": 1
},
{
"id": "6d5a1b7e-f7fa-4a1b-848c-1b4e79f6f667",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1020,
420
],
"parameters": {
"width": 192.77351916376313,
"height": 80,
"content": " \ud83d\udc47\ud83c\udffd Add your Todoist credentials here"
},
"typeVersion": 1
},
{
"id": "feff35d2-e37d-48a5-9a90-c5a2efde688f",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2060,
420
],
"parameters": {
"width": 192.77351916376313,
"height": 80,
"content": " \ud83d\udc47\ud83c\udffd Add your Todoist credentials here"
},
"typeVersion": 1
},
{
"id": "e454ebfe-47f6-4e39-8b89-d706da742911",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1540,
700
],
"parameters": {
"width": 192.77351916376313,
"height": 80,
"content": " \ud83d\udc46\ud83c\udffd Add your OpenAI credentials here"
},
"typeVersion": 1
},
{
"id": "a79effcb-6904-4abf-835b-e1ccd94ca429",
"name": "Your Projects",
"type": "n8n-nodes-base.set",
"position": [
820,
520
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "50dc1412-21f8-4158-898d-3940a146586b",
"name": "projects",
"type": "object",
"value": "={{ {\n apartment: 1,\n health: 2,\n german: 3\n} }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b5988629-2225-455f-b579-73e60449d2a3",
"name": "Categorize",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1460,
520
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "=Categorize the user's todo item to a project. Return the project name or just \"other\" if it does not belong to a project."
},
{
"content": "=Projects:\n{{ $('Your Projects').first().json.projects.keys().join('\\n') }}\n\nTodo item:\n{{ $('Get inbox tasks').item.json.content }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.4
},
{
"id": "0dca3953-c0ac-4319-9323-c3aed9488bfb",
"name": "If task is not a subtask",
"type": "n8n-nodes-base.filter",
"position": [
1240,
520
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "36dd4bc9-1282-4342-89dd-1dac81c7290e",
"operator": {
"type": "string",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $json.parent_id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.1
},
{
"id": "12e25a81-dbde-4542-a137-365329da415e",
"name": "If other or ai hallucinates",
"type": "n8n-nodes-base.filter",
"position": [
1820,
520
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c4f69265-abe1-451c-8462-e68ff3b06799",
"operator": {
"type": "array",
"operation": "contains",
"rightType": "any"
},
"leftValue": "={{ $('Your Projects').first().json.projects.keys() }}",
"rightValue": "={{ $json.message.content }}"
}
]
}
},
"typeVersion": 2.1
}
],
"connections": {
"Categorize": {
"main": [
[
{
"node": "If other or ai hallucinates",
"type": "main",
"index": 0
}
]
]
},
"Your Projects": {
"main": [
[
{
"node": "Get inbox tasks",
"type": "main",
"index": 0
}
]
]
},
"Get inbox tasks": {
"main": [
[
{
"node": "If task is not a subtask",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Your Projects",
"type": "main",
"index": 0
}
]
]
},
"If task is not a subtask": {
"main": [
[
{
"node": "Categorize",
"type": "main",
"index": 0
}
]
]
},
"If other or ai hallucinates": {
"main": [
[
{
"node": "Update priority in todoist",
"type": "main",
"index": 0
}
]
]
}
}
}
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.
openAiApitodoistApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow automates the management of your Todoist tasks by prioritising them based on an intelligent assessment of urgency and importance, saving you time on manual sorting each day. It runs on a schedule to fetch tasks from your Todoist inbox, analyses them using OpenAI to determine priorities, and updates them accordingly in Todoist. Ideal for busy professionals or anyone with a packed task list who wants AI-driven organisation without constant oversight, the key step involves OpenAI evaluating task descriptions against custom criteria for accurate prioritisation.
Use this workflow when you have recurring Todoist tasks that need daily reassessment, such as work projects or personal goals, to maintain focus on high-impact items. Avoid it if your tasks are simple or unchanging, as the AI analysis adds unnecessary complexity; opt for basic filters instead. Common variations include adjusting the cron schedule for weekly runs or integrating additional apps like email notifications for priority shifts.
About this workflow
Schedule Filter. Uses todoist, scheduleTrigger, stickyNote, openAi. Scheduled trigger; 12 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
Schedule Filter. Uses todoist, scheduleTrigger, stickyNote, openAi. Scheduled trigger; 12 nodes.
Code Todoist. Uses stickyNote, todoist, scheduleTrigger. Scheduled trigger; 13 nodes.
Automatically create todo items in Todoist every morning.
Schedule Removeduplicates. Uses scheduleTrigger, jira, lmChatOpenAi, outputParserStructured. Scheduled trigger; 27 nodes.
Schedule Removeduplicates. Uses scheduleTrigger, microsoftOutlook, lmChatOpenAi, outputParserStructured. Scheduled trigger; 12 nodes.