A script to push icalendar events to Todoist
Find a file
2025-11-11 16:43:49 +11:00
.gitattributes Initial commit 2025-01-05 21:03:18 +11:00
.gitignore renamed some files 2025-11-09 17:06:11 +11:00
.python-version renamed some files 2025-11-09 17:06:11 +11:00
config.yaml.sample Added destructive sync 2025-01-06 17:59:25 +11:00
ical-todoist.py they changed how the project id works 2025-11-11 16:43:49 +11:00
LICENSE Initial commit 2025-01-05 21:03:18 +11:00
pyproject.toml migrated to uv and updated deps 2025-11-04 23:52:56 +11:00
README.md readme 2025-11-09 20:53:27 +11:00
uv.lock migrated to uv and updated deps 2025-11-04 23:52:56 +11:00

Ical-Todoist

A small script that can read an ical file from a link or filesystem and push its contents to Todoist.


To get started, copy config.yaml.sample into config.yaml if you want to use a template.

cp config.yaml.sample config.yaml

To run, use uv.

uv run ical-todoist.py

Config File Parameters

Parameter Type Explanation
ical_url String URL to the raw ical file
ical_file String Local path to the ical file
todoist_api_key String API key token for Todoist account
todoist_project String Parent project ID. If not set task will be put into Inbox
todoist_section String Parent section ID. If not set task will not be put in a section
todoist_parent String Parent task ID. If not set task will be put at the top level
todoist_labels String Array Labels to assign to generated tasks
allow_sync Boolean Allow tasks no longer present to be deleted. WARNING: DESTRUCTIVE! HIGHLY recommended to set to false if todoist_labels is not set
allow_duplicates Boolean Allow duplicate tasks to be uploaded. Recommended to set to true if todoist_labels is not set
dry_run Boolean Prints out tasks to create to console instead of creating them

If both ical_url and ical_file are provided, the url will be prioritised.

Duplicates are checked by name, description and due date against tasks with a label within todoist_label.

Personal Setup

So I could use it with Microsoft Shifts for Teams I copied the Power Automate example "Forward my Shifts Schedule to my calendar" with the trigger replaced with "When a Shift is created, updated or deleted" and final node replaced with "Update file" from OneDrive for Business pointing at a .ical file shared publicly with a link and file content set to Response.

This file can be accessed raw by copying the share link and adding "&download=1" to the end.