{"product_id":"sync-notion-to-todoist-with-n8n-webhooks-redis-locks","title":"Sync Notion to Todoist with n8n Webhooks + Redis Locks","description":"\u003ch3\u003eSync Notion database changes to Todoist tasks—safely, automatically, and loop-proof\u003c\/h3\u003e\n\u003cp\u003eThis \u003cstrong\u003en8n workflow\u003c\/strong\u003e listens for \u003cstrong\u003eNotion\u003c\/strong\u003e page events and keeps your corresponding \u003cstrong\u003eTodoist\u003c\/strong\u003e tasks in sync—creating, updating, moving, completing\/reopening, or deleting tasks as needed. It also uses \u003cstrong\u003eRedis locks\u003c\/strong\u003e to prevent sync loops when changes bounce back and forth between systems.\u003c\/p\u003e\n\n\u003ch3\u003eWhat this workflow does\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eReceives webhook events from Notion\u003c\/strong\u003e via a POST request from a Notion automation when a database page is created, updated, or deleted.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePrevents processing loops with Redis locks\u003c\/strong\u003e by checking for a short-lived lock on the Notion page ID before continuing.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eFetches the full Notion page\u003c\/strong\u003e through the Notion API and maps key properties (such as title, section, priority, due\/recurrence, and status) into a Todoist task payload.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eHandles deletions and obsolescence\u003c\/strong\u003e: if the page is deleted, in the trash, or moved to an “Obsolete” section, the workflow deletes the matching Todoist task (when a Todoist task ID exists on the Notion page).\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCreates tasks on new pages\u003c\/strong\u003e: when a page is newly created, it creates a Todoist task and writes the returned Todoist task ID back to the Notion page.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eUpdates tasks on property changes\u003c\/strong\u003e: retrieves the existing Todoist task, computes differences, updates fields, moves the task to the correct Todoist section, and closes or reopens it based on the Notion status.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSets short-lived locks\u003c\/strong\u003e for the relevant Notion\/Todoist identifiers and ends the run cleanly.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eUse cases\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eMaintain a single source of truth in \u003cstrong\u003eNotion\u003c\/strong\u003e while executing tasks in \u003cstrong\u003eTodoist\u003c\/strong\u003e.\u003c\/li\u003e\n  \u003cli\u003eAutomatically mark Todoist tasks complete\/reopen when the Notion status changes.\u003c\/li\u003e\n  \u003cli\u003eMove work through Todoist sections based on Notion database fields (e.g., priority or workflow stage).\u003c\/li\u003e\n  \u003cli\u003eRemove outdated items by deleting corresponding Todoist tasks when Notion pages are trashed or moved to “Obsolete”.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTechnical details\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eIntegrations:\u003c\/strong\u003e Notion API, Todoist API\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eWebhook-driven:\u003c\/strong\u003e HTTP POST receiver for Notion database page events\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eRedis support:\u003c\/strong\u003e Redis locks to prevent sync loops\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003en8n nodes used:\u003c\/strong\u003e if, set, code, no op, redis, filter\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSetup:\u003c\/strong\u003e Add \u003ccode\u003enotion_token\u003c\/code\u003e and \u003ccode\u003etodoist_token\u003c\/code\u003e in the Globals step (or use n8n credentials), and create Notion database properties that match the workflow’s field mapping (including a place to store the Todoist task ID).\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"N8N Commerce","offers":[{"title":"Default Title","offer_id":46132773486771,"sku":"N8N-20182","price":74.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0749\/6279\/6723\/files\/EaGxB5mW4050jTJtDMdTn_HUEGg37Y.png?v=1790759215","url":"https:\/\/buyflowscripts.com\/products\/sync-notion-to-todoist-with-n8n-webhooks-redis-locks","provider":"N8N Commerce","version":"1.0","type":"link"}