Sync tasks between Todoist and Notion with Redis-powered 2-way logic
Purpose This solution enables you to manage all your Notion and Todoist tasks from different workspaces as well as your calendar events in a single place. This is 2 way sync with partial support for recurring How it w...
Template notes
Purpose
This solution enables you to manage all your Notion and Todoist tasks from different workspaces as well as your calendar events in a single place. This is 2 way sync with partial support for recurring
How it works
- The realtime sync consists of two workflows, both triggered by a registered webhook from either Notion or Todoist. - To avoid overwrites by lately arriving webhook calls, every time the current task is retrieved from both sides. - Redis is used to prevent from endless loops, since an update in one system triggers another webhook call again. Using the ID of the task, the trigger is being locked down for 80 seconds. - Depending on the detected changes, the other side is updated accordingly .Generally Notion is treaded as the main source. Using an "Obsolete" Status, it is guaranteed, that tasks never get deleted entirely by accident. - The Todoist ID is stored in the Notion task, so they stay linked together - An additional full sync workflow daily fixes inconsistencies, if any of them occurred, since webhooks cannot be trusted entirely. - Since Todoist requires a more complex setup, a tiny workflow helps with activating the webhook. - Another tiny workflow helps generating a global config, which is used by all workflows for mapping purposes.
Mapping (Notion >> Todoist)
- Name: Task Name - Priority: Priority (1: do first, 2: urgent, 3: important, 4: unset) - Due: Date - Status: Section (Done: completed, Obsolete: deleted) - <pagelink>: Description (read-only) - Todoist ID: <taskid>
Current limitations
- Changes on the same task cannot be made simultaneously in both systems within a 15-20 second time frame. - Subtasks are not linked automatically to their parent yet. - Tasks names do not support URL’s yet.