Skip to content

Bulk-import users from CSV

CSV import is the fastest way to onboard a team — ten seats, a hundred, whatever the row count. Each row becomes one user with a generated temporary password and password_reset_required=true, so every imported user is forced to set their own password on first login. If SendGrid is configured (D14), every user gets a welcome email with their temporary password; if not, the API returns the passwords inline and you share them manually.

Duplicate detection is by email (case-insensitive). A row whose email already exists in the org is skipped with a duplicate_email error in the import report; nothing is updated. Re-running the import after an edit does not modify existing users.

Procedure

  1. Open Admin -> Users from the left nav.
  2. Click Bulk import in the page header.
  1. Download the CSV template. It has the expected column order and one example row commented out.
  2. Fill the CSV. Columns:
ColumnRequiredValuesNotes
emailyesvalid emailLowercased on import. Duplicate rows within the same upload are rejected before any user is created.
display_nameyes1 - 100 charsWhat appears in the user list and badges.
roleyesadmin, operator, viewerCase-insensitive. owner cannot be assigned via import — use Transfer Ownership. platform_admin is a separate tier. See Roles and permissions.
sitesonly for viewersemicolon-separated site namesViewers only — admins and operators have implicit org-wide access (D78). Ignored for non-viewer rows.
  1. Save the file as UTF-8. Excel’s “CSV UTF-8 (comma delimited)” format works.
  2. Upload the file via the Bulk import dialog.
  1. Review the preview. The dialog shows row-by-row validation: green rows will be created, red rows have errors (bad role name, invalid email, unknown site name, duplicate).
  2. Click Import.
  1. The result screen shows: count created, count skipped (with reasons), downloadable error CSV for the skipped rows.

Each created user gets an user.created audit log entry. The actor is you; the target_id is the new user’s ID. If SendGrid is configured, welcome emails send asynchronously and you are not blocked on delivery.

Common variations

  • Re-run after fixing errors. Download the error CSV, fix the issues, upload only that file. Existing users are skipped with duplicate_email, so you cannot accidentally re-create them.
  • Pre-assign site access for viewers. Include site names exactly as they appear on the Sites page (case-sensitive). Multiple sites separated by semicolons. Unknown sites cause the row to fail — create the sites first.
  • Dry-run before committing. The preview screen is the dry run. No users are created until you click Import.

If this didn’t work

  • Import dialog rejects the file — wrong encoding. Save as UTF-8 CSV, not UTF-16 or Windows-1252.
  • All rows fail with invalid_role — role column is administrator instead of admin, or has trailing whitespace. The three valid values are admin, operator, viewer.
  • Viewer rows fail with unknown_site — the site name in the sites column does not match any site in the org. Check for typos and create missing sites first.
  • Welcome emails do not arrive — SendGrid is not configured. The API response includes the temporary passwords inline; share them out-of-band. See Configure organisation policies for SendGrid setup status.
  • Import returns 403 — your role is operator. User CRUD is admin/owner-only per D81. See Roles and permissions.