Opening Problem Statement
Meet James, a freelance project manager juggling multiple client tasks every day. James uses Todoist to keep track of his to-dos but also relies heavily on Notion for more detailed project documentation and team sharing. He often finds himself manually copying tasks from Todoist into Notion, a repetitive chore consuming hours each week and prone to errors. This manual sync causes delays, missed updates, and sometimes duplicate entries, affecting his productivity and client satisfaction.
Imagine losing around 4-6 hours per week just transferring tasks between these two apps, with the risk of overlooking crucial project details or deadlines. Thatβs exactly the problem James needs to solve.
What This Automation Does
This n8n workflow automates the sync of Todoist tasks to Notion, focusing specifically on tasks marked with a label “send-to-notion”. When active, it:
- Triggers on a scheduled interval (every few seconds as configured) to check for new tasks with a specific label in Todoist.
- Fetches all tasks from Todoist that have the “send-to-notion” label applied.
- Adds each fetched task as a page in a specified Notion database, mapping the task’s content and ID.
- Updates the original Todoist task to replace the label “send-to-notion” with “sent” and appends a Notion link to the task description for easy reference.
Effectively, it saves James hours of manual data entry every week, significantly reduces errors, and creates a seamless, traceable connection between Todoist and Notion task data.
Prerequisites βοΈ
- n8n Account (cloud or self-hosted) π
- Todoist Account with OAuth2 credentials set up in n8n π§ π
- Notion Account with an API integration and access to the target database π π
- Configured Todoist label for tasks to sync (e.g., “send-to-notion”)
- Basic familiarity with n8n workflow setup
Step-by-Step Guide
Step 1: Create a Schedule Trigger
In n8n, start by adding a Schedule Trigger node to run the workflow periodically.
- Navigate to Nodes β Triggers β Schedule Trigger.
- Set the interval to run every few seconds (e.g., “interval: seconds β 30 seconds”) or your desired frequency.
- You should see a test message indicating the workflow triggers correctly.
- Common mistake: Setting the interval too low may cause rate limit issues with external APIs.
Step 2: Add Todoist Node to Fetch Tasks with Label
Add the Todoist node after the schedule trigger to get all tasks with your chosen label.
- Click Nodes β Integrations β Todoist.
- Choose Operation: Get All and under filters, set LabelId to “send-to-notion” (you need to use label ID, which you can get from the Todoist interface or the API).
- Authenticate using OAuth2 credentials for your Todoist account.
- This node will now fetch all tasks you want to sync.
- Common mistake: Using label name instead of the numeric label ID will cause the node to return empty results.
Step 3: Configure Notion Node to Add Tasks
Next, insert the Notion node to create pages in your target database for each task.
- Add Nodes β Integrations β Notion.
- Set your Database ID by pasting the Notion database URL or selecting it from the list if already cached.
- Map the Title property to the Content of the Todoist task using an expression:
{{ $json.content }}. - Also map a numeric property for Todoist ID as
{{ parseInt($json.id) }}to keep track of linked tasks. - Authenticate with your Notion API credentials.
- Common mistake: Using a wrong database ID or lacking the correct database permissions will cause errors.
Step 4: Update Todoist Task to Replace Label and Add Notion Link
Finally, add another Todoist node to update the task after syncing:
- Choose Operation: Update and set Task ID dynamically to the current task ID using expression syntax:
{{ $('Get all tasks with specific label').item.json.id }}. - Replace the label “send-to-notion” with a new one, e.g., “sent”.
- Add the Notion task page URL to the Todoist task description using the expression:
Notion Link: {{ $json.url }}.{{ $('Get all tasks with specific label').item.json.description }}
- This provides a quick way to navigate back to Notion from Todoist.
- Common mistake: Not updating the correct task ID will result in wrong task being changed.
Customizations βοΈ
- Change Label for Sync Trigger: In the “Get all tasks with specific label” Todoist node, change the
labelIdparameter to any existing label ID in your Todoist account to sync different tasks. - Add More Properties to Notion: Expand the propertiesUi section in the Notion node to include due dates, priority, or tags from Todoist by mapping the appropriate fields.
- Adjust Schedule Frequency: In the Schedule Trigger node, update the interval to balance between real-time syncing and API limits to suit your needs.
Troubleshooting π§
- Problem: “No tasks returned from Todoist node.”
Cause: Incorrect label ID or no tasks have that label.
Solution: Verify the label ID from Todoist settings or API, and confirm tasks are assigned that label.
- Problem: “Permission denied when writing to Notion database.”
Cause: Incorrect token or insufficient database permissions.
Solution: Check your Notion integration permissions and ensure the API key has access.
- Problem: “Tasks not updating label after sync.”
Cause: Expression or node connection error.
Solution: Confirm the Update Todoist node is correctly linked after Notion node and uses the right dynamic expressions for task ID and description.
Pre-Production Checklist β
- Verify the Todoist OAuth2 credentials are valid and have necessary scopes.
- Confirm the Notion API key and database ID are correct and accessible.
- Test the Schedule Trigger manually to ensure the workflow activates on demand.
- Create test tasks with the specific label “send-to-notion” in Todoist to confirm they sync properly.
- Backup your Notion database or have a rollback plan in case of accidental overwrites.
Deployment Guide
Once all nodes are configured and tested, activate your workflow by toggling the active switch in the n8n editor. Because this workflow runs on a schedule, ensure it is enabled to run at your preferred interval.
Monitor execution logs initially to catch any errors. You can view executions in the n8n dashboard to confirm tasks are syncing and labels updated correctly.
FAQs
- Can I use a different task label for syncing?
Yes, just update the label ID in the Todoist “Get all tasks with specific label” node. - Does this workflow consume a lot of API credits?
It depends on the frequency of your schedule trigger; setting it too frequent may hit API limits. - Is my data safe syncing between Todoist and Notion?
Yes, as long as you keep your API credentials secure and follow best practices. - Can this handle hundreds of tasks?
It can, but you may want to space out the schedule to avoid timeouts or API rate limits.
Conclusion
By following this detailed guide, youβve set up a powerful automation that saves hours each week by syncing Todoist tasks to Notion automatically. This ensures your project details are always up to date across platforms without manual effort.
Imagine the time reclaimed from tedious copy-pasting and the reduction in errors and missed deadlines. From here, you could expand this workflow by including due dates, comments, or task priorities from Todoist to Notion or build a reverse sync from Notion back to Todoist.
Youβve just boosted your productivity with n8n and made task management smoother than ever. Keep experimenting and happy automating!