Two-way sync with Obsidian and Todoist

I’ve been looking at the various ways to manage my tasks with Obsidian. I’ve been using a very simple task management format of e.g. a “project per file” with a mix of - [ ] tasks, headings, notes etc. This especially works well with coding projects that have a mix of ideas, resource material, features, bugs etc. I can also easily use search or DataView on those tasks.

For work I’ve been using Todoist because it helps me prioritize tasks, assign dates, sync to my calendar, get an easy overview etc. It’s also very easy to use the Quick Add modal or quickly prioritize or move tasks to a project from the inbox (especially with todoist-shortcuts).

@jamiebrynes7 did some fantastic work on materializing Todoist in Obsidian and it works great. But I’ve been thinking about integrating Todoist in another way: using the Todoist sync API v8 to synchronize Todoist and create a separate Markdown file for each project or task. Keeping them in sync using Todoist-specific frontmatter (corresponding with id’s etc. from JSON from the Sync API).

Here’s how it would work (simplified):

  • Initial sync will mean creating a Markdown file for each Todoist project and task writing Todoist variables (e.g. id, project_id, due_date) to frontmatter
  • The sync script watches for changes in local files or gets an update from the Todoist sync API if something changed remotely
  • When issueing an update on Todoist, the frontmatter of the corresponding Markdown file (based on id) will change.
  • When updating a Markdown file it will trigger an update to the specific id in the frontmatter on Todoist.

This approach would mean that you could use the (synchronized) Markdown files in Obsidian with e.g. Dataview. When changing anything (e.g. completing a task) it would sync back to Todoist.

I’m thinking of using Python as I’ve already been working on updating/rewriting this (old) plugin which builds two-way sync for Todoist and Google Calendar using an SQLite database as intermediary. SQLite as intermediary could be replaced with e.g. python-watchdog and files.

I don’t see yet how I could make this could work using an internal Obsidian plugin, but that may be me lack of knowledge of Typescript / Javascript and writing plugins compared to Python. Also there’s no official sync API Typescript implementation (there is one for the REST api), although there are some bits and pieces out there that could probably be used (like this). I also have no idea how efficient a sync API could/would run inside Obsidian, although Obsidian probably providers good mechanisms to get updates on (local) changes; remote changes could be more intensive (don’t know JS/TS well enough for that)

I’ve seen that there’s also TaskboneHQ.com which seems pretty interesting, but is only one-way sync and use a proprietary/private remote API (which is fine, but not what I’d like in the long run). I couldn’t find the author Dominik Schlund (@schlundd) on the forums?

Let me know if you have any ideas suggestions for this approach. I’ll keep working for now on the two-way Google Calendar sync but want to explore this idea further.

Some (already) known caveats (there might be many):

  • This is definitely not for everyone. E.g. you need to be able to run a Python script doing the syncing in the background.
  • Looking for file changes can be resource intensive and not always efficient. E.g. because there’s no “previous state” (unless you add something like a previous-state file or db) you’ll have assume that everything in a changed file would be the “wanted state” and upload it all, which might lead to sync conflicts if something on the other end also changed at the same time
  • Todoist descriptions can’t be longer than 500 characters, so you can’t easily sync full notes. I think it’s best to not use descriptions in Todoist at all for the content, but rather leave all content in the Markdown file and write a link to the Obsidian file in the description.
8 Likes

You might want to look into…

… but I believe you need a subscription to Club Macstories to access it.

2 Likes

Thanks @ryanjamurphy. That’s definitely an interesting piece of the puzzle! I’m suspecting this is all built on the REST API. It seems that also tasks are mostly sent from Obsidian to Todoist (and only the completed state is synced back, probably by looking up the taskIDs in the current note). I’ll see if I grab a Club MacStories account and check it out.

I hope you can figure this out, a Macstories+ subscription will set you back $100/y. Even though I like Macstories, but that’s a lot of money.
If you figure out a way to two-way sync Todoist tasks, I would be immensely grateful.

2 Likes

Pretty sure you can access and use the plugin if you only subscribe for a month. Not sure if that’s appropriate according to their license, but might be worth a look!

Yes, that’s true. Thought about that too. But then you’d have no access to updates.

This would be unbelievably helpful. I’ve tried (and ultimately failed) at trying to use Obsidian as a task manager — and a smooth two way sync is exactly what would do the job. (I don’t know if i’m ready to pay $100 per year for this to macstories— but happy to help sponsor a version that can be made available to everyone)

1 Like

Author of https://www.taskbone.com/ here.

You are correct, that there is no two-way-sync with my plugin. To be more precise: You can push tasks into Todoist and you can pull tasks from Todoist. There is no way to push/pull updates, right now. But I am working on it.

Since everyone’s workflow is a little bit different, I am aiming for a high level of flexibility. Unfortunately, this makes a few things a little bit harder to achieve.

I have some ideas about how I could get close to support your specific workflow. I will try some things and get back to you in the next days. To be sure: Do you want one markdown file per task or one file per project?

@janpeeters, @friednslip How would your ideal workflow look like?

3 Likes

Hi @dominik_tb, Thanks for your question and intention to support push/pull for Todoist tasks.
My workflow in Todoist is currently like this:

I have various professional activities that have individual projects/areas subfolders some of them with sections:

  • Work
    • Energiek Leren
      • Project A
        • Fase 1
        • Fase 2
        • etc
      • Project B
      • Leads
    • Energiek Informeren
      • Project C
      • Project D
      • Leads
  • Private
    • Errands
    • To read/to watch

Ideally, I can pull/push collections of Todoist tasks up to the level of sections.

Furthermore, I always go through my to-dos and date them. So it would be great to be able to pull all to-dos for today, tomorrow and future.

Filters and Labels I currently don’t use that much.

1 Like

Hi,

I have/had the same problem. I partially fixed it with n8n desktop. This is zappier on your desktop and can read local files. I synced to Microsoft Todo but I had to put it aside because of a lack of time.

It works, I can give you the flow of you want. I a couple of week I will pick it up again.

I paid for Macstories subscription some months ago because of the plugin. But it was very buggy, not really usable. There were more people like me reporting this in their Discord but noone took the issue up. So I recommend against it unless you know for sure they have fixed it since.

4 Likes

Hi,

I’d love yo see your flow if you’re willing. I’m trying to make this work for myself somehow.

thanks for the heads up. I was really considering getting it up and running with them. Any fix that anyone has would be greatly appreciated!

You should have received your invitation to Taskbone a few moments ago. Let me know how it is working for you, now that two-way-sync is available. Two-way sync between Todoist and Obsidian

1 Like

why isn’t the taskbone plugin on the official list?

The taskbone plugin is still in an “early access” mode and I haven’t submitted it to be reviewed and added to the official list, yet.