Free. Always.

Built by an educator, for educators

Grade Python assignments
automatically.

Create assignments with 60+ test types. Distribute a single file. Students grade on their own machines. Collect results your way.

Get started in 5 minutes

# Running test suite...
def quadratic(x, a, b, c):
    result = a * x**2 + b * x + c
    return result

 Verify Function Name   PASS
 Test Function #1       PASS
 Test Function #2       PASS

Score: 100/100  3 tests passed

How It Works

From assignment creation to grade collection in four steps

1

Create

Build assignments with tests, solutions, and rubrics in the instructor application

2

Distribute

Export an encrypted .agr file and share it through your LMS or email

3

Students Grade

Students run the grader on their machine - instant feedback, unlimited attempts

4

Collect Results

Receive grades via PDF export, email notifications, Google Sheets, or your self-hosted server

Instructor application
Instructor application showing assignment editor with test configuration and batch grading
Student grader
Student grader showing test results with pass/fail indicators and score breakdown

Why PyAutoGrader?

💻

Runs on Student Machines

Students learn real skills - setting up Python, installing packages, running code locally. No cloud dependency.

🔒

Your Data, Your Control

FERPA-friendly by design. Grading runs locally. The self-hosted server keeps data on your infrastructure - not ours.

Criteria PyAutoGrader Paid autograders
Cost Pass Free forever. No per-student or per-course fees. Fail Subscription or per-student pricing.
Data location Pass Your infrastructure. Local machines and your own server. Fail Vendor's cloud. Data processing agreement required.
Works offline Pass Students grade without internet. Results queue automatically. Fail Internet required to submit.
Deployment Pass Self-hosted or fully local. No vendor lock-in. Fail Vendor-hosted only.
Test types Pass 60+ built-in. Functions, plots, code quality, performance, more. Fail Varies by platform.

Collect Results Your Way

Mix and match channels. Offline submissions are queued and sent automatically when internet returns.

📄 PDF Export

Students export a formatted PDF with scores and code, then upload to your LMS. Works completely offline - no internet needed.

🖥️ Self-Hosted Server

Students submit results to your Flask server. Full dashboard with analytics, plagiarism detection, code search, Canvas export, and roster management.

Instructors can restrict grading if not connected and submitted to server.
Instructor Notifications (Silent, Automatic)

✉️ Email

Results emailed to you automatically in the background. HTML-formatted with syntax-highlighted code and styled pass/fail results. Queued if offline.

📊 Google Sheets

Grades silently posted to your spreadsheet via webhook. Instant gradebook - no student action needed. Queued if offline.

60+ Built-In Test Types

From basic variable checks to cyclomatic complexity analysis - test what matters

Variables & Data

Values, types, lists, arrays, dicts, DataFrames, solution comparison

Functions & Classes

Existence, signatures, call detection, solution testing, methods, attributes

Control Flow

Loop detection, iteration counts, if statements, exception handling

Matplotlib Plots

13 plot tests - labels, data points, line styles, widths, markers, solution comparison

Code Quality

Naming conventions, docstrings, complexity, nesting depth, line length, imports

Performance

Timed execution, solution speed comparison, script and function benchmarks

Self-Hosted Submission Server

A full-featured Flask server you run on your own infrastructure - HTTP or HTTPS

📊 Analytics

Score distributions, submission trends, assignment difficulty, student progress, and at-risk identification

🔍 Plagiarism Detection

Pairwise code similarity with side-by-side diff view. Color-coded severity scores.

📋 Roster & Deadlines

Manage rosters, set assignment deadlines, and configure per-student overrides

📤 Export

Canvas-compatible CSV export, code search across all submissions, submission browser

Analytics Dashboard
247 Submissions
78% Avg Score
32 Students
6 Assignments
Score Distribution
Assignment Difficulty
HW 1
HW 2
HW 3
HW 4
HW 5

Flexible Student Identity

Use a roster for verified names, or let students enter their own - your choice per assignment

✍️

Free-Form Names

Students type their name. No roster needed. Simple and fast for small classes or informal use.

📋

Roster Validation

Embed a CSV roster in the assignment file, pull from Google Sheets, or fetch from your server. Students must match a valid entry.

🔄

Username with Fallback

Try roster lookup first, fall back to free-form if not found. Flexible for late adds or cross-listed sections.

Batch Grade from Your LMS

Download student Python files from your LMS, then grade them all at once through the instructor application

📥

1. Download

Collect .py files from your LMS

⚙️

2. Grade

Run batch grading in the instructor app

📊

3. Export

Get a CSV with per-test scores and percentages

Batch grading interface showing per-student test results and scores

Free. Always.

No subscriptions. No per-student fees. No premium tiers.

Built by an educator who was tired of expensive tools.

Ready to Get Started?

Download PyAutoGrader for free. Windows, macOS, and Linux.