Appearance
Importing staff
Who this is for: Admin, Tenant owner
What you'll achieve: Bulk-load people from CSV or Excel with correct duty tiers
Requires role
staff.import — Tenant owner or Admin
Before you begin
- Download or copy the CSV template from the Staff page (or use
templates/staff.csvin the repo) - Decide duty tiers for each person

CSV import
Columns
| Column | Required | Notes |
|---|---|---|
| Name | Yes | Display name |
| No | Contact / matching | |
| Team | No | Maps to grade/team banding |
| Role | No | Job title label |
| Duty tier | Recommended | preferred, acceptable, last_resort, or excluded |
| First aider | No | true / false |
Example:
csv
Name,Email,Team,Role,Duty tier,First aider
Alex Example,alex@school.test,Professional Services,Teaching Assistant,preferred,true
Sam Example,sam@school.test,Teaching Staff,Class Teacher,last_resort,falseSteps
- Open Staff.
- Download the CSV template if needed.
- Paste CSV rows into the import area (or follow the on-page paste flow).
- Review validation messages.
- Confirm the import.
XLSX import (traffic-light tiers)
SchoolRota can parse Kenley-style spreadsheets where duty eligibility is encoded as cell fill colour (traffic lights) rather than a text column.
Typical colour mapping:
| Colour cue | Duty tier |
|---|---|
| Green | Preferred / eligible |
| Amber | Acceptable / caution |
| Red | Last resort or excluded (per parser rules) |
Exact mapping follows the domain helpers (dutyTierFromFillRgb / dutyTierFromLabel). Prefer an explicit Duty tier column in CSV when you control the file format.
Steps
- Open Staff.
- Upload the
.xlsxfile. - Review parsed rows and tiers.
- Confirm the import.
After import
- Spot-check a few people in the directory.
- Assign leads on the weekly template in Initial setup.
- Optionally add weekly commitments.
What happens next
Troubleshooting
| Problem | What to try |
|---|---|
| Tiers all default | Check column header spelling or XLSX fill colours |
| Duplicate names | Prefer unique emails; clean the sheet before re-import |
| Empty import | Ensure a header row and at least one data row |
