Scheduling is the part of higher-ed IT that looks boring until you realize how much of campus life depends on the calendar being correct. A wrong room. A wrong time. An unlabelled hybrid class that half the students thought was in-person. We've worked with over 20 institutions to push schedules from their student information system (SIS/ERP) — Jenzabar, PeopleSoft, Banner, Workday Student, Omnivox, Clara, and COBA — into Microsoft Teams, Outlook, and Google Calendar. This is what we learned.
Why calendar sync is harder than it looks
A class schedule in the SIS is a compact record: section, instructor, day of week, start time, end time, room, format. Turning that into something a student's personal calendar understands is surprisingly involved. You have to:
- Expand recurring events correctly, accounting for holidays, pedagogical days, and make-up classes.
- Respect each calendar platform's idiosyncrasies — Teams, Outlook, and Google all handle recurring events differently.
- Preserve instructor customizations (colors, notes, attachments) when the schedule is resynced.
- Push only the right events to the right people — students shouldn't see the instructor's office hours calendar, and instructors shouldn't see other sections' details.
- Handle mid-term schedule changes without duplicating events or deleting attachments.
Every one of those is a place custom scripts fail. Calendo was built specifically to handle all of them reliably.
Mapping SIS → calendar, step by step
Step 1: Get the schedule feed right
Your SIS needs to expose, per class meeting:
{ section_id, instructor_ids, start_datetime, end_datetime, room, format, term_id }
The key field that trips people up is format. If your SIS stores it as a flag (in-person, online, hybrid), you can push that into the event title. If your SIS doesn't track it, now is the time to add it. Students deeply care whether they need to physically show up.
Step 2: Pick a sync target per user role
Don't push everything to everyone. Our recommended mapping:
- Students → their personal Teams/Outlook calendar, events marked as "free" so their other apps don't block them.
- Instructors → personal calendar with events marked as "busy" (so they don't get double-booked by peers).
- Staff & admins → room-resource calendars, so we can see room utilization in a central view.
Step 3: Color-code by format and department
This is the single change that earns Calendo the most unsolicited praise from instructors. When students can see at a glance which classes are in-person (purple), which are online (orange), and which are hybrid (teal), they stop showing up to the wrong place. The ROI is measured in reduced tickets to the registrar.
In one CEGEP, switching from unlabelled calendar entries to color-coded format markers reduced "which classes are actually in person?" help-desk tickets by 71% in the first semester.
Step 4: Handle holidays and make-up days
Never push a recurring event that ignores the calendar of holidays. If Monday Oct 14 is Thanksgiving in Canada, the Monday MAT-103 class should not show up. When a make-up class is scheduled for a different day, the sync needs to create a one-off event, not add it to the recurrence master.
Step 5: Preserve instructor edits on resync
This is the hardest engineering problem. The instructor added attachments to their Monday lecture. The SIS pushed a small correction to the room. A naive sync would either overwrite the attachments or create a duplicate event. The correct pattern: identify events by a stable external ID, update only the fields the SIS owns (time, room, format), and leave everything else alone.
Multi-platform gotchas (Teams / Outlook / Google)
Microsoft Teams
Teams reads from Outlook. If you push to Outlook, Teams picks it up. But Teams also has its own "channel meetings" concept — be clear whether each class event is a personal calendar event or a recurring channel meeting. Mix them up and you get duplicate reminders.
Outlook
Outlook's recurring-event model is forgiving until you try to modify a single occurrence. Always identify events with a deterministic ID that includes the occurrence date, not just the series ID.
Google Calendar
Google uses a different concept of "event ID" than Microsoft. Calendo maintains a mapping table so the same class event has a stable identity across all three platforms — and so modifications push correctly to each.
Key takeaways
- Schedule sync is about correctness under change, not just initial push. Plan for what happens when the ERP moves a class to a new room on Week 3.
- Push the right subset to each role — students, instructors, and rooms see different slices.
- Color-code by format. Students will love you.
- Respect holidays. Resync without clobbering instructor customizations. Use stable external IDs across Teams / Outlook / Google.
Want to see your schedule in Teams, Outlook, and Google Calendar?
30-minute demo with your ERP and calendar stack. We'll show Calendo synchronizing real events, color-coded, in real time.
Book a Demo



