Realtime Notion Todoist 2-way Sync Template

Automated workflow: Realtime Notion Todoist 2-way Sync Template. This workflow integrates 29 different services: stickyNote, scheduleTrigger, merge, switch, redis. It contains 264 nodes and follows best practices for error handling and security.

Workflow Structure (174 nodes)
100%
Form Trigger
Notion-Todoist Sync Setup Helper
Notion
Get Notion Databases
Code
Prep Dropdown
Form
Choose Notion Database
Webhook
OAuth redirect
Form Trigger
Todoist Webhook Setup Helper
Code
Get Notion Database ID
Crypto
Generate security token
Code
Get variables
Http Request
Get projects
If
Verify security token
Code
Store variables
Code
Prep Dropdown1
Form
Redirect to Auth Page
Http Request
Exchange Tokens
Form
Choose Todoist Project
Respond To Webhook
Respond with success
Respond To Webhook
Respond with error
Code
Get Todoist Project ID
Http Request
Get sections
Code
Generate config
Form
Return config JSON
Schedule Trigger
Schedule Trigger
Todoist
Todoist
Notion
Notion
Set
Globals
Set
Pick Todoist Fields
Code
Map Notion to Todoist
Compare Datasets
Compare Datasets
Code
Handle empty dates
Code
Handle empty dates2
Http Request
Update Task in Todoist
Set
Add project ID
If
If Todoist ID exists
Filter
Status changed
Redis
Lock Todoist ID2
Set
Prepare summary data
If
If tries left
Stop And Error
Retry limit reached
Set
Set tries
Todoist
Get Todoist Task
Redis
Lock Todoist ID1
If
Catch known error
Todoist
Mark as Incomplete in Todoist
Http Request
Create task in Todoist
Wait
Wait
Set
Get mapped item1
Notion
Store Todoist ID
Redis
Lock Todoist ID
Http Request
Update task in Todoist
Set
Update tries
Set
Get mapped item
Set
Get mapped item2
Merge
Merge
Split In Batches
Loop Over Items1
Merge
Merge summary
Crypto
Generate UUID
Filter
Filter out status changes
Set
Prepare Batching Items
Code
Map Todoist to Notion
Aggregate
Aggregate
Set
Map summary fields
Http Request
Update section (Sync API)
Html
Convert to HTML Table
Html
Generate email body
Gmail
Gmail
Webhook
Notion Webhook
If
Body is array?
Split Out
Split out Notion changes
Set
Extract IDs
No Op
Notion trigger reference
Set
Globals2
Execution Data
Execution Data5
Redis
Check if Notion ID is locked
Filter
Only continue if not locked1
Notion
Get Notion task
Code
Map Notion to Todoist2
Execution Data
Execution Data6
If
Status is Obsolete?
If
Neither focussed nor planned
If
Todoist ID exists?
If
If tries left1
Stop And Error
Retry limit reached1
Set
Set tries1
Todoist
Get Todoist Task2
If
Catch known error1
Wait
Wait1
Set
Update tries1
Filter
Requires completion change
Filter
Differences exist
Filter
Todoist ID exists
Filter
Status changed but not empty
Filter
Status is not Done
If
Has been completed?
Redis
Check if creating flag exists
Crypto
Generate UUID2
Filter
Only continue if flag does not exist
Todoist
Mark as Completed in Todoist1
Http Request
Update task in Todoist1
Todoist
Mark as Incomplete in Todoist1
Http Request
Update section (Sync API)2
Todoist
Delete Task in Todoist2
Redis
Set creating flag
Set
Get todoist ID
Set
Get todoist ID1
Http Request
Create task in Todoist1
Notion
Store Todoist ID1
Redis
Lock Todoist ID4
Webhook
Todoist Webhook
Execute Workflow Trigger
Execute Workflow Trigger
Switch
Switch by project
Webhook
Webhook
No Op
Todoist trigger reference
Switch
Switch
Execution Data
Execution Data
Set
Globals1
Execute Workflow
Execute Workflow
Execute Workflow
Execute Workflow1
Redis
Check if Todoist ID is locked
Split In Batches
Loop Over Items
Filter
Only continue if not locked
If
Exists/Completed in Notion
Notion
Get Notion Task
If
If event is not :deleted
Code
Map Notion to Todoist1
If
If tries left2
Code
Handle empty dates1
Set
Set tries2
Stop And Error
Retry limit reached2
Http Request
Update task in Todoist before closing
Todoist
Get Todoist Task1
If
Status is Done
If
Catch known error2
Todoist
Mark as Completed in Todoist
Todoist
Delete Task in Todoist
No Op
End here
Wait
Wait2
Set
Prepare summary data1
Set
Prepare summary data2
Set
Update tries2
Code
Map Todoist to Notion1
Execution Data
Execution Data1
Notion
Get Notion Task1
If
Notion Task not found
Redis
Check if creating flag exists1
Execution Data
Execution Data3
Filter
Only continue if flag does not exist1
Notion
Get Notion Task2
Switch
Switch by Event
Filter
Differences exist1
Filter
Requires completion change1
Filter
Description has changed in Todoist
Redis
Set creating flag1
Filter
Notion Task found1
Todoist
Update Description in Todoist1
Code
Get Backlog Section ID
Execution Data
Execution Data4
If
Has not been completed?
Notion
Create task in Notion
Crypto
Generate UUID1
Filter
Neither focussed nor planned1
Filter
Due date empty
Notion
Update task in Notion
Notion
Mark as Done in Notion
Notion
Mark as Obsolete in Notion
Notion
Mark as In Progress in Notion
Http Request
Update section (Sync API)1
Notion
Mark as Focussed in Notion
Execution Data
Execution Data2
Code
Turn Markdown into Notion Blocks
Todoist
Update Description in Todoist
Split Out
Handle each block separately
Notion
Append Notion Block
Redis
Lock Notion ID
Node Types:
http
action
code
default
logic
trigger
transform
Requires credentials

