How To: Set up Academic Schedules and Rosters Using Import Types


Veracross has a number of data importer options useful for various workflows. You may read an “Overview” here. One common (and valuable) workflow using the data importer is Setting up your academic schedules. Since, as in all of Veracross, the Academics data structure is relational – certain data needs to be present before you can add the next data type – the order of operations is important.

For Academic Scheduling configuration, that order of operations is:

  1. Departments
  2. Subjects
  3. Courses
  4. Classes
  5. (a) Class Permissions and/or (b) Class Enrollments and/or (c) Class Schedules: These three data types can be set up in any order after Classes are set up.
  6. (optional) Course Requests* This is only relevant if your school has purchased the Schedule Builder, and your Registrars plan to (or desire to) use the Single Student Scheduler to easily schedule new students, or change existing student schedules before the start of school.

Each of the steps listed above has a client self-service data importer.

This article details the proper order of operations for setting up Academics in Veracross. This article is most useful to schools that are setting up academics for your first year in Veracross. If you have already begun to implement the Veracross Schedule Builder to schedule for the following school year, this article is probably not for you.

Benefits of self-service scheduling

Doing your scheduling on your own can benefit a school by providing:

  • in-depth familiarity and insight into the Veracross academic data structures
  • Independence
  • Flexiblity to import, and re-import, schedules as needed. Control your timelines by becoming experts with the data importer and similar tools.

Department and Subject Setup

It is necessary prior to any other step that school-level specific Subjects be set up within the appropriate Department. Generally, the best approach is to have One Department per Academic Discipline at your school, and then within each department, One Subject per discipline per school level. For example, set up a Department called “English”, and then 2 Subjects: “Middle school English” and “Upper School English.” Subjects should be configured per-school level, because that impacts several kinds of school-level specific reports.

Subjects are used for Credit Check reports, so you will want to be sure to expand your subject list as necessary to represent each distinct subject area that has its own Graduation Credit requirements.

Additionally, you can import Departments and Subjects using the Veracross Importer tool. Read more about these processes in the documentation linked below:

Configuring the Courses

In order to add classes (see below), you must first have the Course configured in Axiom. “Courses” are the year-over-year reusable record that represents a specific Curriculum – e.g. “English 9” and “Calculus AB” . This may be done from the appropriate Subject detail screen: Open a Subject record, and using the input grid, you may add Courses there.

You may also add Courses using this “add record” detail. 

You should validate your Course list here. Make sure that any Course you wish to schedule is in that list. If courses are in the list which you will not be offering in the coming season or coming year, you may Archive those courses, but only if the course isn’t currently in use. (Don’t archive any courses that are currently running, wait until the last classes for that Course end and grades have been posted before you archive!)

The Course Type setting allows for a number of functional outcomes:

Note that any of the above can be graded, take attendance, and/or have Class Websites. “Course Type” mainly helps you categorize your courses in a simple way and helps define functionality such as whether this “Course” is a part of athletics, after school, homerooms, etc.

Additionally, you can import courses using our Veracross Importer tool. Read more about this process by reviewing our documentation here.

Import School Year Schedule & Roster Data

After the Courses are configured, the following may be accomplished using the data importer.

Note that each importer type is additive and that each has some strong duplicate avoidance. So for instance if Johnny Doe is already enrolled in Calc AB Section 1, and you wish to re-import that enrollment with modifications, you should delete that data from Axiom first, then import. Therefore, it’s a common workflow to download batches of data from Axiom, batch delete in Axiom, then (with modifications), re-import datasets.

Importer: 1. Classes

Classes, sometimes referred colloquially as “sections,” are a place-and-time-and-people specific instance of a Course. Whereas the Course represents the curriculum, which is repeated any number of times (e.g. “Calculus AB”,) the Class represents a place, time, and people-specific instance:

  • Specific place (i.e. a class is scheduled in a Room)
  • Specific time(s) (i.e. a class is designated to meet in a specific combination of School Year, Start/End dates, Grading Period(s), and Block/period/meeting times)
  • Specific people (i.e. a class has Teacher(s) and Students [roster] designated)

