Appearance
Admitting students
Getting students into the system, one at a time or a thousand at once. 3 minutes per student by hand; an import runs in the background.
Admitting a student creates the student record, enrols them in a class and section for the current session, and creates two logins — one for the student and one for the parent.
Sidebar → Student Information → Student Admission
Before you start
| Needed | Why |
|---|---|
| A current academic session | The enrolment is filed under it |
| Classes with sections | Both are required on the form |
| Fee groups | Optional, but assigning fees at admission saves doing it later |
| Student categories and houses | Optional labels, if your school uses them |
Admitting one student
The form is long, but very little of it is required.
| Field | Required | Notes |
|---|---|---|
| Admission No | Yes | Unique within your school. Use Auto to generate it |
| Roll No | Yes | Auto gives the next free number in that class and section |
| First Name | Yes | Middle and last names are optional |
| Gender | Yes | |
| Date of Birth | Yes | Also used to build the student's password — see logins |
| Class and Section | Yes | Where they will actually sit |
| Father's Name and Father's Phone | Yes, for a new parent | Skipped when you link to an existing parent |
| Admission date, photo, category, house, blood group, address, previous school… | No | Fill in what you have |
Then Save. You should now see the student in the list, and a panel showing the student's and parent's login details.
Copy the credentials before you leave the page
The login details are shown once, on screen, immediately after admission. They are not stored in readable form.
You can regenerate them later — but that changes the password, which means anything already given to the family stops working.
Admission and roll numbers
Auto next to each field fills in the next number for you.
The admission number format is yours to set — prefix, whether the session year is included, whether the date is included, how many digits, and the separator. That lives in your school settings, and produces numbers like APX/2026-27/0042.
The counter restarts each session, by design
When you switch to a new academic session, the admission number counter goes back to 1. That is what makes APX/2026-27/0001 mean something. If a number is already taken, the system skips past it rather than failing.
Roll numbers are per class and section — the next free number within that specific section, not across the school.
The parent account
This is the decision people get wrong, and it is hard to unpick later.
| Choose | When |
|---|---|
| New parent | This family has no child at the school yet |
| Link to Existing Parent | A sibling is already admitted |
Siblings must be linked, not re-entered
Enter the same parent twice and you create two separate parent accounts. That family then gets two logins, sees one child in each, and cannot see both children in one place. Fee reminders arrive twice.
Search for the existing parent and link instead. Linking copies the family details across for you.
Where you do not give a parent email, the login is built from the father's phone number. See student & parent logins for exactly what gets created.
Fees at admission
Two optional fields save real work:
- Fee groups — assign the student's fees while admitting them, rather than visiting the fees screens afterwards
- Opening due balance — carry forward what the family already owed, typically when moving from a paper system or another product
Admitting many students at once
Student List → Bulk Import
- Download the template
- Fill it in — keep the columns exactly as they are
- Upload it, up to 10 MB
Every row must have: admission_no, roll_no, admission_date, first_name, gender, date_of_birth, class_name, section_name, father_name, father_phone. The remaining columns — mother's details, category, medical, bank, transport — are optional.
The class and section must already exist, and match exactly
class_name and section_name are matched against your existing records by name. A row naming a section that is not attached to that class fails with "Section 'B' is not mapped to Class 'Grade 5'."
Create your classes and sections first, and spell them identically in the sheet.
The import runs in the background — it needs the cron job
The upload returns immediately and the work happens in a queued job. If the cron job is not running on the server, the import never starts and nothing tells you.
If an import stays at "processing" and never moves, that is the cause. It is not a problem with your file.
Rows that fail are reported individually with their row number; the rest still import. A finished import reports as completed, or completed with errors and the list of them.
Import in batches you can check
500 rows in one file is fine. But import one class first, open three of those students, and confirm the data landed where you expected — then do the rest. A column misread across 2,000 rows is a long evening.
Students who leave, or pause
Students are never really deleted. They change status.
| Status | Means |
|---|---|
| Active | Currently studying |
| Inactive | Temporarily suspended, expected back |
| Left | Withdrawn, transfer certificate issued. Final |
| Passed out | Completed the final year |
Sidebar → Student Information → Disabled Students lists everyone who is not active, and is where you set someone back to active if they return. You can record a reason for leaving alongside the status.
Mark them Left — do not delete them
A student marked Left keeps their fee history, their attendance, their exam results and their name on the register for the years they attended. Deleting the record tries to erase all of it.
Who appears in a class list
Two different questions, two different answers, and it matters when you read reports:
- Who is in this class now — currently studying students only. This is what attendance, fee collection and today's class lists use
- Who was on the register that year — everyone enrolled that year, including those who were promoted out, left, or graduated
That is why a closed year's report shows more students than the class holds today. That is correct: they were in that class that year.
Real example
Apex Academy moved 1,180 students from a spreadsheet in one afternoon:
- Classes and sections created first, spelled exactly as in the sheet
- One class (52 rows) imported and checked by hand
- The remaining 1,128 imported in four files, split by section, to keep error lists readable
- 14 rows bounced — mostly duplicate admission numbers from the old system — fixed and re-uploaded
- Credentials sent afterwards, class by class
The step they nearly skipped: confirming the cron job was running. Their first import sat at "processing" for twenty minutes before anyone thought to check.
Common problems
| What you see | Cause |
|---|---|
| "Plan Limit Reached! You cannot admit new students" | Your subscription plan caps student numbers. Contact your provider to upgrade |
| "The admission no has already been taken" | That number exists in your school. Use Auto |
| "This parent email is already registered on the platform" | Emails are unique across every school on the installation. Use a different one, or link to the existing parent |
| A family has two logins and sees one child each | The parent was entered twice instead of linked. Fix by re-linking the second child to the first parent account |
| An import sits at "processing" forever | The cron job is not running |
| "Section … is not mapped to Class …" | That section does not exist under that class. Create it, or fix the spelling |
| Admission failed with a login/username error | The auto-built login (S + admission number, or P + phone) already exists on the platform. Give an explicit student or parent email |
| A student vanished from the class list | Their status is no longer Active. Check Disabled Students |
| Last year's report shows more students than the class has | Correct — that is the register for that year, including students who have since left or moved up |