Skip to content

For institutions

Importing students

bǎi nián shù rén — “A hundred years to raise a person”

The CSV format, enrolling a whole class at once, and what happens before a student claims their account.

6 min read

Not what you were looking for?

October 9, 2026

Bulk import takes a spreadsheet of students and turns it into accounts, enrolments and invitation emails in one pass. This article is the file format, the limits, and how to read the result — because a partially successful import is the normal outcome and it tells you exactly what to fix.

Watch: Importing students

1 min 29 s · presented by Jason, Mandarin Temple's AI tutor

Captions are part of the picture, under Jason. The full transcript is below.

Captions file (WebVTT)
Read the transcript
  1. Hi, I’m Jason, Mandarin Temple’s AI tutor. Here’s how to bring a whole class list into your school from a single spreadsheet, in one go.
  2. Import takes a CSV or Excel file of your students’ names and email addresses, up to five hundred rows at a time.
  3. Each new student is emailed their own link to set a password, so you never handle anyone’s password yourself.
  4. Choose the file in this box, then press Import students. Nothing is created or sent until you press it.
  5. Once your classes exist, you can enrol everyone into one, or add a Class column so each student lands in the right one.
  6. Add a Parent email column as well, and each parent is invited to link their own account to their child’s.
  7. The line under your school’s name counts your students against the limit: this free workspace holds ten.
  8. In Guide, Students claim accounts explains the rest: each student shows as Invited until they have set their password.
  9. Go to Students lists them, and shows whether each holds a curriculum seat, with lessons, or a platform seat without.
  10. That’s importing: one spreadsheet in, an invitation out to every student, and everyone counted within your plan’s student limit.

Open the video guide on its own page, with its key moments

The file

  • CSV or XLSX — Both are accepted. A spreadsheet exported straight from your student system usually works untouched.
  • A header row — The first row names the columns. It is how the importer finds your data.
  • An email column — required — The only field that must be present and valid. A row without a usable address is skipped and reported.
  • A name column — optional — Used for the account name. Without it the address becomes the name, which is workable but ugly.
  • A class column — optional — Enrols each student into a class by name or invite code as they are created.

Five hundred rows at a time

Each import handles up to 500 valid rows. A larger cohort is several imports, which is also easier to verify — a failure in a batch of 500 is findable, and one in a batch of 3,000 is not.

Split by class or by year group rather than arbitrarily, so a re-run is a meaningful unit.

What each row does

  1. An account is created, or reused — A new student account in an invited state, or the existing account if that address is already here. Existing accounts are never overwritten.
  2. They are enrolled — Into the class you named on the row, or the one you chose for the whole import.
  3. An invitation is issued — Valid for seven days. The student uses it to set their own password and claim the account.
  4. An email goes out — After the import has committed, so a mail failure cannot roll back a successful account.

Reading the result

You get five numbers and a list of errors, and it is worth reading all of them rather than the first:

  • imported — Accounts created.
  • enrolled — Students placed into a class. Lower than imported means some rows named a class that did not resolve.
  • skipped_existing — Addresses already on the site. Not an error — they were reused rather than duplicated.
  • errors — Per-row reasons. Almost always a malformed address or a missing email column.
  • sent — Invitation emails that went out. Lower than `imported` is normal and not a failure — the accounts exist either way, and you can resend.

Before running a big one

  1. Import five rows first — Your own address among them. It costs a minute and catches a wrong column mapping before it affects a year group.
  2. Check the addresses are ones students read — A school address nobody logs into produces 200 accounts and no students. This is the commonest cause of a "nothing happened" import.
  3. Create the classes first — So the class column resolves. An unmatched class name imports the student without enrolling them.
  4. Warn the students it is coming — A first email from an unfamiliar domain lands in spam. One line in a school newsletter fixes most of the non-arrivals.

Common questions

Up to 500 valid rows per import. Larger cohorts go in several passes, which is easier to verify anyway.

Continue learning