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.

Deterministic Code
CanvasSlack BotGoogle SheetsPersonal ProductivityOperationsDaily Digests
PromptCreate

Every Monday at 8am, build me a deterministic grading backlog report so I know exactly which assignments to grade first. Run this on a cron trigger. Every step is a fixed lookup, some arithmetic on counts Canvas already returns, a sort, and two writes, so build it as a node based workflow rather than an agent.

Start in Canvas with List Courses to get my active courses. For each course, call List Assignments. For each assignment, call Get Submission Summary, which returns the counts of graded, ungraded, and not submitted submissions directly. Use those returned counts rather than walking every individual submission, since the summary makes the whole report cheap to compute.

Canvas list endpoints paginate through the RFC 5988 Link response header and default to only 10 results per page, so do not assume a single page. Follow the rel="next" URL verbatim until no next link is present, and do not construct page numbers yourself, because many Canvas endpoints use bookmarked cursors and omit rel="last". Raising per_page to 100 cuts the number of round trips. Canvas also rate limits per access token using a leaky bucket, and concurrent requests drain it fastest, so issue these calls sequentially rather than firing them all in parallel.

Skip any assignment whose ungraded count is zero. For every remaining assignment, produce a row with the course name, the assignment name, the due date, and the graded, ungraded, and not submitted counts. Sort all rows by ungraded count descending so the biggest backlog sits at the top, and compute a total ungraded figure across all courses.

Mark any assignment that still has ungraded submissions and whose due date is more than 7 days before the run date, since that work has been sitting too long. Make the marker obvious in the table, for example a warning emoji or an overdue label in its own column, and include how many days past due it is. Assignments with no due date should show a blank due date and must never be flagged as overdue.

Post the finished table to my teaching channel using Slack Bot Send a Message, leading with the total ungraded count across all courses so I get the headline before the detail. If the table is long enough to risk hitting Slack message size limits, keep the top rows in the message body and note how many additional assignments were omitted.

Then append the same rows to a tab in Google Sheets using Append Values, adding the run date to every row so we can chart grading turnaround over the term. Append rather than overwrite, since the whole value of the sheet is the week over week history.

If a course has no assignments, or every assignment in it is fully graded, leave it out of the table rather than emitting an empty section for it. If every course is completely caught up, still post a short message confirming there is nothing waiting to grade, so I know the workflow ran.

Example output

Grading backlog: 47 ungraded across 3 courses Course | Assignment | Due | Graded | Ungraded | Not submitted BIO 201 | Lab Report 3 | Mar 14 | 12 | 22 | 4 (!) 9 days overdue BIO 201 | Midterm Essay | Mar 20 | 25 | 13 | 0 CHEM 110 | Problem Set 6 | Mar 22 | 30 | 9 | 2 ENG 105 | Peer Review | Mar 21 | 18 | 3 | 1 (!) marks work sitting ungraded more than 7 days past its due date.

Additional information

What does this prompt do?
  • Checks every course you are actively teaching each Monday morning and counts how much work is still waiting to be graded
  • Builds one table sorted by the biggest backlog first, showing each assignment's due date alongside its graded, ungraded, and not submitted counts
  • Flags any assignment where work has been sitting ungraded for more than a week past its due date
  • Posts the table to your teaching channel and adds the same rows to a spreadsheet so you can track grading turnaround across the term
What do I need to use this?
  • A Canvas account at your school with access to the courses you teach
  • A Slack workspace and the channel where you want the report posted
  • A Google account and a spreadsheet with a tab set aside for the grading log
How can I customize it?
  • Change the day and time it runs, for example Friday afternoon instead of Monday morning
  • Adjust the 'sitting too long' threshold from 7 days to whatever matches the turnaround you promise students
  • Limit the report to specific courses, or keep fully graded assignments in the table instead of skipping them

FAQs

Will this work if I teach several courses at once?
Yes. It looks at every course you are actively teaching and combines them into a single table sorted so the biggest backlog is at the top, with a total count across all of your courses.
Does it change any grades in Canvas?
No. It only reads the counts of graded, ungraded, and not submitted work and reports them back to you. Nothing is graded, posted, or edited on your behalf.
What happens to assignments that are fully graded?
They are left out so the report stays short and focused on what actually needs your attention. If you would rather see everything, that is easy to change.
Why does it write to a spreadsheet as well as Slack?
Each run adds new rows instead of overwriting the old ones, so you build up a history over the term and can chart whether your grading turnaround is getting faster.
Do my students see any of this?
No. The report goes only to your Slack channel and your spreadsheet. Nothing is visible to students in Canvas.

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
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
Answer engineers' library questions in Slack from live docs

When someone asks a library or framework question in your help channel, they get a straight answer with working code and a source link, right in the thread.

Context7
Slack Bot
Linear
Agentic Task

Stop guessing what to grade first.

Get a ranked grading backlog waiting in Slack every Monday morning, before office hours start.