Import users from a spreadsheet
Import multiple users from a CSV or Excel spreadsheet with the Import Users & Personnel wizard in Settings. The wizard maps names and emails, sets initial access, optionally creates personnel records and blocks, and lets you review every row before you commit.
Spreadsheet import is separate from adding one person at a time and from directory syncs such as Google Workspace or Microsoft Azure.
Before you start
You need the Admin role for the Site module (Site Admin) on every site included in the import access policy. Site Managers can inspect users in User Management but cannot open, preview, or run a user import. If you do not see the Import Users & Personnel card, contact a Site Admin.
Prepare one spreadsheet with a header row and columns for names and, when available, email addresses. Supported formats are .csv, .xlsx, and .xls.
For multi-sheet Excel workbooks, import one worksheet at a time. Each worksheet has its own header row, column mappings, and access settings. CSV files have no worksheets.
To create personnel records during the import, you also need the Manager role (or higher) for the Personnel module. Mapping personnel-block fields uses the same Personnel role.
Open Import Users & Personnel
Start the wizard from the Imports hub in Settings.
Open Settings and select Imports.
On the Import Users & Personnel card, click Open User Import.
The Imports hub only shows tools you can access. For more about the hub, see Use the Exports and Imports areas in Settings.
Upload Spreadsheet
Upload one spreadsheet that contains the users you want to add.
On Upload Spreadsheet, select a .csv, .xlsx, or .xls file.
Click Upload & Analyse.
CalmCompliance analyses the file and suggests column mappings. You always review and can change every mapping before continuing.
When AI features are on, CalmCompliance may suggest the initial mappings. Review them before you continue.
If AI mapping is unavailable, CalmCompliance falls back to local column-name matching and you can still map columns manually.
If AI features are off, review the locally suggested mappings or map columns yourself.
When AI-assisted mapping runs, CalmCompliance can send column headings to the AI provider. For recognised sensitive headingsโsuch as address, phone, emergency contact or next of kin, bank detail, National Insurance number, and date of birthโsample values are replaced with [withheld]. Headings that are not recognised can still send their sample values. Local column-name matching does not send values to an AI provider. See Data storage, access, and AI privacy.
Map User Fields
On Map User Fields, choose the worksheet when needed, set the header row, map columns, and configure email and personnel options.
If the workbook has more than one worksheet, choose the sheet under Worksheet. The first worksheet is selected by default. Changing the worksheet analyses that sheet again with its own mappings; previous mappings are not carried across.
Under Header row, choose the row that contains the column names.
Under Column mappings, map each spreadsheet column to a Calm field, or choose Don't import.
Map either a Full name column, or separate First name and Last name columns.
Map an Email column when the spreadsheet includes addresses. To build addresses for blank or missing values, turn on Build missing email addresses from a rule and configure the rule.
Optionally map a column to Permission template under the Access group when rows should use different templates.
Optionally turn on Create personnel records if the option is shown, then map any personnel-block fields you need.
Click Set Access when name and email resolution are ready.
Each included row needs a first name, last name, and email before import. A full name is split on spaces: the first token becomes the first name, and the remaining tokens become the last name. Review multipart names carefully.
Email rule
Email derivation is opt-in. A valid mapped email always wins and is never replaced by a derived address.
Turn on Build missing email addresses from a rule when:
No email column is mapped, so each address must be built from the person's name, or
An email column is mapped, but some rows are missing an address and you want one built from the name.
When the rule is on, configure:
Email domain
First name format: Full first name, First initial, or No first name
Last name format: Full last name, Last initial, or No last name
Name separator: Separated by ., Joined together, Separated by _, or Separated by -
Name order: First name first or Last name first
The rule needs at least one of the two name parts. Leave derivation off if every row must supply a usable mapped email. When derivation is off, a blank or non-address email cell blocks that row. Derived emails are marked Derived on Review Users.
Permission template column
Map a spreadsheet column to Permission template when each row should receive module roles from a named template instead of only the shared access policy.
A usable template name grants that template's module roles for the new membership.
A blank cell falls back to the shared access policy you set on Set Initial Access.
Template names match after ignoring letter case and extra spaces.
A missing template, a name that matches more than one usable template, a template the site cannot use, or a usable template that grants no access blocks that row.
Create and manage templates in Module Entitlements and Permission Templates.
Create personnel records and map blocks
Create personnel records appears only if you have the Manager role (or higher) for the Personnel module. When it is on, CalmCompliance creates a personnel record at the current site for every new membership created by the import. Existing organisation members are skipped and do not receive a personnel record from this option. When it is off, the import does not explicitly create personnel records. Existing site automation may still apply.
Personnel-block fields appear in the mapping list only while Create personnel records is on. Fields are grouped by block:
Employment details
Personal details
Emergency contact
DBS certificate
Financial details
Asbestos awareness
Emergency first aid at work
A block is created only when the row supplies the values that block requires. Required values include:
Employment details: Job title
Emergency contact: Emergency contact name and Emergency contact phone
DBS certificate: DBS certificate number, DBS level, and DBS issue date
If required values for a block are missing, that block is skipped, the row can still import, and a warning is shown. If employment has no usable start date, the start date is recorded as the import date and warned as a stand-in. Existing personnel blocks of the same type are preserved and are not replaced.
This import does not offer Right to work, Working at height, or integration blocks. For creating personnel records outside import, see Add a personnel record.
Set Initial Access
On Set Initial Access, choose the shared access policy for new memberships that do not use a permission template from the spreadsheet.
In the access table, set a role for each site and module: No Access, Member, Manager, or Admin.
Grant at least one site and module role. You can only assign access for sites where you are a Site Admin. CalmCompliance checks your authority on every affected site before preview and again when the import runs. If authority is missing on any target site, the import is blocked rather than applied in part.
Click Review Users.
This shared policy applies only to new memberships that do not resolve a permission template. Existing organisation members are skipped, and their access is not changed.
For how site and module roles work, see Understanding User Roles and Permissions.
Review Users
On Review Users, check every row before you commit.
Review the table columns: Include, Row, Source name, Resolved user, Email, Access when shown, and Outcome.
Clear Include for any row that should not be imported. Rows marked Skip existing member stay included and cannot be unchecked; those people are already members and their access is left unchanged.
Resolve or exclude every row marked Needs attention.
Read any warnings shown under a row. Warnings do not block the row.
Click Continue.
Outcome labels mean:
Create account โ a new Calm account will be created.
Add to organisation โ an existing Calm account will be linked as a new organisation member.
Skip existing member โ the person is already a member; access is preserved.
Needs attention โ the row is blocked until you fix the issue or exclude it.
Excluded โ you removed the row from this import.
The Access column shows the matched permission template when one applies, or Shared policy when the row uses the access you set on Set Initial Access.
Common blocking issues include a missing name, a missing or invalid email when derivation cannot supply one, a duplicated email, or an unusable permission template name. Non-blocking warnings include incomplete optional personnel values, unreadable or stand-in dates, and unfamiliar emergency-contact relationship values.
Confirm Import
On Confirm Import, check the summary, then run the import.
Review the counts for New accounts, Existing accounts linked, and Existing members skipped.
Confirm how many rows use a permission template and how many use the shared access policy.
If any rows have warnings, confirm the warning count. Those rows will still be imported.
Confirm whether personnel records and mapped blocks will be created.
Click Run Import.
When the organisation is live, newly added members receive the normal account-ready notification. When the organisation is quiet, account-ready notifications wait until the organisation goes live. Imported accounts start unverified and follow normal sign-in verification.
After a successful import, the page shows User import complete with counts for accounts created, existing accounts added to the organisation, rows skipped, and personnel records created when that option was used. Click Done or Back to Imports to leave the wizard.
A multi-sheet workbook needs a separate import run for each worksheet you want to bring in. Start the wizard again, upload the workbook, and choose the next worksheet on Map User Fields.
After the import
A completed user import writes an organisation audit entry labeled Users Imported. The entry includes the spreadsheet filename, total rows processed, users created, existing users linked, skipped rows, personnel records created when applicable, and personnel blocks added when applicable. Site-visible member-created audit entries are also recorded for new memberships.
To review audit history, open Settings > Audit Log. You need the Admin role for your site to view the audit log. See Viewing Audit History and Understanding Audit Events.
Other ways to add users
Add one person at a time from Adding and Managing Users.
Sync directory users with Google Workspace Integration or Microsoft Azure Integration.
Create a personnel record first, then use Invite as User on that person, from Add a personnel record.