Skip to content

Ruby CLI and API to help facilitate moving from MS Todo to other popular alternatives such as Todoist. Mostly for my personal use but wanted to share.

License

Notifications You must be signed in to change notification settings

scurry/export-ms-todo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

35 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Export MS Todo

Ruby License Status

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


πŸ“‹ Table of Contents

🎯 About

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.

✨ Features

  • βœ… 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

Field Mapping

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

πŸš€ Quick Start

Prerequisites

  • Ruby 3.2 or higher
  • Microsoft account with To Do tasks
  • MS Graph API token (Get it here)

Installation

git clone https://github.com/scurry/export-ms-todo.git
cd export-ms-todo
bundle install

Basic Usage

# 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 β†’

πŸ“₯ Installation

From Source

git clone https://github.com/scurry/export-ms-todo.git
cd export-ms-todo
bundle install

Getting Your MS Graph Token

  1. Visit Microsoft Graph Explorer
  2. Sign in with your Microsoft account
  3. Select "my To Do task lists" from samples
  4. Click "Modify permissions" β†’ Consent to "Tasks.ReadWrite"
  5. Navigate to "Access token" tab
  6. Copy the token (starts with "eyJ...")

⚠️ Security Note: This token expires after ~1 hour. Generate a fresh one each time you export.

πŸ’» Usage

CLI (Command Line)

# 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"

API (REST)

# 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

Importing to Todoist

  1. Go to Todoist β†’ Settings β†’ Import
  2. Upload each CSV file
  3. For split lists (e.g., Work-1.csv, Work-2.csv), import all parts to the same project

πŸ“– See full User Guide β†’

πŸ“š Documentation

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

πŸ—ΊοΈ Roadmap

v0.1.0 (Current)

  • βœ… Basic task export (title, priority, due dates)
  • βœ… Subtask support (checklist items)
  • βœ… Recurrence pattern mapping
  • βœ… Large list handling (>300 tasks)
  • βœ… CLI and API interfaces

v0.2.0 (Planned)

  • ⏳ Reminder dates support
  • ⏳ File attachment handling
  • ⏳ Categories β†’ Todoist labels
  • ⏳ Complex recurrence patterns
  • ⏳ Web UI for non-technical users

Future

  • πŸ’­ Bidirectional sync
  • πŸ’­ Support for other task managers (TickTick, Things, etc.)
  • πŸ’­ Automated scheduled exports

View open issues β€’ Suggest a feature

🀝 Contributing

Contributions are welcome! Whether it's:

  • πŸ› Bug reports
  • πŸ’‘ Feature requests
  • πŸ“– Documentation improvements
  • πŸ”§ Code contributions

Please see CONTRIBUTING.md for guidelines.

Development Quick Start

# 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 β†’

πŸ“„ License

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.

πŸ™ Acknowledgments

  • 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

About

Ruby CLI and API to help facilitate moving from MS Todo to other popular alternatives such as Todoist. Mostly for my personal use but wanted to share.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages