Data management

Importing data

Bring in patients, sessions, or notes from a CSV file, step by step.

Import patients, sessions, or notes from a CSV file — from Export your data, or a spreadsheet shaped closely enough to map in the second step. Find it from Settings, under "Import data".

The steps

  1. Drop in a file, or click to choose one.
  2. Confirm which row holds the column headers.
  3. Match each column in your file to a field — auto-matched already if the headers are ones this app exported.
  4. Review every row before anything is saved. Fix a cell directly in the table if something's wrong.
  5. Import — rows go in small batches, with progress shown as it goes.
  6. Download any rows that couldn't be imported, with the reason attached, to fix and re-upload.

Updating existing records via bulk export + re-upload

You'll basically never need to type an id yourself. Re-uploading a file that still has its id column — a full export, or the error-rows CSV described below — updates the matching existing record instead of creating a duplicate, for every row whose id matches something already in this organization. This is the main bulk-correction workflow: export everything, fix what needs fixing in a spreadsheet, and re-import the whole file. Anything whose id doesn't match — including every row if you leave the id column unmapped — creates a new record instead, so a fresh CSV you built from scratch is always additive, never overwrites something by accident.

Tip

Advanced: an id can also be read off a record's own URL if you're hand-building a file outside the app — a patient's page is /patients/<id>, a session's edit page is /patients/<patientId>/sessions/<id>/edit. Most people never need this — it's only relevant if you're not starting from an export.

Importing sessions or notes

Sessions and notes need to know which patient they belong to. Map a patientId column if your file has one that matches a patient already in this organization; otherwise, map patientFirstName/patientLastName columns and the matching patient is found by exact name match. If neither resolves to exactly one patient, that row is flagged as an error rather than guessed at.

Note

Import patients first if you're bringing in patients and their session history together — sessions and notes can only attach to patients that already exist in this organization at import time.

Every session also needs an appointment — a service, provider, and location — so importing books a minimal, already-completed appointment for each row alongside the session. Map serviceId and facilityId columns if this organization has more than one service or location; if there's only one of either, it's used automatically. providerId always has to be mapped — an imported row's historical provider can't be guessed. Re-uploading a corrected file reuses each row's existing appointment rather than booking a new one every time.

Custom fields

A session's custom field values are matched by label against this organization's current custom field definitions. A label from the file that doesn't match any current field is skipped — shown as a warning on that row, but it doesn't block the rest of the row from importing.

Fixing errors

Rows with errors are never imported. After importing, download the error rows as a CSV — it's your original file's rows with an extra column explaining what went wrong, ready to correct and upload again.