Moving from Todoist

Export each project as CSV, tidy three columns in a spreadsheet, import with a preview. Tasks, projects, sections, subtasks, labels, priorities and dates come across; comments do not.

Todoist's export checked on ; the import path is that of OpenTodo v0.6.0

What comes across

  • Tasks, with their descriptions
  • Projects, one per exported file, and sections when you add a section column
  • Subtasks, when you fill the parent column
  • Priorities P1 to P4, the same scale
  • Labels, as a labels column
  • Due dates, once written as dates (2026-10-20)
  • Completed tasks, as completed

What does not

  • Comments (the preview counts them; they belong to their authors)
  • Dates written in words in Todoist's export, until you rewrite them
  • Recurring rules in Todoist's own phrasing that the import cannot read (the preview names each one)
  • Deadlines separate from the scheduled day, durations and attachments
  • Karma, filters, reminders set in Todoist, and project sharing (invite people again)

Before you start

At the time of checking, Todoist exports one project at a time as a CSV file (open the project, the three-dot menu at the top right, Export as CSV). The file has one row per task, section and comment, with columns named TYPE, CONTENT, DESCRIPTION, PRIORITY, INDENT, AUTHOR, RESPONSIBLE, DATE, DATE_LANG, TIMEZONE and a few more. Trust what you see in your own file over this page.

OpenTodo reads CSV files with a header row and a title column; content is accepted as the title column’s name, description and priority as they are, so a Todoist file is half-way there already. The columns it understands, with every accepted spelling, are in the import reference.

Export from Todoist

  1. Open a project in Todoist, open the three-dot menu at the top right and choose Export as CSV. Repeat for each project you want to bring over. Import formats
  2. Open each file in a spreadsheet. You will see a TYPE column with task, section and note rows. Import formats

Tidy the file

  1. Delete the note rows. They are comments, and OpenTodo does not import comments: they belong to their authors. Own export, comments
  2. Turn the section rows into a column. Add a column named section, fill it for the task rows below each section row with that section’s name, then delete the section rows. OpenTodo creates the sections in the project. Sections
  3. Add a labels column. Todoist writes labels inside the task text as @label; move them into a labels column, comma-separated. Missing labels are created on import. CSV columns
  4. Rewrite DATE as due_date. Rename the column, and write dates as 2026-10-20 (with an optional due_time column for 14:30). Todoist writes dates in words, often in your language, and those are not read. CSV columns
  5. Recurring tasks: put the rule in a recurrence column, in words OpenTodo knows: every day, every monday, every 2 weeks, every! 3 days for “after completion”. Anything it cannot read is shown as a warning in the preview and the task is imported without a rule. Recurrence
  6. Subtasks: INDENT 2 marks a subtask. Add a parent column and write the parent task’s title in it (or give rows an id column and use the parent’s id). Mapping rules
  7. Priorities stay as they are: Todoist’s 1 to 4 with 1 the highest matches OpenTodo’s. Check them in the preview. CSV columns

Import into OpenTodo

  1. In OpenTodo, open Settings → Data → Import data… and choose the file. Import from another app
  2. In the preview, set the target project to a project with the Todoist project’s name (type a new name to create it), check the time zone, and read the row list: created, skipped (with the reason) or error (with the row number and the reason). Nothing is written yet. Import from another app
  3. Select Import. The tasks reach all your devices on their next sync. Repeat for each file. Import from another app
  4. Not happy? Undo under Past imports removes everything that import created, and you can import the file again with different options. Undo an import

Your first week

  • Rebuild your Todoist filters as saved views: @waiting & open, #Work & p1 & due <= tomorrow. The syntax is close to Todoist’s. Save a filter as a view Find tasks with a filter
  • Set your reminders again; they are not in the export. “1 day before” on bills, “at due time” on calls. Set a reminder Add a reminder
  • Share the projects you shared before, with a role per person. Share a project Share a project
  • Quick add works like Todoist’s: Call Sam tomorrow 3pm #Work @call p2. One difference: repeat rules go in the task panel, not in the line. Quick add syntax
  • Keep the CSV files until you are sure. An import can be undone at any time, and the same file imported twice creates nothing new. Duplicates

Todoist words, OpenTodo words

How Todoist's terms map to OpenTodo's
In TodoistIn OpenTodoNote
TaskTask
ProjectProjectProjects nest the same way.
SectionSectionShown as columns on the board.
LabelLabelPersonal in OpenTodo, even on shared projects.
Priority P1 to P4Priority P1 to P41 is highest in both.
Due date with a recurring phraseDue date plus a Repeat ruleThe rule is set in the task panel, not typed in quick add.
FilterSaved view
ReminderReminder
Sub-taskSubtask
KarmaNo equivalent

Todoist is named only to identify it; this page is not affiliated with it. The glossary maps the words of all four apps.

Bring your tasks over at your own pace.

Import into the demo first if you like: the sandbox is private and deleted after two hours. Then do it for real on your server.

OpenTodo is free and open source, with no paid tier. If it helps you, a star on GitHub helps other people find it, and a coffee helps keep it going.

Buy me a coffee