Skip to content

Bulk import from a spreadsheet

If you're starting dooer with work that already lives somewhere else, you don't have to retype it. The Import tab accepts one xlsx file and turns it into real projects and tasks — all in one go.

This page is for admins who have a spreadsheet ready and want to bring it in cleanly.


Who can use this

Only users with the HEAD or DIRECTOR role can run an import. Everyone else hits a 403.

To get there: Settings → Import.

The Settings → Import screen, showing a file upload area, a Dry run checkbox, and an Import button. The interface is accessible only to HEAD and DIRECTOR roles.

If you don't see the Import tab at all, your account doesn't have the right role. Ask your workspace HEAD to either run the import for you or upgrade your role first.

Role check

No Import tab in Settings? You're not HEAD or DIRECTOR. The tab is invisible at lower roles — it isn't just locked.


The required columns

Your spreadsheet needs to be an .xlsx file with one header row on the first sheet. Column order doesn't matter. Column names are case- and whitespace-insensitive. dooer reads them by name, not by position.

Here are all the columns dooer looks for:

Column Required? What it accepts
Project Yes Project name. Auto-creates the project if it doesn't exist. Reuses the project if it already does.
Task Title Yes The task name. A row with no title is skipped.
Task Description No Free text. Can be left blank.
Tag No One tag per row. Auto-creates the tag if it doesn't exist. Tags belong to you (the importer).
Area Of Interest No Auto-creates in the workspace if it doesn't exist. The value is stored on the task but is not yet displayed on the task detail screen — it is useful for filtering notes today and will appear on tasks in a future release.
Criticality No Low, Medium, or High. Defaults to Medium if blank or unrecognised.
Impact No A number from 1 to 10. Defaults to 5 if blank.
Assignee No Full name of a workspace member. If no match is found, the task is assigned to you (the importer).
Owner / Κάτοχος No Greek alias for Assignee — either column name works.
Status No See table below. Defaults to PendingAcceptance if blank or unrecognised.
Start date No YYYY-MM-DD or DD/MM/YYYY.
End date No Same formats. Defaults to 14 days from today if blank.

Status values dooer accepts:

What you type What dooer sets
NotStarted, Not Started, To Do, todo Not Started
Working, In Progress, Ongoing Working
Paused Paused
Blocked Blocked
Complete, Completed, Done Complete
Canceled, Cancelled Canceled
Pending, Pending Acceptance Pending Acceptance

Status matching is case-insensitive. IN PROGRESS, in progress, and In Progress all work.

One thing about Assignee

If a name in your Assignee column doesn't exactly match a workspace member's full name, that task goes to you — not to no one. Check the dry-run report for mismatch warnings before you commit.


Doing the import safely

Run a dry run first. Always.

Here's the exact sequence:

  1. Open Settings → Import.
  2. Tick the Dry run checkbox.
  3. Upload your file.
  4. Read the report. dooer tells you: rows total, projects that would be created, projects that already exist and would be reused, tasks that would be created, tasks that would be skipped, and every error it found.
  5. Fix the errors in your spreadsheet.
  6. Untick Dry run.
  7. Upload the file again. This time dooer writes to the database.

A dry run parses the entire file and validates every row — it just doesn't save anything. The moment you untick dry run and upload, the import is live and cannot be undone from the UI.

No undo button

Once you run a live import, dooer has no bulk-delete. If 300 tasks land in the wrong project, you're removing them one at a time. Dry run is not optional.


What doesn't import

The xlsx import covers the flat task and project layer only. It does not import:

  • Subtasks — dooer's task model is flat at import time. Subtasks need to be added after, inside each task's Detail screen.
  • Predecessors / dependencies — add these from the Predecessors field in Task Detail after the import.
  • Comments — copy them in manually, or leave them behind. Activity history from another tool doesn't transfer.
  • Attachments — upload them from the Attachments tab inside each task.
  • Feedback — feedback on Full Brief tasks is added after the import.

If your old tool has deep dependency chains or comment threads that matter, plan a second pass after the import to recreate those connections.

Flat layer only

Think of the import as building the skeleton. You add the connective tissue — dependencies, comments, attachments — once the skeleton is in.


Common errors and what to fix

These are the errors that show up most often in the dry-run report:

"Required columns missing: 'Project' and 'Task Title' must be present." Your header row is missing one of those two columns. Check spelling. The parser is case-insensitive (task title, Task Title, and TASK TITLE all work), but it must find both headers somewhere in row 1.

"Row N: missing Task Title, skipped." A row has a Project name but no task name in that row. Either fill in the title or delete the empty row.

"Row N: missing Project, skipped." A row has a task title but no project name. Every task must belong to a project.

Impact defaults to 5 / Criticality defaults to Medium with no error. These aren't errors — they're silent fallbacks. If you want specific values, check that your Impact column contains integers 1–10 and your Criticality column uses Low, Medium, or High. Anything else is silently replaced.

Dates come through blank. The date wasn't in one of the four accepted formats: YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY, or DD-MM-YYYY. If Excel stored the date as a serial number rather than a string, dooer still reads it correctly — but if you exported from another tool as CSV and re-saved as xlsx, check that the date cells are formatted as dates, not plain text.

Assignee falls back to you on every row. The names in your Assignee column don't match the full names on the workspace member profiles. Open Settings → Members, check exact spelling of each person's full name, and update your spreadsheet to match.

Faster debugging

Run the dry run, copy the errors list, fix your spreadsheet, run dry run again. Two dry runs before a live import is normal. Three is fine too.


What's next

Your tasks are in. Two things to do next:

Capturing work → How to add the things that don't import — subtasks, dependencies, full briefs — and when to use Quick task vs. Full Brief.

Admin setup → Roles, member management, and the other settings that control what your team can see and do.