u/No_Addendum_8245

Built a small self-hosted tool to sync Todoist into Google Calendar without Premium (one-way)

Built a small self-hosted tool to sync Todoist into Google Calendar without Premium (one-way)

Hi everyone,
I wanted to share something I built mostly for myself in case it helps anyone else who was frustrated by the same things.

Todoist’s official Google Calendar integration used to let you have separate calendars for different Todoist projects, which I really liked. That went away in favor of one big “Todoist” calendar, which was a letdown, and I think a lot of other Todoist users were annoyed by that too.

Todoist still offers per-project calendar subscriptions (afaik) that you can paste into Google Calendar or other calendar apps, but in practice they can lag badly. I have seen updates take minutes and sometimes much longer, which defeats the point of trying to use a calendar to see Todoist tasks.

So I put together a small, free, and open source one-way sync service that polls Todoist and mirrors scheduled tasks into Google Calendar on a short interval, with routing rules I actually use day to day.

What it does

  • Syncs all tasks that have a date/time (including all-day tasks). Tasks with no date/time stay in Todoist only.
  • How tasks get routed into calendars:
    • If a task has the no-calendar label (label name is configurable), it is not synced at all. If it was synced before, the Google event is removed on the next poll. Basically a manual override for certain tasks that I just don't want in Google Calendar at all.
    • Else if it has the reminder label (also configurable), it goes to a dedicated Reminders calendar. I use that label for noisy repeating tasks on Todoist like “drink water” that I have set to repeat every hour, so I can hide that calendar when I want less clutter on Google Calendar.
    • Else if it lives in the Inbox or is not part of a project, it goes to a catch-all Tasks calendar.
    • Else (basically is part of a project and doesn't have a no-calendar or reminder label) it goes to a calendar named after the top-level Todoist project. Subprojects roll up to the parent calendar instead of each getting their own.
  • Creates Google calendars the first time a project needs one, and removes the Google calendar when the Todoist project is deleted/archived. Emptying a project does not delete its calendar.
  • Each Google event links back to the task in Todoist, so you can open a task in Todoist directly from Google Calendar.
  • The sync service is fully private. It only communicates with Todoist and Google Calendar to sync tasks, and all data is stored locally.

Limitations

  • One-way only (currently). Google Calendar is a read-only mirror of those Todoist tasks. Editing or deleting the event in Google does not write back to Todoist. Other Google events never appear in Todoist. If you need two-way sync like the official integration, this is not a replacement for that, yet. However, I do plan to add two-way sync soon, meaning this solution could soon be a drop-in replacement for the official Google Calendar integration, but with way better functionality.

  • The design (especially with how the reminder label routing) matches my habits and how I use Todoist. However, the repo is open source if you want to fork or tweak behavior to suit your needs or workflow.

  • There is no “exclude this whole project” toggle yet, only per-task exclusion via no-calendar. This means all projects will get synced to Google Calendar as long as they contain a task with a date/time. If you need to be able to selectively exclude certain projects from having calendars in Google Calendar, this is not currently possible. However, I might add project-level exclusion at some point.

  • You need to be comfortable self-hosting (Docker on a homelab, VPS, or a machine you leave running). A “click connect” hosted service would be nicer for people without that background, but I am not in a place to eat hosting costs or run a multi-tenant product for strangers, and I did not want this to turn into something you have to pay me for. The README in the repo still has a basic getting started section if you want to try it.

Repo: github.com/yashpatel21/todoist-gcal-sync

Hopefully this doesn't count as self-promotion because it's free and open source. I'm not trying to make money off of anyone or promote a product. I just wanted to share with the community!

u/No_Addendum_8245 — 14 hours ago