The course may be “Calculus AB,” but the Class will represent “Mrs. Johnson’s C-Block section of Calculus AB, which meets in room 235 in Semester 1, 2019”.

Read about the specific requirements of the Class Data Importer here.


  • Class Description and Class ID appear throughout Veracross including the portals. Class ID must be unique in the school year for every class. In the portals, they are concatenated into one display, “{Class Description}: {Class ID}”. Consider making the Class Description the same as its parent Course description (i.e. “Calculus AB”) and the Class ID something easier to identify as unique. For instance, it might make sense to put the teacher’s initials, or the Block Abbreviation, into the class ID so that users can know which Class this is by teacher or by block just by glancing at the ID.
  • Begin and End date for the class should be filled but will generally need to match exactly the begin and end dates of specific grading period(s) the class is scheduled for. The schedules are imported in a later step (see below) but if you know the schedules in advance, setting these dates is a good idea. If scheduling isn’t fully complete yet for your school at the time you undertake this process, you may leave Begin and End Date blank at this stage, import the classes, and then later batch update Begin and End Dates in Axiom. 

Use case: Some schools may wish to import Classes and Rosters even if Schedules are not complete yet, for specific workflows. For instance, you can publish the Course Enrollment Document if you only have Classes and Rosters but Schedules are yet to be done. You can use the eFollett integration with Rosters and Classes data in Veracross, even if schedules are not yet done.

  • Room. If a class generally meets in the same room every meeting time in the rotation, be sure to set the Room in the Class import. If, however, the class generally meets in different rooms depending on the day or depending on the Period (meeting time), you may wish to only import Room when you import Schedules (see below).

Importer: 2.a. Class Permissions

Optional. “Class Permissions” is the import type to import additional teachers. Some classes may have additional teachers, and this optional import type can be used to add those additional teachers.

Note that the class_permission record to which this information will be attached requires an internal Class ID for the Class, and a Person ID for the additional coaches. Therefore both must be set up in Veracross prior to this step.

After importing Classes, and as you have your Teachers already in the database, you can query in Veracross for the unique integer “ID” value for both Classes and People in order to properly populate the Class permissions import.

Importer: 2.b. Class Enrollments

Class Enrollments, sometimes called “rosters,” are effectively a “relationship” record between a Class and a Student.

In the import, you should expect to have one row per student, per class that student is in. So depending on your school’s scheduling, it’s quite normal to have between 5 and 10 rows per student, perhaps more if you’re managing activities (Other Programs) in Veracross.

Read about the specific requirements of the Class Enrollments importer here.

Once Classes are imported, and your students are in Veracross, use Axiom to query for the unique integer ID values for Classes and for Students to construct the import file.

Depending on your school’s size and management of enrollment Levels, you can also import this value with this import type. But this is optional and not used in many cases.

Importer: 2.c. Class Schedules

Class Schedules impact both how the class is scheduled (when and where it meets) plus also they impact when and how the class is graded (by connecting the class to grading periods.)

In the import, you should expect to have one unique row per class per day per block per unique grading period. If the class meets all year in a block that has 4 meeting times per rotation, you should expect to have 4 rows in the import for that class. If a class meets for 2 grading periods but not all year, you should expect to have 8 rows.

NOTE: Before running this import, Classes in the database must have the fields Grading Period Group and the Block Group configured. And, class schedule imports must have correct Grading Periods, Blocks, and Rotation Day designations to match those values. If the import contains grading period, block, and/or day designations that do NOT match up with the class grading period group or block group, you will see errors in the import. In that context, this import type is “error prone” if you are not very cautious to configure the right relationship between Day, Block and Grading Period.

Read more about the specific requirements of the Class Schedules importer here.

Alternative Approach for Class Scheduling: Auto Schedule Block. Depending on your school’s scheduling regime, many classes may be simple “Block Scheduling” Classes that meet all year. The “Auto Schedule Block” feature is an alternative to the “Class Schedule Importer” that may be highly effective.

