Hacking my way through high school: the Schoology API

High school kids are smarter and more capable than you think!

After taking my first computer science course (Intro to Python) in 11th grade, I became rather obsessed with building features and tools that made people’s lives easier.

In 12th grade, I decided to continue my education in Python by enrolling in a Flask based web development course. Flask is a framework within Python that is used to build the backend of websites. It was the most eye opening and empowering experience to learn how the websites that I use everyday actually work and that I myself could create some pretty cool stuff with a relatively limited knowledge of Python.

I was particularly fascinated by the fact that so many of the applications I used (Gmail, Instagram, and even Ring!) had public APIs. API stands for application programming interface and represents the commands that all the applications that we use in our day to day lives make use of. For example, when you open up Instagram on your phone, the application sends an API call to their servers to retrieve the recent posts from all of the accounts that you follow.


Many major companies have opted to make their APIs public in hopes of increasing the production of new ideas without investing directly in development efforts. Some companies also charge developers to use their APIs, thus creating an additional revenue stream from an existing resource.

At first, I was fascinated by the fact that I could access these underlying aspects of the applications that I use everyday. My face illuminated when I was able to figure out how to programmatically ring my home doorbell from my computer upstairs. Instead of the button on the doorbell triggering an API call to initiate a charm on the ringer, I was doing it via my own device. My dog Leo was quite confused, though, when nobody was actually waiting at the door.

Despite the awesomeness that I felt with my discovery of APIs, I soon realized that there was not much innovation I could create with many of them because the user interfaces for applications like Ring and Instagram were far better than anything I could build on my own.

Then, I found out that Schoology, the learning management system that my high school (Shalhevet High School) used also had a public API. The Schoology interface was not great and lacked many features that were achievable with the API. As my capstone project for the Flask class approached, I knew I wanted to create something with the Schoology API that could improve the lives of students and teachers at Shalhevet.

Traditional Schoology student view.

With my newly acquired Flask knowledge and interest in the Schoology API, I embarked on developing a website where students could login and view all of their assignments and courses like they could on Schoology. I also came up with three additional features that would solve problems that I was experiencing.

  1. The Problem: Each of my classes in high school had a group chat on WhatsApp in which all ongoing assignments were discussed. As a result, I would have to endlessly scroll in order to find particular discussions about specific assignments.
    The Solution: Each “Assignment Page” on my version of Schoology would contain a community forum space for those in the class to converse about that specific assignment. This chatroom would only be available and visible to those enrolled in the class, just like our external WhatsApp group chats.
  2. The Problem: I was always curious how much time my peers were spending on assignments compared to me and also thought that it would be valuable for teachers to better understand how long assignments were actually taking their students to complete.
    The Solution: Users of my Schoology platform would be able to create “time commits” for each of their assignments. This would do threefold: A) improve their own understanding of how much time they were spending on assignments B) allow for analytics to be displayed on the “Assignment Page” about how long the assignment was taking others C) provide insightful information to instructors about how much time students in the class were committing to their course.
  3. The Problem: For my friends who were not in my classes, I usually wanted to know which assignments they were working on and how busy they were. I often sought their guidance and input on assignments that they were interested in and thought this could be a cool platform for cross-course collaboration with friends.
    The Solution: On my enhanced Schoology platform, I would be able to “follow” my friends in other classes and then my feed would consist of their “time commits,” allowing me to understand what they were working on. I would not have access to their course materials or personal community forums for assignments though.

Between November and February of my senior year, I developed these features with a very bare frontend user experience (the bulk of the assignment was the Flask backend/features aspect). Then, when COVID-19 hit in March, I transitioned my focus to a different project, ILostMyJobToCoronavirus.com, which I will write about in the future. My access to Schoology, and thus the Schoology API, expired after my graduation so I was unable to fully implement and popularize my project within the school.

A mid-semester demo report that I recorded of my enhanced Schoology platform.

In addition to these Schoology platform related issues, I realized another problem I faced as a student at Shalhevet. Attendance and tardiness were taken very seriously. Each class allotted a certain number of absences and tardies before a grade reduction would occur. There were times though, that teachers mistakenly marked students as tardy or absent, and these accumulated mistakes at the end of the semester were hard to contest. There was also no way for students to know whether their teachers marked them absent or tardy unless they checked their Schoology portal.

Unfortunately, at the time of development, Schoology did not offer any public API for attendance tracking. However, using a Python framework called BeautifulSoup (a web scraper tool that can download the source code of webpages) and AWS Lambda (a serverless cloud function runner), I created an attendance notifier which students could opt into. My Lambda function to query the attendance logs ran every hour (ostensibly after each class), and notified students via SMS of any newly added tardy or absent marks. This simple program helped many of my peers avoid grade reductions at the end of the semester.

An example of an SMS from my Schoology attendance notifier project.

As I reflect on these incredible high school experiences with web development and programming, I am thankful to have discovered the incredible world of APIs so early on. Much of my interest and passion for technology has stemmed from my ability to creatively engineer products for my peers in a low stakes environment in high school. While the fundamentals are definitely important, I feel as though computer science education, specifically in high school, should prioritize local product development with specific computer science skills. After all, these skills that I developed in high school are highly applicable to the real world: programmatically sending text messages, basic web development, and automation with Amazon Web Services (Lambda). High school kids are smarter and more capable than you think!




Entrepreneur, technology enthusiast, and passionate problem solver. Studying CS @ University of Michigan. Experience in software and technology consulting

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

InstallIng Microsoft SQL Server on RHEL 7.5 Part 1

These 3 Python projects for beginners are a must to learn python faster.

Push to Multiple Repos

Why OpenMetadata is taking the right approach to metadata cataloging

A code block which shows an example JSON-schema for a user.

Week 10: Halfway through

Clearing Footprints


Collaborative Project At Masai School “MonsterIndia.com Clone”.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gilad Spitzer

Gilad Spitzer

Entrepreneur, technology enthusiast, and passionate problem solver. Studying CS @ University of Michigan. Experience in software and technology consulting

More from Medium

Who Is a 10x Developer and How to Become One?

8 Command Line Tools That Every Programmer Should Be Using.

Most Promising and Finest VSCode Extensions I Use Daily.

Get Started Easier: Hands-on Tutorial in Conan (C++ Package Management)