canvas‑scraper GitHub

Lazy to click buttons? Same.

canvas-scraper syncs your Canvas course files to your laptop, skips the 2 GB lecture recordings, and emails you what's new. Every day at noon. While you do anything else.

python src/main.py --setup

Python 3.9+, a Canvas API token, and ten minutes. That's the whole setup.

📱 Using an iPad? Use the GitHub template — zero local setup.

A day in the life of doing nothing

12:00 pm

It runs. New slides and tutorial sheets land in folders that mirror your Canvas layout, course by course.

12:03 pm

It skips a 1.4 GB lecture recording, a textbook PDF you were never going to open, and everything you already have.

12:04 pm

The digest email arrives: what's new, what was skipped (with links), what's due.

12:05 pm onwards

Nothing. That's the feature.

📱 No computer? No problem.

Use the GitHub template — click, add 4 secrets, enable Actions. The scraper runs on GitHub's servers and pushes files to Google Drive / Dropbox. Your iPad picks them up from there.

Use the template →

The noon email

One email a day, only when something happened. New files, new announcements, upcoming deadlines.

Skipped files come with links, so on the rare day you actually want the lecture recording, it's one click. Not seventeen.

It has opinions about your storage

Grabs

  • New and updated lecture slides
  • Tutorial sheets and assignment specs
  • Anything under 50 MB that changed since yesterday
  • New courses it spots each semester (it asks first)

Skips

  • Lecture recordings watch at 2x on Canvas like everyone else
  • Textbooks 92 MB of good intentions
  • Files over 50 MB your SSD says thank you
  • Duplicates it remembers what it already took

Size limits and filters are yours to change in one YAML file. The defaults are just well-rested.

retries failed downloads, exponential backoff SQLite tracks every file fuzzy course matching ("cs" finds CS2105) cron and Task Scheduler setup included shuts down gracefully, no hung WSL