And, in fact, you may find that a combination of both approaches is effective:

  1. You might use “Auto-Schedule Block” as a first pass for your true all-year block-scheduled classes
  2. After that’s done, you might download to csv the class schedules that have been generated, and then you might modify schedules or add additional schedule records that don’t follow the individual blocks exactly;
  3. And finally use the importer to upload the adjusted comprehensive schedules.

Alternative Approach for Class Scheduling: Using Axiom. Depending on your school’s scheduling regime, it may make sense to use Axiom as a final check, or as an editor to make adjustments that are not easy to make otherwise.

When scheduling, remember:

  • Grading Period: should match the class’s Grading Period Group. If the class meets in the same block/periods all year, use “ALL” (id 50). If the class meets one or two grading periods but not all year, use each individual grading period. Impacts when the class is graded and is an analogue to the start/end dates specified on the class (see above). For ungraded classes, this value must still be specified if the class is scheduled by block or by day.

If a class is not scheduled by block OR by day (but simply has start and end dates), and (if its graded) only has Final Grades, then it is not necessary to set up schedules at all. Simply configure the class start and end dates, and configure the class “grading method” field appropriately. Every class that is graded gets a “Final Grade” record for its students automatically even if its unscheduled. If the class has term grades, however, it’s necessary to put in class schedules to enable those term grades.

  • Day: If classes are scheduled using blocks/periods, be sure to put one row per Rotation Day that the class (block) meets. You may use a subset of those block days.

e.g. a Block might be configured to meet 5 times in the rotation, but the specific class might only meet 3 of those meeting times; you can therefore import 3 rows for those 3 meeting times.

  • Block/Period: Not all classes are scheduled using blocks/periods. Typically Preschool or Lower school classes do not use blocks/periods. But for those that do, the import requires one row per meeting time per rotation. Designate the Block ID in the import. Make sure there’s a match both with the Class Block Group, and the Day designated in the prior field.
  • Start/End Meeting Time: Consider these values as an “Override” to the block’s configured meeting times. It is typical to fill in these meeting times for Preschools and Lower schools; it’s more of an “exception” to fill these in for Middle and Upper School classes if Blocks are being used.
  • Room: Consider this an override to the Room designated on the Class (see above.) This can be used to specify the room for the particular meeting time, if the class happens to meet in different rooms on different days.

Importer 3 (optional): Course Requests

Prior to setting up Course Requests, there are two prequisites:

  • Once you’ve done the above – specifically, once you have Classes and Class Enrollments – it’s easy to populate a course requests data import file using that data.
  • If your school has imported the Schedule Builder, the Single Student Scheduler is valuable for Registrars managing student schedules.

Once you meet both of the above prerequisites, then it makes sense to do the relatively simple process of importing course requests.

Building a “find class enrollments” query can make it easy to download the necessary data – VC Student ID, and Internal Course ID – to csv, and then filling the import templates for course requests can be easy to do. Course Requests effectively require one row per Student per Course, which is a very close analogue to the enrollments you have already set up in a prior step above.

Read more about the specific requirements of the Course Requests Importer type here. 

A few things to consider:

  • Make sure the Request Group (integer) value is unique for every request unless of course you have alternates. Excel has simple auto-fill features to do this easily.
  • Make sure the School Year is specified as the upcoming school year’s integer value. For instance, providing the value “2019” in your import will add a “19-20” course request.

Strategies for Success when Scheduling

The most successful schools are fluent users of the Schedule Builder (typically implemented for year 2+ of a school’s Veracross usage), Single Student Scheduler, Add/Drop Enrollment manager, Batch Insert of Class Enrollments, Auto-Schedule Block, Importers (as noted in this article) and Axiom (for Lower School scheduling, class configuration changes, and other exceptions). Each of these tools can work together as a part of a very effective and flexible scheduling regime at your school.