# Import from Things 3

> Import a Things 3 database into Done Bear from iPhone, iPad, or Mac — in the apps first, with the CLI as a power-user path.

Use this guide to import Things 3 into Done Bear. Things has no export menu. On iPhone or iPad you send a Diagnostics copy of the database; on a Mac you copy `main.sqlite`. Then preview and confirm in the **web app** or the **Done Bear iOS app**. The CLI remains available if you prefer the terminal.

## From iPhone or iPad

This is Cultured Code's Diagnostics path:

1. In Things, go to Settings → General → Diagnostics → Enter Code → `491348` → Send Things Database.
2. The file is `Things Database.aar` (Apple Archive, not zip). Save it to Files.
3. Tap the export to unpack it to `Things Database.thingsdatabase` (that bundle contains `main.sqlite`).

Then pick one:

- **Done Bear iOS app:** Settings → Import → Things. Choose the `.aar`, the unpacked `.thingsdatabase` folder, or `main.sqlite`. Preview, then confirm.
- **Web:** Settings → Import → Import from Things 3. Choose `main.sqlite` from inside the unpacked bundle, or a zip of that folder. The web app cannot unpack `.aar` yet.

## On a Mac

In Finder, press ⇧⌘G and paste `~/Library/Group Containers/JLMPQHK86H.com.culturedcode.ThingsMac`. Open the `ThingsData-…` folder, then `Things Database.thingsdatabase`. Copy `main.sqlite` (copy, do not move it) and choose that copy in the web importer.

Things is only ever read from. The importer never writes back to it.

## Preview, then confirm

Every in-app import does a dry run first and shows how many projects, tasks, labels, and checklist items it will add. You choose whether to add only what is new, or overwrite items already imported from Things.

The Free plan holds 250 tasks, and completed tasks count. In the web app, if the import won't fit, the preview says how much room is left before anything is written. You can import open to-dos only, which leaves the Logbook behind, or upgrade first. Each Area becomes a team, and the Free plan holds 2 teams. If your Areas won't fit, you can import without them: their projects and to-dos still come across.

If the CLI import reaches a plan limit partway, it stops, says how many tasks and teams landed, and exits with an error. Run it again with `--open-only` or `--skip-teams`. A re-run skips what already landed.

## CLI (optional)

On a Mac with Things installed, the CLI finds the database itself:

```bash
donebear import things --dry-run
```

For an iPhone export or any copy it would not find:

```bash
donebear import things --database-url "/path/to/Things Database.thingsdatabase" --dry-run
```

`--database-url` accepts a filesystem path, a `file://` URL, a `sqlite://` URL, a `.thingsdatabase` bundle, or a `ThingsData-*` directory. There is no undo for the CLI run; the dry run is the moment to check the numbers.

```bash
donebear workspace list
donebear workspace use personal
donebear import things --workspace personal --dry-run --json
donebear import things --workspace personal
```

### Metadata and teams

Things Areas become Done Bear Teams. The importer owns every Area and Project
the dump creates: each Area maps to a Team (same-name Areas and an existing
workspace Team with that name reuse one Team), Area projects link through
`TeamProject`, and the importing user gets `TeamMembership` and
`ProjectMembership` so the sidebar and Settings agree immediately. Area-less
projects stay personal/workspace projects. Re-import keeps deterministic ids.

```bash
donebear import things --metadata-mode note
donebear import things --metadata-mode none
donebear import things --skip-teams
```

### Open to-dos only

`--open-only` leaves completed, canceled, and trashed to-dos behind. Repeating to-dos keep their repeat; their completed occurrences stay in Things. A finished project comes across only if an open to-do still lives in it. Checklist items stay with their to-do.

```bash
donebear import things --open-only --dry-run
```

## Next steps

- Read [Automate with tokens, JSON, and context](/cli/automation) if you want to script repeatable imports.
- Use [Command reference](/cli/commands) when you need the full CLI surface around workspaces, tasks, and projects.
- See [Migrate from Things 3](https://donebear.com/migrate/things-3) for what each Things concept becomes in Done Bear and what does not come across.

## Repairing a pre-1.1.9 import (missing sidebar memberships)

Imports before this fix created Team / Project / TeamProject rows but not the
importer’s `TeamMembership` and `ProjectMembership` rows. Settings still listed
every team; the sidebar hid them. Area-less projects could still appear via the
creator fallback.

CoS / Matt — targeted backfill for one importer + workspace (e.g. Yannick):

```bash
cd apps/manage-api
npx tsx src/scripts/backfill-things-import-memberships.ts \
  --workspace=<workspace-uuid> --user=<user-uuid> --dry-run
npx tsx src/scripts/backfill-things-import-memberships.ts \
  --workspace=<workspace-uuid> --user=<user-uuid>
```

New imports write those memberships in the shared plan; no backfill needed.

---

Every Done Bear page is listed at https://donebear.com/llms.txt. Any page has a markdown copy at its URL plus `.md`. Start from the map rather than guessing a path.
