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.

App
CanvasGoogle SheetsOperationsData SyncFeedback Triage
PromptCreate

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?
A report ends when the list arrives. This app is where the work actually happens: you read the reason a student is flagged, write and send them a message, record what you said, and mark the case closed. The list is the starting point rather than the deliverable.
How does it stop two advisors from contacting the same student?
Every message sent from the app is written to one shared outreach log the whole team reads from. When you open a student, you see who contacted them, when, and what was said, even if it was a colleague. You can also filter the caseload down to students nobody has reached out to yet.
Will I see students from courses that are not mine?
No. The caseload is built from the courses your own Canvas account is enrolled in or assigned to, so each advisor sees only their own students. The outreach log is the one shared piece, which is what keeps the team coordinated.
Can I edit the message before it sends?
Yes. The template is a starting point that opens in an editable box with the student's own details already filled in. Nothing goes out until you have read it over and pressed send.
Where does the student actually receive the message?
It arrives in their Canvas inbox, the same place messages from their instructors show up. Depending on each student's own Canvas notification settings, they may also get an email copy.
Do I need to keep maintaining a spreadsheet by hand?
No. The spreadsheet is still the shared record, but the app writes to it for you every time you send a message or change a student's outcome. You stop copying names and dates across by hand and the log stops drifting out of date.

Related templates

Prospecting desk that builds account lists from the live web

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.

Hyperbrowser
HubSpot
Google Sheets
App
Influencer campaign roster board with AI creator briefs

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.

HypeAuditor
Google Sheets
Notion
App
Morning repricing console for Shopify with margin-safe rules

Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.

Hyperbrowser
Shopify
Google Sheets
App
Pre-flight bounce check before you launch a cold email sequence

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.

Hunter
Google Sheets
App
Per-device electricity cost explorer for your smart home

Pick any date range and see what each device in your home actually cost to run, not just how many kilowatt-hours it used.

Home Assistant
Google Sheets
App
Build a PR media list from real worldwide news coverage

Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.

GDELT
Google Sheets
Gmail
App

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.