Skip to main content
Version: Next

Bulk import students (CSV)

Import hundreds of students at once from a spreadsheet. This guide walks you through every step of the 6-step wizard — from downloading the template to reviewing your results — so you can get your entire student body loaded quickly and accurately.


Before You Start

What you'll need

  • Spreadsheet software — Microsoft Excel, Google Sheets, or LibreOffice Calc
  • Student data ready — names, dates of birth, gender, and enrollment dates at minimum
  • Permission — your account must have the Students › Create permission. If you see a locked tab, contact your system administrator.
  • School selected — make sure you have selected the correct school in the top navigation bar before opening the import page.

Supported file formats

FormatExtensionNotes
CSV (comma-separated).csvUniversal; works in any spreadsheet app
Excel workbook.xlsxRecommended; preserves formatting and dropdowns
Legacy Excel.xlsSupported but .xlsx is preferred
Maximum file size

Files larger than 10 MB are rejected. Split very large cohorts into batches of 500–1 000 rows per file.


How to Open the Import Wizard

  1. In the left sidebar, click People.
  2. Click Import in the People sub-menu.
  3. The Students tab is selected by default.

Import People page with Students tab active


Step 1 — Upload

This is the starting screen of the wizard. You have two actions available.

Click Download Template to get a pre-formatted Excel file.

Upload step — template download cards (Minimal, Essential, Full)

The downloaded template contains:

  • Sheet 1 – Data: column headers with colour-coded required (blue) vs. optional (grey) columns, a row of format hints, and three sample student rows.
  • Sheet 2 – Field Reference: full descriptions, accepted values, and data-validation dropdowns for every column.
Use the Field Reference sheet

Before filling in data, read Sheet 2. It lists every accepted value for fields like gender, boardingStatus, and enrollmentStatus so you don't have to guess.

Option B: Upload your own spreadsheet

If you already have a student list in a different format, you can upload it directly. The system will map columns by name (case-insensitive).

To upload a file:

  • Drag and drop the file onto the blue upload zone, or
  • Click Browse files and select your file.

Upload dropzone with Browse files button and required fields checklist

What happens immediately after upload:

  • The file is parsed in your browser (no data is sent to the server yet).
  • Required columns are checked. If any are missing, a red alert lists the missing headers.
  • Valid rows are counted and shown as a green badge.

After upload: Step 2 Preview with 10 rows, 9 Ready and 1 Needs Fix

Required columns

These four columns must be present in your file or the upload will be rejected:

ColumnDescriptionExample
firstNameStudent's first nameTatenda
lastNameStudent's surnameMoyo
dateOfBirthDate of birth2010-03-15 or 15/03/2010
genderGender identitymale, female, or other
Missing required columns

If you see "Missing required columns: dateOfBirth, gender", your spreadsheet headers don't match. Check for typos, extra spaces, or different capitalisation. The system is case-insensitive, but spelling must match exactly.

Accepted date formats

The system accepts multiple date formats and converts them automatically:

Input formatExampleNotes
ISO 86012010-03-15Preferred
Day/Month/Year15/03/2010Common in Zimbabwe
Month-Day-Year03-15-2010US format
Excel serial40221Auto-converted from Excel date cells

Gender values

Accepted valuesStored as
male, m, man, boymale
female, f, woman, girlfemale
anything elseother or prefer_not_to_say

Click Next to proceed to the Preview step.


Step 2 — Preview

The Preview step shows every row from your file in an editable table. This is your chance to spot and fix errors before any data is saved.

Preview table with stat cards showing 10 rows, 9 Ready, 1 Needs Fix

Understanding the row colours

Row appearanceMeaning
White / normalRow passed all validations
Red left borderRow has one or more field errors
Grey / dimmedRow is deselected (will not be imported)

Editing a cell inline

Click any cell to edit its value. The field type determines the input:

  • Text / name fields — plain text input
  • Date fields — date picker
  • Gender / boarding status / etc. — dropdown with accepted values
  • Grade level — searchable combobox
  • Class division — searchable combobox (filtered by selected grade)

Row 6 highlighted with "Needs fix" badge — firstName is empty, red border visible

After editing, the row re-validates automatically. A green tick appears when all errors are resolved.

The error panel

Click the red badge on an errored row to expand the error panel below that row. It lists each failing field and why it failed.

Inline edit active in the empty firstName cell — "First name is required" shown below

"Tinashe" typed into the firstName field — cell still focused

Row 6 now shows "Ready" badge — all 10 rows selected

Skip invalid rows

If you cannot fix some rows right now, enable Skip invalid rows (toggle at the top of the table). Invalid rows will be excluded from the import; you can fix and re-import them later.

"Skipping invalid rows" toggle active — row 6 shows "Skipped" badge

Select / deselect rows

Use the checkboxes in the leftmost column to manually include or exclude individual rows.

  • Select All checkbox in the header selects all currently visible valid rows.
  • Holding Shift and clicking selects a range.

Locking a row

Once you are happy with a row, click the lock icon (🔒) on that row. Locked rows cannot be accidentally edited.

