A Python tool to convert TickTick tasks into structured markdown files, preserving your tasks, notes, and checklists in a format compatible with popular note-taking apps like Obsidian, Logseq, and Notion.
Supports both CSV backup exports and the TickTick Open API for pulling tasks directly.
(Note, this was coded primarily with Claude Code. It's working fine for my needs, but there may be rough edges.)
- CSV Import: Convert TickTick CSV backup exports
- API Import: Pull tasks directly from TickTick via the Open API
- Hierarchical Structure: Organizes tasks as
Folder/List/Task.md - YAML Frontmatter: Preserves all metadata (dates, priority, status, tags)
- Checklist Support: Converts TickTick checkbox format to standard markdown
- [ ]/- [x] - Subtasks: Automatically includes subtasks within parent task files
- List Indexes: Generates index files with wikilinks for easy navigation
- Multiple Output Modes: Hierarchical, flat, or single-file output
- uv (recommended) or standard Python
The tool has two modes: csv for importing from backup files, and api for pulling directly from TickTick.
- Open TickTick on web or desktop
- Go to Settings → Backup
- Click "Export data as CSV"
- Save the CSV file
# Using uvx (recommended - no installation needed)
uvx ticktickmd csv backup.csv -o output/
# Or if installed locally
ticktickmd csv backup.csv -o output/- Create a TickTick API app at https://developer.ticktick.com/manage
- Set the OAuth redirect URL to
http://localhost:8090/callback - Run the auth setup:
uvx ticktickmd auth loginThis will prompt for your Client ID and Client Secret, then open a browser to authorize the app.
# Fetch all tasks
uvx ticktickmd api -o output/
# Fetch only a specific project
uvx ticktickmd api -o output/ --project "Work"# Check auth status
ticktickmd auth status
# Log out (clear stored tokens)
ticktickmd auth logoutThese options work with both csv and api commands:
# Include archived/completed tasks (excluded by default)
uvx ticktickmd csv backup.csv -o output/ --include-archived
# Flat structure (all files in one directory)
uvx ticktickmd csv backup.csv -o output/ --flat
# Single combined markdown file
uvx ticktickmd csv backup.csv -o all_tasks.md --single-file
# Don't generate list index files
uvx ticktickmd csv backup.csv -o output/ --no-index
# Verbose output
uvx ticktickmd csv backup.csv -o output/ -vThis creates a hierarchical directory structure:
output/
├── Work/
│ ├── Projects/
│ │ ├── _index.md
│ │ ├── Task 1.md
│ │ └── Task 2.md
│ └── Meetings/
│ └── ...
└── Personal/
└── ...
Each task becomes a markdown file with YAML frontmatter:
---
title: "Buy groceries"
folder: "Personal"
list: "Shopping"
kind: "CHECKLIST"
tags: [errands, weekly]
status: "active"
priority: "high"
created: 2025-01-15T10:30:00+00:00
due: 2025-01-20
timezone: "America/New_York"
ticktick_id: "12345"
---
# Buy groceries
- [ ] Milk
- [ ] Eggs
- [x] Bread
- [ ] Coffee
---
Due: 2025-01-20 | Priority: high | Tags: errands, weekly- TEXT: Simple text tasks
- NOTE: Longer notes with content
- CHECKLIST: Tasks with checkbox items
- active: Normal, incomplete task (Status = 0)
- completed: Completed task (Status = 1)
- archived: Archived task (Status = 2)
Note: Archived tasks are excluded by default. Use --include-archived to include them.
The CSV export does not contain attachment URLs or image data. TickTick only exports text content, metadata, and task structure. Attachments would need to be:
- Manually downloaded from TickTick before exporting
- Downloaded via TickTick API (requires OAuth authentication setup)
If attachment preservation is critical, consider:
- Downloading attachments manually from the app before export
- Using TickTick's built-in backup feature (may include attachments)
- Implementing API-based download (would require significant additional work)
TickTick concatenates list items without newlines in the CSV export. This tool attempts to split them intelligently, but complex formatting may not be perfectly preserved:
- Multiple consecutive dashes may be split incorrectly
- Code blocks within notes are preserved but not syntax-highlighted
- Tables are not specially handled
Recurring task definitions are preserved in the repeat field (e.g., RRULE:FREQ=DAILY), but only completed instances are exported. Future occurrences are not included.
The CSV export does not include:
- Task comments
- Collaboration history
- Activity logs
- Shared list member information (only shows "Shared" tag)
TickTick custom fields or properties (if any) may not be exported in the CSV format.
Dates are exported in UTC with timezone information preserved in metadata. Your note-taking app may display them differently based on its timezone handling.
Fully compatible! The output works great with:
- Standard markdown rendering
- Obsidian Tasks plugin
- Wikilinks in index files
- Frontmatter queries
Compatible with standard markdown. For best results:
- Logseq prefers
TODO/DONEkeywords - May need to convert
- [ ]checkboxes manually or with a script
The standard markdown format should work with most apps that support:
- YAML frontmatter (optional)
- Standard markdown checkboxes
- File/folder organization
- Use hierarchical structure (default) for best organization
- Generate index files (default) for easy navigation with wikilinks
- Include archived tasks if you want a complete backup