DEV Community

simonchai-tw
simonchai-tw

Posted on

How I built bidirectional Google Tasks ↔ Microsoft To Do sync on Apps Script

How I built bidirectional Google Tasks ↔ Microsoft To Do sync on Apps Script

I wanted a small, self-hosted bridge between Google Tasks and Microsoft To Do—not another productivity dashboard or a service that keeps my data forever.

The result is tasks-todo-sync, an open-source Google Apps Script project that keeps both task systems moving in both directions.

Why state sync instead of Zapier?

Manual copying is easy for a day and frustrating for a month. Zapier is great when one event causes one action, but bidirectional sync is different: either side can change, events can arrive out of order, and a task can be edited while the other system is unavailable. Triggers, filters, and deduplication rules become hard to reason about.

The script reads both sides, maps task identities and fields, compares the latest known state, and applies necessary creates, updates, or completions. Stored state gives the sync a memory instead of blindly copying every item on every run.

Why Apps Script?

Apps Script runs on a schedule without managing a server; OAuth and project configuration stay with the automation; the code is approachable JavaScript; and logs make API problems inspectable. The trade-off is that you configure credentials and APIs yourself. This is intentionally self-hosted.

MIT, with honest limits

The project is released under the MIT license. It is not a promise of perfect conflict resolution: API quotas, token expiry, renamed or deleted lists, transient failures, and provider-specific fields are real constraints. Back up important data and test with a small task set first.

If this is useful, a soft star on GitHub helps others find it. Feedback is welcome: repo and setup notes.

Top comments (0)