Importing people from a spreadsheet adds or updates many people at once: a department, a contractor list, a whole site. It needs the Organisation Admin, Access Manager or Credential Manager role, and it starts from People with Import People.
You need a CSV file or an Excel file (XLSX) with a header row and one row per person. The shortest route to one is Download template, on People and in the first step of the import: an empty people sheet with every column the import reads, a Read me sheet explaining each column, and a Lookup sheet listing your organisation's org units, companies and person types. The import always reads the first sheet of a workbook.
A file holds at most 4 MB, 50,000 rows, 200 columns and 1,000,000 filled cells. Split a larger file. A CSV file may use a semicolon, a comma, a tab or a vertical bar between cells, and the file Excel saves as CSV is read as well.
Column | What goes in it |
|---|---|
portierX ID | Leave empty. Only portierX's own export fills it, and an export file loaded back is matched on it. |
Person ID | Your own ID for the person, as text. The column is headed with your organisation's name for that ID, such as KID. An ID is never given to anyone else, not even after its person has left. |
First name | Required for every person the import adds. Up to 100 characters. |
Last name | Up to 100 characters. |
One address per person. Two people never share one. | |
Mobile phone | With + and the country code, up to 20 characters. |
Person type | One of your organisation's person types. Your own words are matched in step 2. |
Status | active, paused or offboarded. Your own words are matched in step 2. |
Start date | A date, the first working day. |
Leaving date | A date, the last day with access. Without a time it counts to the end of that day in your organisation's time zone. Empty while the person stays. |
Position | The job title, up to 255 characters. |
Org unit ID | Your ID for the unit. This is what matches, through a rename as well. |
Org unit | The unit's name. A name that matches no unit creates one when the import is applied. |
Manager ID | The manager's ID, in the same kind of ID as the Person ID column. Never a name. |
Manager | For reading only. It is never used to find anyone. |
Company ID | Leave empty. |
Company | Only for people of another company. Leave it empty for your organisation's own people. |
Groups | The groups the person belongs to. The import adds them to each group named and removes them from none. A group portierX fills by itself cannot be set here. |
Separate several groups with a vertical bar: Night shift | Workshop.
portierX recognises the template's headings on its own, and common names in English, German, French and Dutch. Case, accents, spaces and punctuation make no difference: E-Mail, e_mail and EMAIL are one heading. A column portierX does not recognise is matched by hand in step 2, or left out. Your own extra columns can stay in the file.
Write dates as YYYY-MM-DD; DD.MM.YYYY and DD/MM/YYYY are read too, day first. A leaving date may carry a time, such as 2026-09-30T17:00. In an Excel file a date cell counts as a date whatever its format. IDs are text: a leading zero stays, and an ID a spreadsheet has turned into a number such as 1.2E+11 is refused.
A blank cell clears that field on an existing person, with three exceptions: a blank first name is skipped, a blank status leaves the status as it is, and a blank groups cell adds no group. A column the file leaves out changes nothing.
Open People and choose Import People. The Import people panel runs in four steps: Choose a file, Match columns, Preview and Result.
Pick the file with Choose a file or drag it here. Under What should this import do? choose what happens to people already in portierX. Then Next: match columns.
Under Match columns, check which person field each File column is matched to (Matched to) and where the match came from (How: Matched automatically, Kept from last time, You corrected this or No match found). Correct a match in the list; Not imported leaves a column out.
Under Match the values in this file, every person type, status, company and group in the file that portierX cannot match on its own is listed once, with its number of rows. Choose what the value means, or Skip this value. A company portierX does not know is created when the import is applied. Then Next: preview.
The Preview shows what the import would do: the counts Rows in the file, New, Updated, Unchanged, Refused and Waiting for you, then Decide these first, Changes and Refused rows. Up to here nothing is written.
Decide the rows under Decide these first. Then Apply; the button carries the number of changes, and the Apply this import dialog sums them up. With nothing to write, Finish ends the import.
The Result reads Import applied or Nothing changed and counts how many people were added, updated, left unchanged and refused. Use Download refused rows here, before you close the panel with Done.
Under What should this import do? you choose one of three settings in the first step.
Add new people only: rows about people already in portierX are left alone.
Add and update: existing people receive the file's values, except in fields another source keeps.
Review before applying: writes the same as Add and update once applied. Every import stops at the preview, whichever setting you choose.
Mirror belongs to a registered source that delivers full files, such as an HR interface. It is not offered for an uploaded file.
portierX matches a row first by the portierX ID of an export file, then by the Person ID an earlier file recorded on the person, and last by the email address. A row that matches by email only is put to you as a proposal.
Under Decide these first waits every row portierX does not decide on its own. Apply stays locked until all of them are decided.
This looks like Sofia Lang: the row matches a person by email only, or its ID belonged to someone who left under another name. The card says what confirming changes on the record. Yes, this is Sofia Lang applies the row to that record, and portierX remembers the row's ID for the person. No, this is not the same person means the row changes nobody.
A row that reverses an end date or status someone set in portierX, or ends the person later than set: the two buttons name the date portierX holds and the date in the file; without a date they read Keep Current Values and Use the File’s Values. Keeping leaves the whole row out, its other changes included.
Conflicts: the file came from the people export, and the person was changed in portierX after the export. The card shows both values; you choose Keep Current Values or Use the File’s Values. An unresolved conflict is not applied.
A row is refused when nothing on it identifies one person safely, when the same ID appears on two rows or the IDs on one row point to different people, when an ID looks changed by a spreadsheet, or when the person's record refused the row as it was applied. Refused rows are listed with their reason under Refused rows, in the preview and in the result. Download refused rows gives them as an Excel file: the row number, the reason and the row as the file carried it.
A single value is skipped and the rest of its row applies: a value that matches nothing in portierX or more than one record, a manager that would make a loop, a group portierX fills automatically, a value that cannot be read, and an email address that already belongs to someone else. The preview lists them under Changes on the Values skipped tab, with name, field and value.
Fields another source keeps, such as an HR interface or Microsoft Entra ID, are not written by the import. They sit on the Kept by another source tab.
Applying runs in the background: org units first, then the people the import adds, then the existing people, then the managers. The result shows what was written.
Every change is recorded in the person's history and in the audit log, in your name, with the import and the file name.
A confirmed email match records the row's ID on the person. The next file recognises the person by it.
portierX remembers the column matching and the matched values for your next file. They then read Kept from last time.
If another import or an undo changed people since the preview, the preview says so, and Preview Again compares the file afresh.
On the Result step of the Import people panel, Undo this import takes back, after a confirmation, what the import wrote. Every value goes back to what it was, as long as nobody changed it since. People the import added are removed when they are unchanged and hold nothing, that is no key, no card and no assignment; anyone who holds something stays, and the result counts them. Org units the import created are removed while they are unused and nobody has moved them; renamed units get their old names back. The step then reads Import undone, with the name and the time. A failed import that had already written rows can be taken back the same way.
Undo is offered on the Result step, before you close the panel with Done. It takes the same role as the import.
At least one column must identify a person: portierX ID, Person ID or Email. Without one the matching cannot be confirmed; Fix these to continue names the reason, as it does when one field is chosen for two columns.
Only an Organisation Admin sets managers from a file. For the other roles a Manager ID column is not accepted.
A file you import yourself never changes your own end date, status or manager.
An import is finished within 24 hours. After that it ends and its file is deleted.
Nothing is written before Apply. Closing the panel before that asks Discard this import?: Discard Import gives up the file and the matching, Keep Importing goes back.
Columns that are not imported are deleted once the matching is confirmed, and after 24 hours at the latest.
The import issues no access credentials and gives no access to a space. That is separate work afterwards.
The import adds people to groups and removes nobody from one.