How to Set Up Realtime Two-Way Sync Between Notion and Todoist
Why Bother Syncing Notion and Todoist?
You know that feeling when you tick something off in Todoist, then later realize the task is still sitting there in your Notion database, untouched? Or you update a due date in Notion and forget to change it in Todoist? That constant back-and-forth can get old fast.
This n8n workflow template solves exactly that problem. It keeps your Notion databases and Todoist projects in sync, in realtime, in both directions. Update a task in one place, and the other follows along automatically. No more double entry, no more “which one is the truth?” confusion.
In this guide, we will walk through what this Notion-Todoist realtime sync template actually does, when you should use it, and how to set it up in n8n without losing your mind in the process.
What This Notion – Todoist Sync Workflow Actually Does
At its core, this workflow acts as a translator and traffic controller between Notion and Todoist. It watches both sides, keeps them aligned, and avoids the usual sync nightmares like infinite loops or conflicting updates.
Main Features at a Glance
- Fetches projects and sections from Todoist so you can choose what to sync
- Retrieves databases and pages from Notion for mapping to those projects
- Maps task properties between Notion and Todoist, including status, priority, and due dates
- Handles task creation, updates, completion, and deletion on both sides
- Uses Redis for caching and locking so you do not end up with endless update loops
- Supports webhooks for realtime updates instead of relying only on polling
- Generates a summary report after each sync and sends it as an email (optional but super handy)
When Should You Use This Template?
This workflow is ideal if:
- You plan and track work in Notion databases but prefer Todoist for daily task execution
- You want a trusted “single source of truth” but still need both tools for different workflows
- You are tired of manually copying tasks between Notion and Todoist
- You need realtime or near-realtime updates, not just a nightly batch sync
If that sounds like your current setup, this template can quietly take over the boring syncing work in the background so you can focus on your actual tasks.
What You Need Before You Start
1. Tools and Accounts Required
Here is the basic checklist:
- Notion: A workspace with at least one database that holds your tasks. The database needs specific properties, for example:
- Name (task title)
- Status (for mapping to Todoist sections)
- Priority
- Due date
- Focus checkbox (optional workflow logic)
- Todoist ID (used to link each Notion task to the corresponding Todoist task)
- Todoist: A project with sections that match your Notion Status options. For example, if Notion has “To Do”, “Doing”, “Done”, you should have similar sections in Todoist.
- Redis: A cloud or self-hosted Redis instance. This is used for caching and locking so that the workflow can prevent race conditions and infinite update loops.
- n8n.io: An n8n instance where you can import and run this workflow template.
2. Credentials You Need to Configure in n8n
Inside n8n, you will set up credentials for:
- Notion API access so the workflow can read and update your databases
- Todoist REST and Sync API using OAuth for secure access to your tasks
- Redis connection details for cache and lock handling
- Gmail or SMTP (optional) if you want email notifications with sync summaries
How the Workflow Is Structured
The template is not just a single flat flow. It is made up of several logical parts that each handle a specific piece of the sync puzzle.
1. Setup Helpers
These are your “get everything ready” tools inside the template:
- Notion-Todoist Sync Setup Helper: This helper guides you through generating a configuration JSON that defines how your Notion databases map to your Todoist projects and sections. Once generated, that JSON is used by the workflow to understand what goes where.
- Todoist Webhook Setup Helper: Handles the OAuth authorization with Todoist and activates the webhook. This is what lets Todoist push realtime updates to n8n whenever tasks change.
2. Data Retrieval from Both Apps
Before anything can sync, the workflow needs to know what exists in each tool.
- Get Projects: Pulls in your Todoist projects so you can decide which ones should be linked to Notion.
- Get Sections: Fetches Todoist sections from the chosen project. These are mapped to Notion Status values so both sides agree on what “To Do”, “In Progress”, or “Done” mean.
- Get Notion Databases: Lists available Notion databases so you can pick the one that holds your tasks.
3. Mapping Tasks Between Notion and Todoist
This is where the magic happens. The workflow converts data from one format to the other so each side understands it correctly.
- Map Notion to Todoist: Takes a Notion task and transforms it into the structure Todoist expects. This includes:
- Translating Notion Status to the correct Todoist section
- Mapping Notion Priority to Todoist priority levels
- Handling due dates so deadlines stay aligned
- Passing through the Todoist ID when it exists
- Map Todoist to Notion: Does the reverse. It reads Todoist task data and converts it to Notion properties. It also deals with edge cases, like completed tasks, missing fields, or subtle differences in how each platform represents status and dates.
4. Sync Handlers: Keeping Everything in Step
Once mapping is in place, the workflow uses different flows to decide what to do with each task.
- Tasks only in Notion: If a task exists in Notion but not in Todoist, the workflow creates or updates it in Todoist.
- Tasks only in Todoist: If a task appears in Todoist but is missing in Notion, it gets created or updated in the Notion database.
- Tasks modified in either system: When a task is changed in one tool, that change is propagated to the other. This covers updates to things like title, status, priority, or due date.
- Deletion and completion events: If a task is completed or deleted in one system, the workflow marks or removes it appropriately in the other so you do not end up with ghost tasks.
5. Concurrency Control with Redis Locks
Here is where Redis comes in. Without some form of locking, a change in Notion could trigger an update in Todoist, which then triggers another update back to Notion, and so on. That is the infinite loop problem.
The workflow uses Redis to set locks and flags that control when updates are allowed to propagate:
- Locks when updating Todoist task IDs so they are not overwritten unexpectedly
- Locks when modifying Notion pages to avoid two flows editing the same page at once
- Flags that indicate when a task is in the middle of being created or updated, so duplicate operations are skipped
This keeps things stable even when many changes happen quickly.
6. Error Handling and Retry Logic
APIs are not always perfect. Sometimes requests fail temporarily or rate limits kick in. The workflow is built with robust retries so that transient issues do not break your sync.
It uses:
- Retry limits to avoid endless attempts
- Wait times before retrying API calls
- Graceful handling of temporary failures so you can keep working while the workflow recovers
7. Reporting and Email Notifications
After each sync run, the workflow gathers all the changes it has made and builds a clear HTML summary. This summary can be emailed to you using Gmail or another SMTP provider.
The report typically includes:
- Tasks created or updated in Notion
- Tasks created or updated in Todoist
- Completion or deletion events processed
This is incredibly useful for monitoring and auditing what is going on behind the scenes.
How to Set Up the Realtime Two-Way Sync in n8n
Let us walk through the setup from start to finish so you can get the workflow running smoothly.
- Clone the workflow template into your n8n instance.
Import or clone the provided Notion-Todoist realtime sync template so it appears in your n8n workflows list. - Configure all required credentials and environment variables.
In n8n, set up:- Notion API credentials
- Todoist REST and Sync API credentials using OAuth
- Redis connection details
- Gmail or SMTP credentials if you want email reporting
- Run the “Notion-Todoist Sync Setup Helper”.
This helper will:- Guide you through selecting the Notion database and Todoist project
- Help you define how statuses and properties map between the two
- Generate a configuration JSON that the rest of the workflow uses
After that, update all Globals nodes with this config so the entire workflow is aligned.
- Set up the Todoist Developer App and webhook.
In Todoist:- Create or configure your Todoist Developer App
- Use the Todoist Webhook Setup Helper inside n8n to complete OAuth and activate the webhook
This lets Todoist notify n8n whenever tasks are created, updated, completed, or deleted.
- Configure the Notion webhook or automation trigger.
Set up a Notion Automation or a webhook emulator that calls your n8n webhook whenever a relevant page (task) changes. This keeps Notion updates flowing into the sync. - Run the initial full sync.
Use the Full Sync workflow to perform the first complete synchronization between Notion and Todoist. This step ensures that existing tasks on both sides are aligned before you rely on realtime updates. - Activate all workflows and set your schedule.
Once the full sync looks good:- Activate the realtime workflows that listen to webhooks
- Optionally schedule periodic sync checks for extra safety
- Confirm that new changes in either Notion or Todoist show up correctly on the other side
Best Practices for a Smooth Notion – Todoist Sync
To keep things running cleanly, a few habits go a long way:
- Keep naming consistent. Make sure your Notion Status options match the Todoist sections you are mapping to. Consistent names reduce confusion and mapping errors.
- Use Redis or a similar cache reliably. Do not skip the Redis setup. It is what keeps concurrency under control and prevents infinite loops when updates bounce between both tools.
- Maintain your priority and status mappings. If you change your Notion database structure or Todoist project setup, update your mappings in the config JSON so the workflow stays accurate.
- Review the email reports regularly. Use the HTML summary emails for monitoring and debugging. If something looks off, the report often gives you the first clue about what changed and where.
Why This Template Makes Your Life Easier
Once this workflow is in place, you can treat Notion and Todoist as one connected system instead of two separate islands. Plan and document in Notion, manage your daily to-dos in Todoist, and let n8n quietly keep everything in sync.
No more manual copying, no more wondering which app has the latest version of a task, and no more surprise duplicates. Just a smooth, realtime two-way sync powered by webhooks, APIs, and smart cache control.
Get Started with the Notion – Todoist Realtime Sync
Ready to unify your task management setup?
Clone this workflow into your n8n instance, hook it up to your Notion and Todoist accounts, and let the automation handle the rest. You will get a powerful, reliable, out-of-the-box synchronization system that fits right into your existing tools.
Need a hand? If you want help with onboarding or need customizations for your particular workflow, you can reach out for more detailed guidance or tailored changes.
