Work your Canvas advising caseload without double-contacting
See every student you advise ranked by risk, send the message from the same screen, and log it where the whole advising team can see who already reached out.
Build me an app that academic advisors open every day to actually work their student caseload. This is deliberately not an alerting tool that tells me who is at risk. It is the case management surface where outreach gets composed, sent, logged and closed out, so a team of advisors can divide a caseload and never unknowingly contact the same student twice. It uses Canvas for student data and messaging, and one shared Google Sheet as the team's outreach log.
The main view is a ranked caseload table across every course I advise. Build it from Canvas List Courses for a User for the signed-in advisor, so each advisor sees only the courses they are enrolled in or assigned to. For each of those courses, use List Students in a Course to get the roster, List Enrollments in a Course to read each student's current score, List Missing Submissions to find past-due unsubmitted work, and Get Course-Level Student Summaries for participation counts and last activity date.
Every row shows the student name, the course or courses they appear in, their current score, how many assignments they are missing, days since their last activity, a risk band of high, medium or low, and a short plain-language reason that names the actual trigger. Reasons should read like "score 58 percent and 4 missing assignments" or "no activity in 14 days", never a generic risk label with no explanation. Default the risk banding to high when the score is under 60 percent, or three or more assignments are missing, or there has been no activity for 10 days, and make those thresholds easy to change. A student who is high risk in more than one course should appear once with the worst band and all contributing courses listed.
Two more columns matter as much as the risk data: outreach status and outcome. Outreach status shows who last contacted this student and when, including when it was a different advisor, read from the shared log. Outcome shows the current state I have set on the student, one of contacted, resolved or escalate, or blank if untouched. Sort the list by risk band first, then by longest time since anyone reached out, so the students who are slipping and being ignored float to the top.
Give me filters across the top for course, risk band, outcome, and outreach status, where outreach status can be filtered to nobody has reached out yet, contacted by me, or contacted by a teammate. The nobody-has-reached-out filter is the most important one in the app, because it is how an advisor picks up unclaimed work without stepping on a colleague.
Clicking a student opens their profile. Show their grade in each course I advise them in, the exact list of assignments they are missing with due dates and how overdue each one is, and their participation trend over time built from Get Student-in-Course Assignment Analytics so I can see whether they are fading or recovering. Below that, show the full outreach history for this student read from the shared Google Sheet with Get Values, listed newest first, showing the date, which advisor made contact, what outcome was set, and the note that was left.
From the profile I can send the student a Canvas inbox message using Create a Conversation. Open a compose box pre-filled from an editable template that already includes the student's name and their specific missing assignments, and let me edit the subject and body freely before anything sends. If a teammate has already messaged this student within the last few days, show a clear warning banner above the compose box naming the advisor and date, so I can decide whether to still send. Nothing goes out until I press send.
Every send appends a row to the shared outreach log with Google Sheets Append Values, capturing the date and time, student name and Canvas id, course, the advisor who sent it, the outcome, and a note that includes what was sent. Setting or changing a student's outcome to contacted, resolved or escalate also appends a row, so the log is a complete history of every touchpoint rather than only the messages.
Treat that shared spreadsheet as the single source of truth for outreach and outcomes. Read the whole log with Get Values when the app loads, and derive each student's current outcome and last-contacted state from their most recent row. Because every advisor reads and writes the same sheet, the history is shared across the team by default, while the caseload itself stays personal to whoever is signed in. Let me set the spreadsheet id, the tab name and the default message template in a settings screen, and if the log is empty or missing its header row, create the headers on first use.
What does this prompt do?
- Opens on a ranked list of every student across the courses you advise, with a risk band and the specific reason on each row, like three missing assignments or no login in twelve days
- Shows you at a glance who on your team has already reached out to a student and what came of it, so two advisors never unknowingly contact the same person twice
- Lets you open any student to see their grade in each course, exactly which assignments they are missing, how their participation is trending, and every past conversation your team has had with them
- Sends the message from a template you edit before it goes out, then records the student, advisor, date and note to a shared outreach log automatically
- Lets you mark each student as contacted, resolved or escalated, and filter the caseload by course, risk band and whether anyone has followed up yet
What do I need to use this?
- A Canvas login at your institution, with advisor or teacher access to the courses you support
- A Google account and one shared spreadsheet that your advising team uses as the outreach log
- Your fellow advisors given edit access to that same spreadsheet, so the history stays shared across the team
- Courses where students actually have graded work and due dates, since the risk ranking is built from scores, missing work and recent activity
How can I customize it?
- Change what puts a student in the high risk band, such as the score threshold, the number of missing assignments, or how many days of silence counts as inactive
- Rewrite the default outreach template, or keep several for different situations like a first check-in versus a final warning before withdrawal
- Adjust which columns the outreach log captures, and add your own outcome labels beyond contacted, resolved and escalated
- Decide how recently a teammate's message should block or warn you before you contact the same student again
FAQs
How is this different from a report that tells me which students are at risk?
How does it stop two advisors from contacting the same student?
Will I see students from courses that are not mine?
Can I edit the message before it sends?
Where does the student actually receive the message?
Do I need to keep maintaining a spreadsheet by hand?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.
Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.
See the projected bounce rate for any outbound send before it goes out, and keep the launch button locked until the list is clean enough to be safe.
Pick any date range and see what each device in your home actually cost to run, not just how many kilowatt-hours it used.
Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.
Stop working your caseload out of a spreadsheet nobody trusts.
Give your advising team one screen where outreach gets sent, logged and closed out, so every student gets followed up exactly once.