Prerequisites

Required Credentials (4)

Gmail

Used by: Gmail

Docs

Notion

Used by: Get Notion Databases, Notion +13 more

Docs

Redis

Used by: Lock Todoist ID, Lock Todoist ID1 +9 more

Docs

Todoist

Used by: Get projects, Get sections +21 more

Docs

Multiple services required

This workflow needs 4 different credentials. Make sure you have accounts for all services before importing.

Complexity

Advanced

Expert level. Custom code, complex logic, many integrations.

Setup time: ~55 min
Score: 95/100
Custom Code
Conditional Logic
Loops
19 Integrations

When to Use This Workflow

Email Automation

Automate email responses, forwarding, or organization based on rules.

Handle routine email tasks automatically and focus on what matters.

Scheduled Operations

Run automated tasks at specific times - daily reports, weekly cleanups, monthly backups.

Set it and forget it - reliable automation that runs on your schedule.

Real-time Response

React instantly when events happen - new orders, form submissions, or API calls.

Zero delay between trigger and action for time-sensitive workflows.

workflow.json
{
  "id": "k9abwUyVzl7OCsAl",
  "meta": {
    "instanceId": "workflow-e5bb739b",
    "versionId": "1.0.0",
    "createdAt": "2025-09-29T07:08:01.496367",
    "updatedAt": "2025-09-29T07:08:01.496381",
    "owner": "n8n-user",
    "license": "MIT",
    "category": "automation",
    "status": "active",
    "priority": "high",
    "environment": "production"
  },
  "name": "Realtime Notion Todoist 2-way Sync Template",
  "tags": [
    "automation",
    "n8n",
    "production-ready",
    "excellent",
...

Workflow Details

Nodes
246
Trigger
Webhook
Source
community
Added
Sep 29, 2025

Need Help?

Check out the official n8n documentation for detailed guides.

Related Workflows

Agent Workflow

Automated workflow: Agent Workflow. This workflow integrates 97 different services: vectorStoreInMemory, if, gumroadTrig...

Bitly
Dropbox
Gmail
Google-calendar
113 nodesEvent

Scheduletrigger Workflow

Automated workflow: Scheduletrigger Workflow. This workflow integrates 18 different services: filter, formTrigger, stick...

Schedule
Airtable
Gmail
Executeworkflow
33 nodesScheduled

Scheduletrigger Workflow

Automated workflow: Scheduletrigger Workflow. This workflow integrates 18 different services: filter, formTrigger, stick...

Schedule
Airtable
Gmail
Executeworkflow
33 nodesScheduled

Scheduletrigger Workflow

Automated workflow: Scheduletrigger Workflow. This workflow integrates 18 different services: filter, formTrigger, stick...

Schedule
Airtable
Gmail
Executeworkflow
33 nodesScheduled

Outputparserstructured Workflow

Automated workflow: Outputparserstructured Workflow. This workflow integrates 24 different services: stickyNote, merge,...

Form
Executeworkflow
Executiondata
Notion
85 nodesEvent

Webhook Workflow

Automated workflow: Webhook Workflow. This workflow integrates 18 different services: webhook, stickyNote, httpRequest,...

Webhook
Googlecalendartool
Executeworkflow
Http-request
31 nodesWebhook