Migrating 10 Years Of Family Life From Trello to Todoist With Grok Bot

I just moved our family's life board from Trello to Todoist. This type of migration would have been extremely difficult before LLMs, and Grok Bot (a fantastic product) made it pretty painless.

Here's what the board looked like going in:

  • 1500+ cards
  • 5 sections: Backlog, Coming Up, In Progress, Done and Information
    • Cards in Information are long-lived, just for generally useful data like phone numbers and addresses.

What did Grok Bot actually do?

Grok Bot had to create a Todoist project with all the same sections and tasks as the Trello board I had before. However, there were a few initial issues:

  • On the Trello side, the connector couldn't find my project. Because my project is owned by my wife, even after she made me an admin, the project still wasn't visible. This is probably a bug in Trello's MCP. So, Grok Bot had to use computer use.
  • On the Todoist side, Grok Bot used the Todoist connector to create all the tasks. But it couldn't create tasks with file attachments, and also it couldn't create tasks as done.
    • Grok Bot then later used computer use to download all file attachments from Trello and re-upload them into the right tasks in Todoist.
    • To create "done" tasks, it had to make a separate tool call to then mark them as done.
    • I also had to specifically prompt Grok Bot so it knows how to create uncompletable tasks in Todoist (it's kind of a hidden feature, not exposed properly in the connector). This is how I've set up the aforementioned Information section.

The entire process took around 2-3 hours, which isn't all that bad given how much computer use was required.

Then I started actually using Todoist, and noticed a bunch of things.

Where Grok Bot shined

It falls back to its browser and finds workarounds when stuck. Every time a connector couldn't do something, it just opened a browser and did it like a human would.

It's good at long-running work. While re-completing tasks, Todoist rate limited it with a retry_after of 1,280 seconds (~20 minutes). So it scheduled a one-shot routine that waited out the cooldown, finished the last ~496 tasks, and then deleted itself. Later on, it ran ~8 workers in parallel, each with resumable per-card progress files and idempotent scripts. That mattered, because things kept failing (more on that later).

It handled secrets properly. When it needed my Todoist API token, I gave it through a masked input, so the token never showed up in the chat. It also kept the contents of all tasks out of the chat.

It checked its own work. While verifying, it found that 195 cards were missing from Todoist, even though its own progress file said 1,364/1,364. Those 195 had ended up in duplicate "Done" sections that it had created and later deleted during the first migration. That bug was entirely its fault, but it caught it on its own and recreated all 195 with their real dates.

What did Grok Bot not do well?

  • In my initial prompt, I didn't specify how to handle Trello card checklists and completion dates. And Grok Bot wasn't smart enough to port those over to Todoist. So, I had to ask for it later after the initial migration.
  • It lost context and crashed a few times (background workers failing with "Activity task failed"). The resumable design made this less of a problem, it just meant the migration took longer.
  • There were, as I already mentioned, 195 missing cards. But Grok Bot figured this out on its own so it only made the process take longer, it didn't bother me at all.

Issues with the Todoist connector

No file uploads. The connector only allows for creating tasks with text comments. This meant a complicated dance of computer use + Google Drive.

No way to share a project. The connector can't invite collaborators. That only exists in the Sync API (share_project), so the bot had to click through the UI.

No way to set a completion date. I opened Todoist's productivity view and saw "Completed this week: 1363". All 8 years of our Trello history had been completed on Monday, 5 October.

The connector's complete-tasks simply has no way to pass a date. The Sync API's item_complete does accept date_completed, though, which is why I handed over my API token. The bot then pulled 2,047 "moved to Done" events from the Trello board's activity, going all the way back to November 2017. It piloted the fix on 2 tasks, and then uncompleted and re-completed 1,169 tasks with their real dates, in batches of 200.

A Todoist project can only have 300 active tasks. That's why Done had to be imported as completed tasks in the first place, and also why the date fix had to go in batches of 200 (never more than 200 open at once).

At some point the bot reopened the Done tasks so they'd show up in the Board view, and the next time I tried to add a task, I got this:

The bot then re-completed ~900 tasks in batches, which is exactly when it got rate limited.

Rate limits. Lots of HTTP 429s (with waits of up to 20 minutes), plus 503s and 502s. These were a big part of why the migration took so long.

No way to fix the stats. This one I haven't solved. Re-dating tasks didn't remove them from the weekly stats. The completions of the tasks that got deleted during the duplicate-sections mess stayed on 5 October (194 still show up as "this week"), and my all-time completed count and karma are double-counted. Later, the checklist backfill (see below) added ~5,600 completions on Tuesday, 6 October in the Insights chart ("This week: 5796"), even though they were all backdated. I think this probably needs Todoist support.

What's next?

Well, I've just deleted my Trello account. And I'm in touch with Todoist's CTO to get everything I mentioned fixed. I also gave him a bunch of other product feedback, and he's been super responsive and helpful throughout.

Feel free to reach out on X/Twitter if you have any thoughts!