Turn Canvas chaos into one calm Google Sheet. OhSheet watches your classes, pulls upcoming assignments, and drops them into a spreadsheet so you and your study group always know what’s due next.
- One living spreadsheet of all assignments across courses
- Auto-deduped entries (no more duplicate tasks)
- Built for teams: share the sheet, add filters, sort by due date
- Free during early access — just star the repo and follow along
If you’re comfortable running Python, you can spin up the service in a few minutes:
- Install prerequisites
uv- Python
3.13(managed via.python-version)
- Install dependencies and start the API
uv sync # create/update virtualenv
uv run python main.py # run FastAPI with reload
# or
uv run uvicorn app.main:app --reload- Point it at your accounts with a
.envfile
CANVAS_TOKEN=...
CANVAS_DOMAIN=...
SPREADSHEET_ID=...
REDIS_URL=...
GOOGLE_CREDS_JSON=...
That’s it — your assignments will start flowing into the sheet you specify.
- Star the repo to follow updates and cheer the project on.
- Open an issue if you hit a snag or have a student-life feature idea.
- Dependency management (uv):
uv add <package>
uv remove <package>- Fetch upcoming assignments from Canvas.
- Normalize payloads through an adapter layer.
- Deduplicate by
assignment_idusing Upstash Redis. - Append new rows to Google Sheets.
- Run automatically on a Railway CRON schedule.