Open Settings, go to Integrations, and find the Spreadsheet card. It does two things: it gives you a template to fill in, and it takes a filled-in file back. One row of the file becomes one task.
The template comes as Excel (.xlsx) or CSV (.csv), in the language of your interface. The Excel version has a second sheet explaining every column, so you can work from the file itself without coming back here.
Files the import accepts: .csv and .xlsx. The old binary .xls cannot be read; save it as .xlsx or .csv first. Up to 5000 rows in one file.
The columns
Only Task has to be filled in. Every other column can be left empty, and a column you do not use can be deleted from the file entirely.
| Column | Required | What it takes | Example |
|---|---|---|---|
| Project | no | Any name. A project that does not exist yet is created. Empty means your default project. | Work |
| List | no | A list inside that project. Created if it does not exist. | Website |
| Task | yes | The title. A row without one is skipped and reported. | Write the launch post |
| Description | no | Plain text. Line breaks inside the cell are kept. | Two screenshots, plus a changelog. |
| Due date | no | See below. Empty means no date. | 2026-09-15 |
| Due time | no | See below. Only makes sense with a date. | 10:00 |
| Priority | no | none, low, medium, high, or 0 to 3. Empty means none. | high |
| Status | no | done for a finished task, empty for one that is not. | done |
Headings are recognised in English and in Russian, and case, extra spaces and a trailing colon or asterisk make no difference. Task, task, Title, Name, Задача and Название all land in the same place. If the guess is wrong, or your headings are your own, the first screen of the dialog lets you point each column at the right one by hand.
Dates the import understands
2026-09-15, the year first. This is what the template asks for and the form least likely to be misread by anything.15.09.2026or15-09-2026, the day first.- A date and a time in one cell, such as
2026-09-15 10:00. The date is taken and the time ignored, unless you point the Due time column at that same column, in which case both are read from it. - The bare five-digit number Excel leaves behind when a date cell loses its formatting, for example
46276. - Empty, which means the task has no date.
Dates written with slashes, such as 03/04/2026, are not accepted, and neither are month names on their own. 03/04 is the third of April in one country and the fourth of March in another, and there is no way to tell which one you meant from the file. A row with a date the import cannot read is left out and listed in the report, so nothing is guessed at.
A date that does not exist, such as 31.02.2026, is refused the same way.
Times the import understands
14:30and14.30.2:30 pmand2:30 AM.14:30:00. The seconds are dropped.- The fraction of a day Excel keeps for a time-only cell, for example
0.5for midday. - Empty, which means the task has no time.
Priorities the import understands
| What you write | What it becomes |
|---|---|
empty, 0, none, no, no priority, нет, без приоритета, обычный | No priority |
1, low, minor, низкий | Low |
2, medium, normal, mid, средний | Medium |
3, high, urgent, critical, top, высокий, срочно | High |
Anything else is refused for that row rather than rounded to the nearest guess. See Priorities for what each level does in the app.
Statuses the import understands
Counted as finished: done, completed, complete, closed, finished, yes, y, true, 1, x, ✓, and the Russian выполнено, готово, закрыто, да.
Counted as not finished: empty, todo, to do, open, active, pending, new, in progress, not done, incomplete, no, n, false, 0, and the Russian не выполнено, в работе, новая.
A word in that column that is neither, such as the name of a stage on somebody’s board, is refused for that row. That is deliberate: reading Blocked as “not done” would be a guess, and a guess about whether something is finished is the kind that gets noticed a month later.
What cannot come over, and why
This is the honest list. These are not features waiting to be added to the import; they are things a task in ToDowl does not have, so there is nowhere to put them.
- Tags and labels. A task has no tags. A Tags column in your file is read, named on the preview screen as a column with nowhere to go, and left behind. Nothing is invented from it.
- Assignees. ToDowl is a personal tracker: every task belongs to the account it is in, and there is no field for anybody else.
- Checklists inside a task. A task has a title and a description, not a list of ticks. Put them in the description if you need them, one per line.
- Attachments and files. Nothing in a spreadsheet cell can carry a file, and a task has nowhere to keep one.
- Dependencies, blockers and relations. There is no link between two tasks.
- Comments. Only the description comes over, so a Todoist note is folded into the description of the task it belongs to rather than lost.
- Subtasks. There is no parent to child relation between tasks. A Parent task column is still read, because most exports have one: the row is created as an ordinary task, in the same project and list as its parent, and placed next to it. The report says how many rows that happened to.
- Repeats and reminders. The template has no column for them. The app has both; set them on the task afterwards. See Repeating tasks and Reminders.
- Custom fields. Any column that is none of the eight above is listed as unused before the import runs.
Two limits are worth knowing before a big file: a Free account keeps three projects and three lists per project. If the file would cross either ceiling, the import says so on the preview screen instead of creating half of them.
What the import will not do to what you already have
The import only adds. It never changes and never deletes a task, project or list that is already in the account.
That has a consequence worth stating plainly: uploading the same file twice creates a second copy of everything in it. There is no matching against what is already there, because matching would mean overwriting a task you had edited with a stale row from a spreadsheet.
If two rows of the same file are the same task in the same list, both are created, and the preview and the report both say which rows they were.
After the import: the report
When the import finishes, it shows what actually happened, in three numbers rather than one:
- Added. Rows that are now tasks, plus the projects and lists created along the way.
- Did not go in. Rows that are not in your account, each with its number in your own file and the reason.
- Went in with a caveat. Rows that were created but not exactly as written: a duplicate of an earlier row, a title cut to length, a parent task that became an ordinary task.
If the import is stopped part way, by you or by a connection that goes away, the report says how many rows of how many were saved. It never reports the plan as though it had happened.
The report stays available after you close the dialog. The Spreadsheet card keeps a line about the last import for the rest of the session, with a link back to it.
The file of rows that did not go in
If anything failed, the report offers Download the rows with errors, as Excel or CSV.
That file is not a log. It contains only the rows that did not go in, with your own values in your own columns, and two extra columns in front: the row number in the file you uploaded, and what was wrong with it.
The way to use it is the short way:
- Download it.
- Fix the values it complains about.
- Upload that file, the same way you uploaded the first one.
Your headings are still in it, so the columns are recognised without matching anything by hand, and only the rows in that file are imported, so the rows that went in the first time are not duplicated. The two extra columns are simply reported as columns with nowhere to go, and you can delete them or leave them.
Bringing a list over from another app
The Integrations screen also has tiles for Todoist, TickTick, Trello, Asana and Notion. They read that service’s own export file and match the columns for you; everything above about dates, priorities and what cannot come over still applies.
Todoist
- Open the project in Todoist in a browser.
- Project menu (three dots) at the top right, then Export, then Export as CSV.
- Pick the downloaded file here. One file is one project, so repeat it for each project.
Sections become lists and subtasks come in as ordinary tasks. Labels stay in the task title, and completed tasks are not part of the export. Repeating dates such as “every day” cannot be read; those rows are listed before anything is imported.
TickTick
- Open TickTick in a browser and go to Settings, then Backup.
- Press Backup and save the CSV file it offers.
- Pick that file here. It holds every folder, list and task at once.
Folders become projects, lists stay lists. Abandoned tasks come in as completed. Tags and reminders are not imported.
Trello
- Open the board in Trello.
- Board menu on the right, then Print, export and share, then Export as JSON.
- Save the file the browser opens and pick it here.
The board becomes a project and every list becomes a list. A card counts as done when its due date is ticked off. Archived cards and lists, labels, members, checklists and attachments are not imported.
Asana
- Open the project in Asana.
- Project menu (three dots) next to the project name, then Export, then CSV.
- Asana emails the file or downloads it. Pick that CSV here.
Sections become lists and subtasks come in as ordinary tasks. A task with a completion date comes in as done. Assignees, tags and dependencies are not imported.
Notion
- Open the database (the table view) in Notion.
- Menu (three dots) at the top right, then Export, and choose Markdown & CSV.
- If Notion gives you a ZIP, unpack it and pick the CSV inside.
The column names are your own, so check the matching on the next screen. Anything the status column does not call Done comes in as not done. Relations, files and formulas are not imported.
If something goes wrong
Every refusal is on screen, with the reason:
- “There is nothing in this file.” The file is empty, or every row in it is.
- “The old .xls format cannot be read.” Open it and save as
.xlsxor.csv. - “None of the column names in this file were recognised.” Nothing is broken; point the dropdowns at the right columns yourself. Only Task has to be set.
- “The file has N rows.” Over the 5000 row ceiling. Split it into several files.
- Nothing at all, and the Import button will not press. The Task column is not set. It is the one column the import cannot do without.
For where your data lives once it is in, see Your data, backup and export.