Click Next to proceed to the Assign step.


Step 3 — Assign

The Assign step lets you enrich each student's record beyond what can be expressed in a flat CSV. You can configure academic placement, boarding, scholarships, medical details, transport, financials, and guardian links — all before the import runs.

Step 3 Assign — Configure Student Assignments with 10 students ready

Optional step

If your CSV already contains placement and enrichment fields, or you plan to add this information later via individual student profiles, you can click Next without expanding any rows.

Academic placement

FieldDescription
Grade Levele.g. Grade 8, Form 3
Class Divisione.g. 8A, Form 3B (filtered to selected grade)
StreamScience, Arts, Commerce
Language of InstructionEnglish, Shona, Ndebele

Bulk & Bundle Apply panel open — field chips and Academic Placement section

Boarding

FieldDescription
Boarding Statusday, boarding, weekly boarding
Housee.g. Nehanda House
Dormitorye.g. Block A
Bed Numbere.g. 14

Enrollment

FieldDescription
Enrollment Statusactive, pending, deferred
Student Typeregular, transfer, international, exchange

Scholarship

FieldDescription
Is Scholarship StudentYes / No toggle
Scholarship TypeGovernment, NGO, Private, Sports, etc.
ProviderName of sponsoring organisation
AmountScholarship value (number)

Special Needs

FieldDescription
Has Special NeedsYes / No toggle
CategoryLearning disability, Physical, Visual, Hearing, etc.
DetailsFree-text notes for staff

Medical

FieldDescription
Blood TypeA+, B−, O+, AB+, etc.
AllergiesComma-separated list
Medical Conditionse.g. Asthma, Diabetes
Dietary Restrictionse.g. Vegetarian, Halal

Transport

FieldDescription
Requires TransportYes / No toggle
RouteSchool bus route name
Pickup PointNamed bus stop
Drop-off PointNamed bus stop

Financial

FieldDescription
Fee Payment PlanTerm, Monthly, Annual
Fee CategoryStandard, Discounted, Scholarship
Payment ResponsibilityGuardian, School, Sponsor

Guardian Linking

This section links each imported student to an existing guardian already in the system. If the guardians haven't been imported yet, you can skip this and link them after import.

Tatenda Moyo's per-student assignment panel — Academic Placement and Boarding fields

Per-student panel scrolled to Guardian Linking — search and pick guardians

To link a guardian:

  1. Click the Search guardian combobox and type a name or phone number.
  2. Select the guardian from the list.
  3. Set the relationship type (Mother, Father, Legal Guardian, etc.).
  4. Toggle the relevant permissions:
PermissionWhat it controls
Is Primary ContactFirst contact in an emergency
Is Fee PayerReceives invoices and fee statements
Lives With StudentUsed in address lookups
Can Pick UpAuthorised to collect the student
Can Authorise Medical TreatmentSigns for emergency procedures
Receives Report CardsGets academic report notifications
Receives Attendance AlertsGets absence/tardiness SMS/email
Receives Medical AlertsGets health incident notifications
Receives Fee StatementsGets billing emails

You can link multiple guardians to one student. Click + Add Another Guardian to add more.

Tags & Notes

Attach free-form tags (e.g. new-intake-2026, scholarship) and optional internal notes to all imported students at once.

Click Next to proceed to the Options step.


Step 4 — Options

Global settings that apply to every student in this import batch.

Step 4 Options — Configure Import with Portal Settings and Error Handling

OptionDefaultWhat it does
Send Portal Invitation EmailsOffSends a welcome email with login credentials to each student's email address immediately after import. Turn this on only if students should have portal access straight away.
Assign Default Student RoleOnAutomatically assigns the school's default Student role to every imported user account. Turn this off only if you plan to assign roles manually.
Stop on First ErrorOffIf any student record fails to save, the entire batch is cancelled. Leave this off to allow partial success (failed rows are reported in the Results step).
Portal invitations

If student email addresses are missing or provisional, leave Send Portal Invitation Emails off. You can send invitations individually from each student's profile later.

Click Import to begin the import.


Step 5 — Import (Processing)

The system sends your data to the server. A live progress bar shows how many records have been processed.

Step 5 Import — live progress bar at 30%, Phase: Running, 5 of 10 rows processed

What is happening in the background:

  1. Student profiles are created in the database.
  2. If Assign Default Role is on, an IAM user account is created and the role is assigned.
  3. If Send Portal Invitation is on, invitation emails are queued.
  4. Guardian links configured in Step 3 are created one by one after the main batch completes.
  5. The system polls for status every 2 seconds until all records finish.
Do not close the browser tab

While the import is running, keep this browser tab open. Closing the tab does not cancel the import (it continues on the server), but you will lose the live progress view and will need to check individual student profiles to confirm success.


Step 6 — Results

After processing completes, the Results step shows a full summary.

Step 6 Results — "Import Completed with Issues", 9 of 10 students imported, stat cards showing Successful: 9, Failed: 1

Results detail — Failed Imports section showing Row 10 timeout error, Successfully Imported list with student names and IDs

