Export Microsoft To Do tasks to Todoist CSV format
A Ruby CLI and API tool for migrating tasks from Microsoft To Do to Todoist (and other task managers).
Quick Start β’ Features β’ Documentation β’ Contributing
- About
- Features
- Quick Start
- Installation
- Usage
- Documentation
- Roadmap
- Contributing
- License
- Acknowledgments
Microsoft To Do doesn't provide a built-in export feature, making migration to other task managers difficult. Export MS Todo solves this by:
- Fetching all your tasks via Microsoft Graph API
- Preserving task metadata (priorities, due dates, subtasks, recurrence)
- Generating Todoist-compatible CSV files
- Handling edge cases (special characters, large lists >300 tasks)
Originally created for personal use, shared openly to help others migrate their tasks.
- β Complete task export - Titles, descriptions, priorities, due dates, timezones
- π Subtask support - Converts MS Todo checklist items to Todoist subtasks
- π Recurrence patterns - Daily, weekly, monthly, yearly with custom intervals
- π Large list handling - Automatic splitting for lists over 300 tasks
- π¨ Dual interfaces - Both CLI (command-line) and REST API
- βοΈ Zero-config - Works with just your MS Graph token
- π JSON export - Debug format for inspecting task data
- π Secure - Token never stored, only used during export
| MS Todo | Todoist CSV | Notes |
|---|---|---|
| Title | CONTENT | Properly escaped for commas, quotes |
| Body/Notes | DESCRIPTION | Full notes preserved |
| High priority | PRIORITY 1 | Top priority in Todoist |
| Normal/Low priority | PRIORITY 4 | Standard priority |
| Checklist items | Subtasks (INDENT=2) | Maintains parent-child relationship |
| Due date | DATE | ISO format or natural language |
| Timezone | TIMEZONE | Preserved from MS Todo |
| Recurrence | DATE field | Converted to Todoist syntax |
- Ruby 3.2 or higher
- Microsoft account with To Do tasks
- MS Graph API token (Get it here)
git clone https://github.com/scurry/export-ms-todo.git
cd export-ms-todo
bundle install# Set up your token (one time)
cp .env.example .env
# Edit .env and paste your MS Graph token
# Export your tasks (creates ZIP with CSV files)
bundle exec bin/export-ms-todo export
# That's it! Import the CSV files to Todoistπ See detailed Quick Start guide β
git clone https://github.com/scurry/export-ms-todo.git
cd export-ms-todo
bundle install- Visit Microsoft Graph Explorer
- Sign in with your Microsoft account
- Select "my To Do task lists" from samples
- Click "Modify permissions" β Consent to "Tasks.ReadWrite"
- Navigate to "Access token" tab
- Copy the token (starts with "eyJ...")
# Basic export (creates ms-todo-export.zip)
bundle exec bin/export-ms-todo export
# Custom output path
bundle exec bin/export-ms-todo export --output ~/Desktop/tasks
# Single CSV file instead of ZIP
bundle exec bin/export-ms-todo export --single-file
# JSON format for debugging
bundle exec bin/export-ms-todo export --format json
# Specify token via command line
bundle exec bin/export-ms-todo export --token "Bearer YOUR_TOKEN"# Start the API server
bundle exec rackup api/config.ru -p 3000
# Export via API (returns ZIP)
curl -X POST http://localhost:3000/export \
-d "token=Bearer YOUR_TOKEN" \
--output export.zip
# Get list preview
curl "http://localhost:3000/lists?token=Bearer YOUR_TOKEN"
# Health check
curl http://localhost:3000/health- Go to Todoist β Settings β Import
- Upload each CSV file
- For split lists (e.g.,
Work-1.csv,Work-2.csv), import all parts to the same project
| Document | Description |
|---|---|
| Quick Start Guide | Get started in 5 minutes |
| User Guide | Comprehensive usage documentation |
| Developer Guide | Architecture, setup, contributing |
| Design Document | Technical design and decisions |
| Implementation Plan | Step-by-step build plan |
- β Basic task export (title, priority, due dates)
- β Subtask support (checklist items)
- β Recurrence pattern mapping
- β Large list handling (>300 tasks)
- β CLI and API interfaces
- β³ Reminder dates support
- β³ File attachment handling
- β³ Categories β Todoist labels
- β³ Complex recurrence patterns
- β³ Web UI for non-technical users
- π Bidirectional sync
- π Support for other task managers (TickTick, Things, etc.)
- π Automated scheduled exports
View open issues β’ Suggest a feature
Contributions are welcome! Whether it's:
- π Bug reports
- π‘ Feature requests
- π Documentation improvements
- π§ Code contributions
Please see CONTRIBUTING.md for guidelines.
# Clone and setup
git clone https://github.com/scurry/export-ms-todo.git
cd export-ms-todo
bundle install
# Run tests
bundle exec rspec
# Run with real token (careful with VCR cassettes)
export MS_TODO_TOKEN="Bearer YOUR_TOKEN"
bundle exec bin/export-ms-todo export --format jsonπ See full Developer Guide β
This project is licensed under the MIT License - see the LICENSE file for details.
This is a permissive license that allows you to use, modify, and distribute the software freely.
- Inspiration: Microsoft-To-Do-Export by Daylam Tayari (Java implementation)
- Microsoft Graph API - For providing access to To Do data
- Todoist - For their importable CSV format
- Ruby community - For excellent tools (Thor, Sinatra, RSpec)
Built with β€οΈ by @scurry
Report Bug β’ Request Feature β’ Ask Question