Weekday early alert digest for at-risk students in Slack

Every weekday morning your advising team gets a ranked list of students slipping behind in each course, plus a tracking log that shows whether outreach worked.

Agentic Task
BlackboardSlack BotGoogle SheetsOperationsDaily DigestsNotifications & Alerts
PromptCreate

Every weekday at 7am, scan Blackboard for students who are falling behind and post an early alert digest to our advising team in Slack. Build this on a cron trigger. Blackboard does not send outgoing webhooks for gradebook activity, so the workflow does all of its own reading on each run.

Start with Blackboard Get Courses to list the courses, and use Get Terms to resolve each course's term and its start and end dates. Only evaluate courses whose term is currently running. Skip any course whose term has not started yet, and skip courses whose term has already ended. Note that the courses collection lives on the v3 API path while gradebook columns and attempts are on v2, so use the exact version segment each operation requires.

For each course in scope, call Get Course Memberships to resolve the enrolled students and the course instructor. Keep the instructor's name so I can include it in the alert, and only evaluate members whose course role is student.

For each course, call Get Grade Columns to list the gradebook columns. For each column, use Get Column Grades to read every student's score and Get Column Attempts to see which students have no submitted attempt. Treat an assignment as missing when the student has no submitted attempt and the due date has already passed. Work out each student's running score as the percentage they currently hold across graded work, and ignore columns that are not graded work.

All of these Blackboard list endpoints page with offset and limit and return a paging.nextPage link. Follow nextPage until it is absent so I see every student, not just the first page. Blackboard allows roughly 10,000 requests per day across the whole institution, so trim responses with the fields parameter where you can and keep the scan limited to courses in the current term.

Flag a student when their current score falls below a configurable threshold, defaulting to 70 percent, or when they have two or more missing assignments. Rank the flagged students by severity, weighing how far below the threshold the score sits, how many assignments are missing, and how far into the term the course is. A student sitting 20 points below the line in week 10 is more urgent than one sitting 2 points below in week 2, and the ranking should reflect that.

Before alerting, read the existing tracking log in Google Sheets with Get Values and check whether each student has already been flagged for the same course within the last seven days. If they have, stay quiet unless their situation has gotten worse, meaning their score has dropped further or they have picked up another missing assignment since that last flag. This is what keeps advisors from seeing the same names every morning and tuning the digest out.

Post one Slack message per course into our advising channel so each message is a self contained brief an advisor can act on. Name the student, the course and its instructor, the student's current score, and exactly which assignments are missing rather than just a count. List students in severity order, and add a short line of written context for each one explaining why they are on the list. Use Slack formatting, which means single asterisks for bold. If no student in a course is flagged, do not post a message for that course at all.

Append one row per flagged student to our Google Sheets tracking log with Append Values, including the date of the run, the student's name, the course, the instructor, the current score, the number of missing assignments, the names of the missing assignments, and the reason they were flagged. One row per student per run, so we can look back week over week and see whether an intervention actually moved the score.

Make the score threshold, the missing assignment count, the seven day quiet period, the advising channel, and the tracking spreadsheet easy to change in one place at the top of the workflow. Ask me which Slack channel the advising team uses and which spreadsheet to log to when the workflow is set up.

Example output

*Early alert: BIO 210 Cell Biology* (Dr. Amara Osei) *1. Marcus Bell, 52%* / 3 missing Missing: Lab Report 2, Problem Set 4, Midterm Reflection Down 11 points since last week. *2. Priya Raman, 64%* / 2 missing Missing: Problem Set 4, Lab Report 2 *3. Devon Clarke, 68%* / 1 missing Missing: Problem Set 4 Just below the 70 percent line, first flag this term.

Additional information

What does this prompt do?
  • Checks every course running this term each weekday morning and works out where each student actually stands.
  • Flags students whose score has fallen below your threshold or who have piled up missing work, ranked so the most urgent names come first.
  • Posts one message per course into your advising channel naming the student, their current score, and exactly which assignments they have not handed in.
  • Logs every flagged student to a spreadsheet with the date, so you can see week over week whether your outreach actually worked.
What do I need to use this?
  • A Blackboard Learn account with permission to view courses, enrollments, and the gradebook
  • A Slack workspace and the channel your advising team works in
  • A Google account and a spreadsheet to use as the tracking log
How can I customize it?
  • Change the score threshold (70 percent by default) or the number of missing assignments that trips an alert
  • Move the run time, or switch from every weekday to a single weekly check on Monday mornings
  • Adjust the seven day quiet period that stops the same student being reported every morning

FAQs

Which students actually get flagged?
A student is flagged when their current score in a course falls below your threshold, which defaults to 70 percent, or when they have two or more assignments with nothing submitted. Both numbers are yours to change.
Will advisors see the same student every single morning?
No. Once a student has been flagged for a course they are held back for seven days, so the digest stays readable. The exception is when things get worse: if their score drops further or they pick up another missing assignment, they resurface right away.
What happens with courses that have not started yet?
They are skipped. The workflow checks each course's term dates first and only looks at courses whose term is actually running, so you do not get alerts about empty gradebooks in the week before classes begin.
Do students get notified that they have been flagged?
No. This one is entirely internal and only posts to your advising channel and your tracking spreadsheet. Nothing is sent to students or instructors.
Why one Slack message per course instead of a single long digest?
So each message is a self contained brief an advisor can act on, reply to, or forward to the right person. It also keeps threads tidy when advisors follow up on a specific course.

Related templates

Chase past-due JobNimbus invoices with escalating emails

Every weekday, find every unpaid JobNimbus invoice, email each customer one reminder that gets firmer as it ages, and post a receivables summary to Slack.

JobNimbus
Gmail
Slack Bot
Agentic Task
Flag at-risk students in Canvas before they fall behind

Every weekday at 7am, your active courses are checked for missing work, silent logins, and slipping grades, with a ranked list sent to your advising channel.

Canvas
Google Sheets
Slack Bot
Agentic Task
Catch Jira service desk tickets before their SLA runs out

Every hour, find the tickets closest to breaching, leave a nudge on each one, and post a ranked at-risk list to your support channel.

Jira Service Management
Slack Bot
Agentic Task
Send Canvas students a kind nudge about missing work

Every weekday afternoon, each student who is behind gets a warm, personal message in their Canvas inbox listing exactly what they owe.

Canvas
Slack Bot
Agentic Task
Weekly Canvas grading backlog report in Slack and Sheets

Every Monday at 8am, see exactly which assignments have work waiting, sorted worst first, posted to Slack and logged to a spreadsheet.

Canvas
Slack Bot
Google Sheets
Deterministic Code
Revoke Bitwarden access when someone leaves in BambooHR

Every weekday morning we compare your password vault against your HR records and suspend access for anyone who has already left.

Bitwarden
BambooHR
Slack Bot
Agentic Task

Catch struggling students in week 3, not week 12.

Set this up once and your advising team starts every weekday with a ranked list of exactly who needs a call and why.