Success summary

ItemMeaning
Green bannerTotal number of students successfully created
Guardian links badgeHow many guardian–student relationships were created
Download resultsExports a CSV of results (success and failure rows)

Error table

If any rows failed, they are listed here with the exact error message returned by the server.

ColumnContent
Row #Position in your original file
NameStudent name from the row
ErrorHuman-readable description of what went wrong
FieldWhich field caused the failure (if applicable)

After the import

  • Click View Students to go directly to the Students list filtered to the newly imported cohort.
  • Click Start New Import to run another batch.
  • Failed rows can be corrected in your spreadsheet and re-uploaded in a fresh import.

Complete Field Reference

Required fields

Column headerFormatExample
firstNameTextTatenda
lastNameTextMoyo
dateOfBirthYYYY-MM-DD2010-03-15
gendermale / female / otherfemale
Column headerFormatExample
studentNumberText (unique)STU-2026-001
emailValid emailt.moyo@school.ac.zw
phonePhone number+263771234567
nationalityTextZimbabwean
enrollmentDateYYYY-MM-DD2026-01-20
gradeLevelCodeText matching a grade in the systemGrade 8
boardingStatusday / boarding / weekly_boardingday

Personal details

Column headerFormatNotes
middleNameTextOptional
preferredNameTextNickname shown on registers
placeOfBirthTextCity or town
citizenshipStatusTexte.g. citizen, resident, alien
nationalIdTextNational ID number
birthCertificateNumberText
passportNumberText
alternativePhonePhone numberSecond contact number

Academic placement

Column headerFormatNotes
enrollmentStatusactive / pending / inactive / graduated / transferred / expelledDefault active
studentTyperegular / transfer / international / exchange / part_timeDefault regular
streamTexte.g. Science, Arts
languageOfInstructionTexte.g. English

Boarding & accommodation

Column headerFormatNotes
houseTextHouse name
dormitoryTextDormitory block/name
bedNumberTextBed or bunk number

Scholarship

Column headerFormatNotes
isScholarshipStudenttrue / false / yes / no
scholarshipTypeTexte.g. Government, NGO, Sports
scholarshipProviderTextOrganisation name
scholarshipAmountNumberAnnual amount

Special needs

Column headerFormatNotes
isSpecialNeedstrue / false / yes / no
specialNeedsCategoryTexte.g. Learning Disability, Visual
specialNeedsDetailsTextFree-text description

Medical

Column headerFormatNotes
bloodTypeA+ / A- / B+ / B- / O+ / O- / AB+ / AB-
allergiesComma-separatede.g. Peanuts, Penicillin
medicalConditionsComma-separatede.g. Asthma, Diabetes
dietaryRestrictionsComma-separatede.g. Vegetarian, Halal

Emergency contact

Column headerFormatNotes
emergencyContactNameTextFull name
emergencyContactPhonePhone number
emergencyContactRelationshipTexte.g. Mother, Uncle

Transport

Column headerFormatNotes
requiresTransporttrue / false / yes / no
transportRouteTextRoute name
transportPickupPointTextNamed stop
transportDropoffPointTextNamed stop

Financial

Column headerFormatNotes
feePaymentPlanterm / monthly / annual / custom
feeCategoryTextFee tier name
paymentResponsibilityguardian / school / sponsorWho is invoiced

Portal access

Column headerFormatNotes
portalAccessEnabledtrue / false / yes / noWhether a login account is created

Other

Column headerFormatNotes
tagsComma-separatede.g. new-intake, scholarship
notesTextInternal staff notes

Common Errors & How to Fix Them

File errors

Error messageCauseFix
Invalid file typeFile is not .csv, .xlsx, or .xlsSave your file as CSV or Excel and re-upload
File size exceeds 10 MBToo many rows or images embeddedRemove images; split into smaller batches
Missing required columns: [list]Column headers are misspelled or missingCompare your headers to the template exactly
No rows found after skipping headerFile only has a header row or is emptyAdd at least one data row

Row validation errors

Error messageCauseFix
dateOfBirth: invalid dateUnrecognised date formatUse YYYY-MM-DD (e.g. 2010-03-15)
gender: invalid valueGender value not recognisedUse male, female, or other (lowercase)
email: invalid email addressMalformed emailCheck for spaces or missing @
phone: invalid phone numberBad formatUse international format +263... or local 07...
enrollmentDate: invalid dateDate cannot be parsedUse YYYY-MM-DD
studentNumber: must be uniqueDuplicate student number in the fileRemove duplicates or leave studentNumber blank to auto-generate

Import errors (server-side)

Error messageCauseFix
email already existsAnother account already uses this emailUse a different email or leave blank
studentNumber must be uniqueStudent number already taken in the databaseChange the student number or leave blank
schoolId not foundSchool selection mismatchVerify the correct school is selected in the top navigation
gradeLevelCode not foundGrade level does not exist in this schoolCheck academic setup; ensure grade levels are configured
classDivisionId not foundClass division not created yetCreate the class division in Academics before importing