Import Class Schedules from OneRoster CSV
Manage1to1 can load your class schedules, who teaches what and which students are in each class, from OneRoster 1.1 CSV files. You don't need the OneRoster API connection or the PowerSchool plugin. If your district already rosters people from a nightly CSV (see Roster PowerSchool for Free), this is how you add their class schedules on top.
OneRoster is the standard that student information systems use to describe classes and enrollments, so PowerSchool, Infinite Campus, Skyward, and others can all export these files directly. Manage1to1 reads the two files that describe course rosters: classes.csv (the sections being taught) and enrollments.csv (which students and teachers are in each one).
This is for districts that roster classes from CSV. If Manage1to1 already syncs your classes from the OneRoster API, keep using that. Manage1to1 will not let a CSV class import run while API class sync is on, because the import replaces the class roster and the next API sync would overwrite it.
The two files
You upload two OneRoster 1.1 files. classes.csv is required; enrollments.csv is what actually places students and teachers into those classes, so you'll almost always want both.
classes.csv
One row per class or section. These are the OneRoster 1.1 columns Manage1to1 reads:
| Column | Required | What it is |
|---|---|---|
sourcedId | Yes | A stable unique id for the class. Manage1to1 keys on this, so keep it consistent between imports. |
title | Recommended | The class name, for example "Algebra I" or "Homeroom Grade 9". |
classCode | Optional | The section code. |
classType | Optional | scheduled or homeroom. A class also counts as a homeroom when its title contains "homeroom", which covers the many SIS exports that mark every class scheduled. |
grades | Optional | Comma-separated grade levels; the first is shown. |
location | Optional | The room, for example "Room 204". |
courseSourcedId | Optional | Links the class to a course. |
schoolSourcedId | Recommended | The school this class belongs to. See Matching your data. |
termSourcedIds | Optional | Comma-separated academic session ids; the first is used. |
status | Optional | active, or tobedeleted to drop it. |
enrollments.csv
One row per person in a class (a student or a teacher):
| Column | Required | What it is |
|---|---|---|
sourcedId | Yes | A stable unique id for this enrollment row. |
classSourcedId | Yes | The class's sourcedId from classes.csv. |
userSourcedId | Yes | The student's or teacher's id. See Matching your data. |
role | Recommended | student or teacher. |
primary | Optional | true for the class's primary teacher. |
schoolSourcedId | Optional | The school id. |
beginDate / endDate | Optional | The enrollment dates. |
status | Optional | active, or tobedeleted to drop it. |
Matching your data
Two ids connect the files to what's already in Manage1to1. Get these right and everything lands in the correct place.
schoolSourcedIdmatches your Building Code. The class'sschoolSourcedIdhas to equal the Building Code on the matching Manage1to1 building (the same SIS id your people import uses). When it matches, the class is filed under that building. A class whose school Manage1to1 hasn't onboarded still imports, it just isn't tied to a building.userSourcedIdmatches the person's Local ID. An enrollment'suserSourcedIdhas to equal the Local ID on the student or staff record (the id your student and staff imports already use, for exampleS00151orT0100). Import your people first so those records exist; an enrollment whose id isn't found is kept, but no one is placed until that person is imported on a later run.
Because it uses the same building codes and Local IDs as your student and staff imports, a class import lines up with the people you already have with no extra mapping.
Import the files
- Go to Settings > System Utilities and open the Users tab.
- Find the Class Roster (OneRoster CSV) card.
- Drop your
classes.csvonto the first upload area, and yourenrollments.csvonto the second. - On the right, click Process Class Import.
Manage1to1 reads both files and reports how many classes and enrollments it loaded. The result also lands in the Activity Log.
A class import is an authoritative replace: Manage1to1 loads everything in your files and removes classes and enrollments that are no longer in them. Upload a complete set (every current class and enrollment), not a partial file, unless you intend the missing ones to be removed. If a file is missing a required column, the import stops and tells you which column, before changing anything.
Automate it (nightly import)
Uploading by hand is the quickest way to get started, but most districts want their class roster refreshed on its own. If your student information system can drop files onto an sFTP folder each night, Manage1to1 can pick them up and import them for you.
- Have your SIS write
classes.csvandenrollments.csvto your Manage1to1 sFTP folder on a nightly schedule. These are the same two files, with the same columns, you would upload by hand. - In Manage1to1, go to Settings > System Automation.
- Find Automated Import (Class Schedules) and turn on Process Class Roster Files Automatically.
- Save.
Each night Manage1to1 reads whatever classes.csv and enrollments.csv are sitting in the folder and imports them, exactly as a manual upload would. If no files are present that night, nothing changes.
The nightly import is the same authoritative replace as a manual one: it loads everything in the files and removes classes and enrollments that are no longer in them, so have your SIS write a complete set each time.
Leave this toggle off when your classes already come from the OneRoster API. The two methods each treat their own source as the complete roster, so running both would have them undo each other. Pick one: the nightly CSV import, or the API sync.
Where the results show up
Once imported:
- Settings > Classes lists the classes for a building, with the primary teacher and student count.
- Opening a class shows its Class Roster: the teachers and the enrolled students.
- Each student's profile has a Schedule tab showing the classes they're enrolled in, and their homeroom if one of their classes is a homeroom.
These views are read-only; they reflect whatever your most recent import loaded.
Example files
classes.csv
sourcedId,status,title,grades,classCode,classType,location,courseSourcedId,schoolSourcedId,termSourcedIds
C-101,active,Algebra I,09,MAT101-1,scheduled,Room 204,CRS-MAT101,10100,T1
HR-9A,active,Homeroom Grade 9,09,HR-9A,scheduled,Room 102,,10100,T1
enrollments.csv
sourcedId,status,classSourcedId,schoolSourcedId,userSourcedId,role,primary,beginDate,endDate
E-1,active,C-101,10100,S00151,student,false,2026-08-25,2027-06-12
E-2,active,C-101,10100,T0100,teacher,true,2026-08-25,2027-06-12
E-3,active,HR-9A,10100,S00151,student,false,2026-08-25,2027-06-12
That set creates two classes at the school whose Building Code is 10100, one of them recognized as a homeroom from its title, places student S00151 in both, and sets teacher T0100 as the primary teacher of Algebra I.
Troubleshooting
The import stopped and named a missing column. Your file is missing a required OneRoster column. classes.csv needs sourcedId; enrollments.csv needs sourcedId, classSourcedId, and userSourcedId. Export the standard OneRoster 1.1 files from your SIS and try again.
Classes imported but no students appear in them. Check that you uploaded enrollments.csv as well, and that each userSourcedId matches a student or staff Local ID already in Manage1to1. Import your people first if needed, then re-run.
A class shows no building. Its schoolSourcedId doesn't match any building's Building Code. Line up the Building Code before the next import; see Switching Your Roster Source for how building ids are matched.
The import won't run. If your district syncs classes from the OneRoster API, the CSV import is blocked on purpose so it can't overwrite the synced roster. Turn off OneRoster class sync first if you want to load classes from CSV instead.