On a Monday morning, you open Canvas and see a grid filled with dozens of students across the top, a dozen or more assignments down the side, and several hundred cells overall. Most of these cells are perfectly fine, but among them are the students who have quietly stopped submitting their assignments.
The data isn’t hidden. Canvas has all of it. But a gradebook answers what did everyone get?, and the question I actually have on a Monday is who do I need to write to? Those are different questions. Getting from one to the other means scrolling, sorting, and keeping a running tally in your head per course, every week, for as many sections as you teach.
So I built EarlyARC. It’s a free, native Mac app that reads your Canvas courses and gives you the list: who needs attention, worst first, with a reason on every line.

Every flag says why
The rule I set at the start: EarlyARC never shows you a number without a reason. Not a risk score, not a colored dot, not “82% confidence.”
Each flagged student gets plain English: “3 of 15 assignments missing — 23% of the grade,” “current score 61%, below 70%,” and ” how long since they were last active in the course. You can see, in one line, whether this is someone who’s drifting or someone who had one bad week.
That’s partly so you can act on it. It’s also because you may end up explaining the flag to the student, and “the algorithm said so” is not an explanation either of you deserves.That’s partly so you can act on it. It’s also because you may end up explaining the flag to the student, and “the algorithm said so” is not an explanation either of you deserves.
Read-only, and it keeps almost nothing
EarlyARC only reads from Canvas. It cannot change a grade, post an announcement, or alter your course. There’s no path in the code that writes to Canvas at all.
Rosters live in memory while the app is running and are gone when you quit. No cache, no database, no file of student work sitting on your laptop. Your access token goes in the macOS Keychain, protected like a saved password.
This is student data. The safest place to put it is nowhere.
The part that was genuinely hard
The way out was to store the app’s opinion instead of the student’s work. EarlyARC keeps a course ID, a Canvas student ID, a date, the risk level it assigned, and how many pieces of work were missing. No name, no grade, no score, no assignment titles, no message text.
I want to be precise about what that is and isn’t, because “no name” is not the same as “anonymous.” A Canvas student ID is an identifier — under FERPA’s definition, it is personally identifiable information, just as a name would be. Anyone at your institution who can already see your course could resolve one to a student.
What the design buys is smaller and more honest than anonymity: the file holds the least that will answer the question, nothing in it is a grade or a piece of student work, and it never leaves your Mac. It’s a much thinner record than the gradebook export most of us have sitting in a Downloads folder right now. One entry per student per day, forgotten after a year, switched off or deleted from Settings in one click.
Storing grades would have been easier and would have bought nothing except a file I’d have to defend.
What it won’t do
It won’t tell you why a student stopped. That part is still your job, and it always should be. EarlyARC doesn’t predict, doesn’t reduce anyone to a percentage, and doesn’t contact anyone on your behalf. When you’re ready to reach out, it fills in your own message template and hands it to you to send.
It surfaces. You decide.

Try it out! It’s free
EarlyARC is free, runs on macOS 14 or later, and has a sample-data mode so you can see exactly how it works before you connect it to anything real.
I built it alone, with Claude Code. One instructor, no dev team, no budget.