Get your MS Todo tasks exported in 5 minutes.
# Clone the repository
git clone https://github.com/scurry/export-ms-todo.git
cd export-ms-todo
# Install Ruby dependencies
bundle installRequirements: Ruby 3.2+
- Open Microsoft Graph Explorer
- Sign in with your Microsoft account
- From the samples, select "my To Do task lists"
- Click "Modify permissions" (top right)
- Consent to
Tasks.ReadWritepermission - Go to "Access token" tab
- Copy the entire token (starts with
eyJ...)
💡 Tip: The token expires in ~1 hour. You'll need a fresh one each time.
# Create .env file from template
cp .env.example .env
# Edit .env and paste your token
# It should look like:
# MS_TODO_TOKEN=Bearer eyJ0eXAiOiJKV1QiLCJub...Or skip this and paste the token when prompted!
# Run the export
bundle exec bin/export-ms-todo exportYou'll see output like:
╭─────────────────────────────────────────╮
│ Export MS Todo → Todoist │
╰─────────────────────────────────────────╯
✓ Authenticated successfully
✓ Found 3 lists: Work, Personal, Shopping
✓ Fetching tasks...
→ Work: 12 tasks
→ Personal: 8 tasks
→ Shopping: 3 tasks
✓ Generating CSV files...
✓ Created ms-todo-export-2025-12-29.zip
Export complete!
📦 ms-todo-export-2025-12-29.zip
- Extract the ZIP file
- Go to Todoist → Settings → Import
- Click "From a template or a file"
- Upload each CSV file (one per MS Todo list)
- Each CSV becomes a new Todoist project
Done! 🎉 Your tasks are now in Todoist.
bundle exec bin/export-ms-todo export --output ~/Desktop/my-tasksbundle exec bin/export-ms-todo export --format jsonbundle exec bin/export-ms-todo export --single-file- Your token expired (they last ~1 hour)
- Get a fresh token from Graph Explorer
- Make sure you have tasks in Microsoft To Do
- Check that you consented to
Tasks.ReadWritepermission
- Install Bundler:
gem install bundler - Or use full path:
/usr/bin/bundle install
- 📖 Read the full User Guide for advanced options
- 🔧 Check out the Developer Guide to contribute
- 🐛 Report issues you encounter
Questions? Ask in Discussions