Employees are the largest group you will invite. Three paths: add-and-invite from the People tab (best for manually adding someone who wasn't hired through the pipeline), the Settings team screen one-by-one, or a roster CSV import for many.
Adding an employee manually from the People tab
If you already have someone on your team but they didn't come through the hiring pipeline — a lateral transfer, a rehire, a founder — you can add them directly without creating a job opening.
Go to /{slug}/app/people and click Add employee. Fill in:
| Field | Required |
|---|---|
| First name / Last name | Yes |
| Yes (needed to send the invitation) | |
| Phone | No |
| Nationality | No |
| Position | No (but required before you can send an invitation) |
| Start date | No |
| CV (PDF, ≤ 5 MB) | No |
Once saved, the person appears in the People roster immediately with the status Not invited. Their profile is identical to a pipeline-hired employee — same fields, same competency profile, same growth plan.
Sending an invitation from the People tab
After adding the employee, or for any existing employee who has not yet been invited, open their row's action menu and choose Send invitation. The platform sends the same branded invitation email and link (valid for seven days) that Settings → Team → Invite uses. After sending, their status changes to Pending.
The Send invitation action is only available when the employee has both an email address and a current position set. The action is disabled (with a tooltip explaining what is missing) if either is absent.
Inviting many people from the People tab
You do not have to open one row at a time. Every row in the People table carries a checkbox (HR administrators only):
- Filter the roster down to the group you want — status tabs, search, nationality, or invitation state.
- Tick the rows you want, or use the checkbox in the table header to select every row on the current page (25 rows by default; change it with the rows-per-page control under the table).
- A bar appears under the table with the number selected. Click Invite selected (N).
What the platform does with that batch:
- "Select all" means the page in front of you — never the whole workspace. If you filtered to one job family and ticked the header box, only that page of that filter is selected. Changing a filter, or turning the page, clears the selection, so a batch can never reach rows you can no longer see.
- Ineligible people are skipped, not failed. Anyone with no email address, no current position, or who has already accepted is left out — the same rule that greys out the single-row action. The summary names the count and the reason: "Invited 312. Skipped 47 (no email address)."
- Above 25 recipients you are asked to confirm, with the exact number in the prompt. Bulk invite sends real email and there is no undo.
- Invitations are sent a few at a time rather than all at once, so a large batch takes a few moments. Leave the tab open until the summary appears.
Everything else is identical to inviting one person: same branded email, same seven-day link, same Pending state on the roster afterwards.
Assigning an assessment to the people you selected
The same selection bar carries Assign assessment (N). Nothing is sent — it opens the assessment assignment wizard with those people already loaded, so you pick a template once for the whole group. Filter the roster to a cohort, select the page, then assign.
Invitation states
The People table shows each employee's invitation state so you always know who still needs to be onboarded:
| State | Meaning |
|---|---|
| Not invited | No invitation has been sent yet |
| Pending | Invitation sent; the employee has not yet accepted |
| Expired | The invitation was sent but the seven-day window passed without acceptance — send a new one |
| Accepted | The employee clicked the link and created their account |
These states are visible to HR administrators only.
Inviting one person from Settings
/{slug}/app/settings/team → Invite → role Employee → email and the Job Description (role) they will be assigned to. Selecting a Job Description is required when the role is Employee; the dropdown lists the active Job Descriptions in your workspace (create them first under Job Descriptions if the list is empty). The Job Description field only appears once you pick the Employee role.
When the employee accepts, their employee record is created automatically with that Job Description as their current role, so they show up correctly in the People roster and org chart from day one.
If you select a line manager, the new employee is added to that manager's team scope automatically. If you leave it blank, the employee belongs to no team and is visible only to HR administrators until you assign them later.
The recipient receives a branded bilingual invitation email with the seven-day link (when an email service is configured). The modal also shows a copy-link button and a WhatsApp share button — useful if your workspace does not yet have an email service set up. They land on /invite/{token}, set their name and password, and are dropped into the employee portal at /{slug}/me — not the administrative workspace.
Inviting many people at once
For larger cohorts, use the team CSV import (needs Users & roles Act):
/{slug}/app/settings/team → Template to download the CSV template, fill it in, then Mass upload (CSV) to upload it.
The template is generated for your workspace when you download it. It has the columns firstNameAr, firstNameEn, lastNameAr, lastNameEn, email, role, nationality, nationalId, phone, hireDate, reportsToEmail, position and jobFamily, one example row for an employee, and one example row for each of your workspace's current roles (named in your interface language).
The role column decides what each row becomes:
EMPLOYEE(exactly, in upper case) — a portal employee who signs in to/{slug}/me.- The name of one of your workspace roles (its English or Arabic name; case and extra spaces are ignored) — a staff member with that role.
Every row needs an email, and every accepted row gets an invitation carrying its role (staff rows) or employee access.
Rows are checked one by one, and a bad row never blocks the others:
- A role name that doesn't exist in your workspace is rejected with the name you used, the list of roles you can use, and a hint to download the template again.
- A role you aren't allowed to assign (for example the locked Workspace Admin, if you aren't a Workspace Admin yourself) is rejected for that row.
- Missing names or email, an invalid email or date, and an email that already has an account are rejected or skipped with a per-row note.
HR_ADMIN and LINE_MANAGER are not special values: they work only if your workspace has a role with that exact name.
Full column rules are in Team management.
Bulk import from a spreadsheet
When you want to seed your whole roster at once — not just send login invitations, but create the actual employee records, linked to the right positions — use Import on the People tab. This is the fastest way to bring an existing headcount into Jadiroon.
Go to /{slug}/app/people and click Import (next to the search box in the toolbar; HR administrators only). A two-step dialog opens.
Step 1 — download the Excel template
Click Download template to get an .xlsx file. Its dropdowns are generated from your workspace at the moment you download:
- Job Description — every active Job Description (role) in your workspace. Each Job Description is shown with its Job Family and Sub-Sector for context — e.g. Supervisors (Nurse - Inpatient/Outpatient Care) — so Job Descriptions that share a name stay distinguishable and the employee lands on the right one. The Job Description gates the position (see below). Because the list is captured at download time, re-download the template if you add Job Descriptions afterwards.
- Position — a dependent dropdown: once you pick a Job Description on a row, the Position list narrows to the positions that belong to that Job Description.
- Role —
EMPLOYEE(no login) or one of your workspace's roles, listed by name in the dropdown. Re-download the template after you create or rename roles. A role your workspace doesn't have rejects the row.
The template has these columns:
| Column | Required |
|---|---|
| First name | Yes |
| Last name | No |
| Only for rows with a workspace role | |
| Phone | No |
Nationality (ISO-2, e.g. SA) | No |
| National ID / Iqama | No |
Start date (YYYY-MM-DD) | No |
| Manager email | No |
| Role | No (defaults to EMPLOYEE) |
| Job Description | No (but required to assign any position) |
| Position | No |
| New Position | No (free text) |
How Job Description, Position and New Position resolve — per row, in order:
- No Job Description selected → the employee is imported with no position, whatever Position or New Position hold.
- Job Description + a Position selected → the employee is assigned to that Position (New Position is ignored).
- Job Description + Position blank + New Position typed → a new Position is created under that Job Description and the employee is assigned to it. Reused for later rows in the same upload that name the same position under the same Job Description.
- Job Description only (nothing else) → imported with no position; set it later from
/people.
Step 2 — validate the filled file
Fill in your rows, then upload the file back (.xlsx or .csv, up to 200 rows per import). The upload is a two-step, validate-first flow — nothing is created until you confirm:
- Validate — the platform checks the whole sheet read-only and shows you a preview: how many employees will be imported, which new positions will be created (and under which Job Description), how many rows are already in your workspace (skipped), and a list of any corrupted rows with a per-row reason. A row is flagged when a required field is missing/invalid, when a Job Description value matches no Job Description in your workspace, when a Position matches no position under the chosen Job Description, when a New Position is typed without a Job Description, when the Role names no role in your workspace, or when a new person's role is one you aren't allowed to give (giving roles needs Users & roles Invite or Act, and only a Workspace Admin gives Workspace Admin).
- Confirm import — once you're happy with the preview, confirm. The platform then creates the new Positions first, and then creates a Person — a roster record — for each valid row, assigning it to the position resolved from its Job Description / Position / New Position (per the rules above). Corrupted rows are skipped (and listed); fix them in the sheet and re-upload.
What gets a login invitation, and what does not:
- A plain
EMPLOYEErow creates a roster record only — no login invitation is sent, exactly like the single Add employee form. Invite them later from their row's action menu. - A new person whose Role is one of your workspace roles and that includes an Email also receives a login invitation on that role, the same seven-day link used elsewhere. For a person who is already in your workspace, the Role column is checked but doesn't change their access.
- A row that already matches an existing person, user, or pending invitation (by email) is skipped — bulk import never overwrites or duplicates someone already in your workspace.
Export the current roster
Next to Import on the People tab, Export downloads your current employees as an .xlsx in the same format as the import template — same columns, same Job Description/Position dropdowns. Each person's Job Description, Position, manager (by email), role, start date and IDs are filled in, so the file is a ready-made backup you can hand off, archive, or edit and re-upload through Bulk import without any reformatting. Export is HR-admin only, like import.
What the employee sees
The recipient's experience differs from an admin or manager invitation:
- Same email subject and seven-day link.
- Same
/invite/{token}page where they set name and password. - After they create their account, they land on
/{slug}/me— the employee portal, not the workspace.
The employee never sees Hire, Develop, Grow dashboards, the People roster, the Roles list, or Settings. Their world is their own dashboard, their assessments, their competencies, their growth plan, their learning recommendations, and their profile.
Onboarding flow after acceptance
When an employee accepts an invitation, two things happen automatically:
- An ONBOARDING notification is created and pinned to the top of their notifications. It explains what to expect.
- A default growth plan is created in DRAFT status, attached to them, ready to be co-edited by HR or their line manager.
If you have configured onboarding assessments at the workspace level (in Hiring configuration), those are queued and assigned automatically as well.
Next
The next page describes what the invitee actually sees in their inbox and on the accept page — useful both for understanding the experience and for explaining it to people you are inviting.