Bulk Student Import
Starting a new term with fifty new students? Instead of filling in the form fifty times, put them all in a spreadsheet and upload it once.
Placeholder. Prepare a CSV of students, upload it, watch the progress bar, and check the results.
The upload box will let you pick an Excel file, but only CSV files are actually
processed. If you upload .xlsx or .xls, the import will sit on "processing" and never
finish, and no students will be added.
In Excel or Google Sheets, use File → Save as (or Download) and choose CSV before you upload.
Step 1 — Prepare your spreadsheet
Put one student per row, with a header row at the top naming each column.
Only these three columns are required:
| Column | What to put in it |
|---|---|
| first_name | The student's given name. |
| last_name | Their family name. |
| A valid email address, one per student. |
Everything else is optional — include a column only if you have the information, and leave individual cells blank where you don't:
| Column | What to put in it |
|---|---|
| gender | man or woman. male, female, m, f, homme, femme also work. Leave blank if you don't record it. |
| phone | Their phone number. |
| class | The class name exactly as it appears in QraOnline, e.g. Class A. Capitals don't matter. |
| date_of_birth | A real date in the past, for example 2001-05-21 or 21/05/2001. |
| location | City or address. |
| status | active, suspended, or banned. Left blank means active. |
| password | A starting password. See the note further down about passwords. |
Write the class exactly as you named it in QraOnline — Class A, Grade 9 Maths, and so
on. If the name doesn't match any of your classes, the student is still imported, just
without a class, and you can assign them afterwards.
A ready-made example
Copy this into a spreadsheet, replace the rows with your own students, and save as CSV:
first_name,last_name,email,phone,gender,date_of_birth,class,location,status
Amina,Tazi,amina.tazi@example.com,+212600000001,f,2005-03-14,Class A,Casablanca,active
Youssef,Benali,youssef.benali@example.com,+212600000002,m,2004-11-02,Class A,Rabat,active
Sara,El Fassi,sara.elfassi@example.com,+212600000003,,2006-01-27,Class B,Marrakech,active
Omar,Idrissi,omar.idrissi@example.com,,male,2005-07-08,Class B,,active
Nora,Cherkaoui,nora.cherkaoui@example.com,+212600000005,female,,,Fès,suspended
Karim,Alaoui,karim.alaoui@example.com,,,,,,
Notice the blanks: Sara has no gender, Omar has no phone or city, Nora has no date of birth or class, and Karim has only the three required columns filled in. Every one of those rows imports successfully.
import-spreadsheet-example.pngWhat to capture: A spreadsheet (Excel or Google Sheets) with a header row reading first_name, last_name, email, gender, phone, class — and three or four rows of made-up student data filled in underneath. This is a picture of a spreadsheet, not of QraOnline.
Add an arrow/highlight on: A box around the header row.
Save as static/img/docs/import-spreadsheet-example.png
You don't have to match the names above exactly. firstname, First Name, fname,
mobile, dob, city, and similar variations are all understood, and capital letters and
extra spaces don't matter. Any column we don't recognise is simply ignored.
Step 2 — Upload the file
- In the left sidebar, click Students.
- Click Import in the toolbar above the list.
- Drag your CSV onto the upload area, or click it to browse for the file.
The file must be under 50 MB.
Step 3 — Check the preview
Before anything is imported, QraOnline reads your file and checks it.
You'll see:
- The columns it found, and which ones it didn't recognise.
- A preview of the first five rows, so you can confirm the columns lined up correctly.
- Either a green valid file chip, or a list of exactly what's wrong.
If something is wrong, the Import button stays greyed out. Common problems it catches:
- One of the three required columns is missing entirely.
- A row has a blank first name, last name, or email.
- An email address isn't a real email address.
- A date of birth can't be read, or is in the future.
- A gender or status value isn't one of the allowed words.
import-preview-valid.pngWhat to capture: The import dialog after a good CSV has been selected: the detected columns listed, the first few rows previewed in a small table, the green 'valid file' chip visible, and the Import button active.
Add an arrow/highlight on: An arrow pointing at the green valid-file chip.
Save as static/img/docs/import-preview-valid.png
You can't edit rows here. Fix the mistakes in your spreadsheet, save as CSV again, and re-select the file.
When everything looks right, click Import.
Step 4 — Watch it run
The import runs in the background and the dialog shows you a live progress bar with a summary underneath: Total, Processed, Success, Failed, and Pending. It refreshes every few seconds.
Large files are handled in batches, so a few thousand students may take a couple of minutes.
While the import is running, the Close and Cancel buttons are switched off so you don't lose track of it. Once it finishes, you'll see a green confirmation and the dialog closes itself, refreshing your students list.
Step 5 — Read the results
| Result | What it means | What you do |
|---|---|---|
| Success | The row was added as a new student, or matched an existing one and updated it. | Nothing. |
| Failed | The row was skipped. Nothing was created or changed for it. | Check that row in your spreadsheet and re-import just the fixed rows. |
| Import failed | Something went wrong with the whole file. | Read the red message, then see the tips below. |
import-results-summary.pngWhat to capture: The import dialog once it has finished, showing the completed progress bar and the counts underneath: Total, Processed, Success, Failed and Pending — ideally with a non-zero Failed count so the reader can see what that looks like.
Add an arrow/highlight on: A box around the Success and Failed counts.
Save as static/img/docs/import-results-summary.png
A row is skipped when its first name, last name, or email is missing, or the email isn't a valid address. Everything else in the file still imports — one bad row doesn't stop the rest.
If you see a non-zero Failed count, the screen tells you how many rows were skipped but not which ones. The fastest way to find them is to scan your spreadsheet for rows with a blank name or a broken email address.
Two things that surprise people
Existing emails get updated, not duplicated. If a row's email address already belongs to a student in your center, that student's details are overwritten with the values from your file — name, phone, class, and so on. No duplicate is created. This is handy for updating everyone's phone numbers in one go, but it also means a typo in your file will overwrite good data.
Imported students do not get a welcome email. Unlike students you add one at a time, imported students receive no email and no "set your password" link. So:
- If you included a password column, tell each student what it is.
- If you didn't, nobody knows their password. Ask them to use Forgot password on the student login screen, or open each student and set a password yourself via Edit.
If something goes wrong
The progress bar never finishes. Almost always an Excel file was uploaded instead of a CSV. Save your file as CSV and upload it again.
I got a message about my plan limit. Your plan caps how many students your center can have, and the import is blocked before it starts if you'd go over. Upgrade or remove some students first — see Paying for Your Subscription.
Some students didn't appear. Every row needs a first name, a last name, and a valid email address. Rows missing any of those are quietly skipped.
The import failed with an error message. Usually the file isn't really a CSV despite its name, or it was saved with an unusual separator or text encoding. Re-export it from your spreadsheet program as a plain CSV.
A value in one of my columns was ignored.
Genders are tidied up automatically (male becomes man, female becomes woman, anything
unexpected becomes other, and a blank cell stays blank). A date of birth that can't be read
is left blank rather than failing the row. A blank status becomes active.
My students were imported but none of them have a class. The class names in your file don't match your classes in QraOnline. Check the exact spelling in Classes — the name must match, though capitals don't matter. Fix the file and import it again; because students are matched on email, re-importing updates the same students rather than creating duplicates.
Related pages
- Managing Students — adding and editing students one at a time
- Classes — set up your classes before importing