A Google Sheets spreadsheet with the right columns gives you a clear, student-by-student view of who's keeping up, who's falling behind, and who might need a nudge. It's manual but free — and the question is: at what point does the manual work cost more than a platform that tracks automatically? For courses up to about 50 students, the answer is usually "not yet."
Quick Answer: How to Track Student Progress in Google Sheets (Free)
- Set up columns: Paste the header row below into cell A1: Student Name, Email, Enrollment Date, one column per module, assignment grades, Sessions Attended, Last Active, Overall Status, and Notes.
- Insert checkboxes: Select module completion cells and click Insert > Checkbox for 1-click status updates.
- Automate at-risk alerts: Apply Conditional Formatting (e.g.,
=AND($A2<>"", $C2<>"", COUNTIF($D2:$G2, TRUE)<2, TODAY()-MAX($C2, $L2)>14)) to highlight stalled students in red, then add a yellow rule (=AND($A2<>"", COUNTIF($D2:$G2, TRUE)<4)) below it for everyone still in progress. - Calculate cohort completion: Use
=COUNTIF(D2:D100, TRUE)/COUNTA(A2:A100)to measure lesson drop-off across your roster. - Share securely: Grant “Viewer” access to students for their own row or “Editor” access to co-instructors.
Copy-paste header row
Copy this line and paste it into cell A1 of a new sheet. The tabs split it into 14 columns (A to N).
Student Name Email Enrollment Date Module 1 Module 2 Module 3 Module 4 Assignment 1 Assignment 2 Assignment Average Sessions Attended Last Active Overall Status NotesThen add the checkboxes: select D2:G100 (the four module columns, rows 2 to 100), and choose Insert > Checkbox. Keep Sessions Attended as a plain number and Last Active as a date.
What you’ll walk away with:
- A student-by-student progress tracker with module completion checkboxes
- Conditional formatting that highlights at-risk students in red automatically
- Summary formulas showing cohort-wide completion rates and averages
- A shareable tracker that co-instructors or TAs can update in real time
Why Google Sheets works for student tracking
Three qualities make Google Sheets a practical choice for tracking student progress in a small course.
First, it's free. You don't need a paid LMS add-on or a separate analytics dashboard. A Google account is enough.
Second, it's shareable. If you co-teach with someone or have a teaching assistant, you click Share and they see the same live data. No emailing spreadsheets back and forth, no version conflicts.
Third, formulas do work that you'd otherwise do by hand. A COUNTIF formula can tell you how many students have completed Module 3 in under a second. Conditional formatting can highlight every student who's missed two or more sessions — without you scanning each row yourself.
The tradeoff is that you enter the data manually. Unlike a course platform that logs activity automatically, a spreadsheet only knows what you type into it. For a course with 15 to 50 students, that manual step is manageable. Beyond that range, you start spending more time on data entry than on teaching.
Step-by-step: Building your student progress tracker
Create the spreadsheet and set up columns
Open a new Google Sheet and paste the header row from above into cell A1, or type these headers across row 1: Student Name, Email, Enrollment Date, Module 1, Module 2, Module 3, Module 4, Assignment 1, Assignment 2, Assignment Average, Sessions Attended, Last Active, Overall Status, and Notes. Bold the header row and freeze it (View > Freeze > 1 row) so it stays visible as you scroll through student rows.
Adjust the module and assignment columns to match your course structure. If you have six modules and three graded assignments, add those columns accordingly. The principle is one column per trackable milestone.
Use checkboxes for module completion
Select the cells under your module columns, rows 2 to 100 (D2:G100 for Module 1 through Module 4, or wider if you have more modules). Go to Insert > Checkbox. Each cell now shows a clickable checkbox. When a student completes a module, you check the box.
Checkboxes are better than typing "done" or "yes" because they're faster to update, visually scannable, and they store TRUE/FALSE values that formulas can count. A quick glance down the column shows you which modules have the most unchecked boxes — and therefore where students are getting stuck.
Add grade columns for assignments
For each graded assignment, use a number column. Enter scores as percentages or points — whichever system you use. If an assignment hasn't been submitted, leave the cell blank rather than entering zero. A blank cell is different from a zero in your formulas: AVERAGE will skip blanks but include zeros, so leaving unsubmitted work blank keeps your averages accurate.
In the Assignment Average column (J), enter the formula =AVERAGE(H2:I2) (adjusting the column letters to match your sheet). This gives you each student's running average without manual calculation.
Track attendance and Last Active
If your course has live sessions, keep Sessions Attended as a plain number: how many sessions this student has attended so far. Add one after each session. A plain number (4, not “4/6”) lets formulas and conditional formatting work with it.
Use the Last Active column for the date you last saw evidence of the student doing coursework. In a self-paced course with no live sessions, it replaces attendance. This gives you a simple recency signal. Anyone whose last active date is more than two weeks old is probably disengaging.
Add conditional formatting for at-risk students
This is the step that turns a plain data table into something useful. Select your student rows, A2:N100. Go to Format > Conditional formatting and create these rules:
- Red background when fewer than half the module checkboxes are checked and the student has shown no activity for more than two weeks. Use a custom formula like
=AND($A2<>"", $C2<>"", COUNTIF($D2:$G2, TRUE) < 2, TODAY() - MAX($C2, $L2) > 14)(adjust columns and day count to fit your course). Column L is Last Active; if it’s blank, the rule counts from the enrollment date in column C instead. The$C2<>""check skips anyone without an enrollment date, who would otherwise always show red. Add this rule first, so it wins over the yellow one. Red rows are your at-risk students — the ones who enrolled but aren't keeping up. - Green background when all module checkboxes are checked:
=AND($A2<>"", COUNTIF($D2:$G2, TRUE) = 4). These students are on track or finished. - Yellow background for everyone in between, progressing but not yet complete:
=AND($A2<>"", COUNTIF($D2:$G2, TRUE) < 4). Add it last, below red and green. Google Sheets applies the first rule that matches, so a red row stays red. The$A2<>""check keeps empty rows uncolored. If you have more or fewer than four modules, change the range and the 4.
The color coding lets you open the sheet and immediately see who needs attention. You don't have to read every row. Red means reach out. Green means celebrate. Yellow means keep an eye on it.
Create summary formulas for completion rates
Add a summary section above or below your student rows. A few formulas give you a dashboard-level view of the whole course:
=COUNTIF(D2:D100, TRUE) / COUNTA(A2:A100)— percentage of students who completed Module 1=COUNTIFS(D2:D100, TRUE, E2:E100, TRUE, F2:F100, TRUE, G2:G100, TRUE) / COUNTA(A2:A100)— percentage who completed all modules=AVERAGE(J2:J100)— average assignment score across all students
These numbers update every time you check a box or enter a grade. When someone asks you "how's the course going?" you have a current answer.
Share with your co-instructor or TA
Click Share in the top right and add your collaborator. Give "Editor" access if they need to update progress data, or "Viewer" access if they only need to see the current state.
A shared tracker means your TA can check off module completions during office hours, and you see the updates immediately. It also means you can divide the follow-up work: you reach out to the red-flagged students, your TA contacts the yellow ones.
Course creator tips
Update the sheet on a fixed schedule
The most common failure mode for manual tracking is inconsistency. You update diligently for three weeks, then skip a week, and suddenly the data is unreliable. Pick a specific time — after each live session, or every Friday morning — and treat it as a non-negotiable appointment with your spreadsheet. Ten minutes of regular updates is worth more than an hour of catch-up.
Use the Notes column generously
A checkbox tells you whether a student completed a module. It doesn't tell you anything about how they engaged with it. Use the Notes column to capture qualitative observations: "asked a great question in Module 2 discussion," "mentioned struggling with the assignment format," "requested extension due to family emergency." These notes become valuable when you revise the course for the next cohort.
Export a copy before each new cohort
When a cohort finishes, duplicate the sheet (right-click the tab > Duplicate) and rename it with the cohort date. Then clear the original for your next group of students. You keep a historical record of every cohort's progress, which helps you spot patterns across runs — like a module that consistently has low completion.
Limitations of the spreadsheet approach
Manual data entry is the bottleneck
Every checkbox you tick and every grade you type is time you could spend on teaching or feedback. For a course with 15 to 30 students, the overhead is modest. At 50 students it becomes noticeable, and beyond that it becomes a burden.
On Ruzuku, students mark lessons complete as they go. Your progress table shows each student’s lessons done, modules done, and Last Active date. You can also require a discussion post, or your approval of an assignment, before a lesson counts as complete. Live-session attendance isn’t tracked, so keep that column if you run live calls. You can pilot with up to 5 students on the Free plan through a sign-up link, no credit card. Email invitations and unlimited students come with Core ($99/mo) or Pro. Try it free with up to 5 students
No automated follow-ups
A spreadsheet can't automate follow-ups. You can see that a student is at risk, but you still have to open your email and write the message yourself. Some course platforms can send automated nudges when a student falls behind — something a spreadsheet will never do on its own.
No student-facing view
Your students can't log in and see their own progress bar or completion percentage. The tracker is an instructor tool. If you want students to see where they stand, you need to communicate it to them directly or use a platform that provides a learner dashboard.
Frequently Asked Questions
How many students can I realistically track in a single Google Sheet?
A single sheet works well for up to about 50 students. Beyond that, scrolling and manual data entry become time-consuming enough to slow you down. If you have 50 to 100 students, split each cohort or module into its own tab within the same spreadsheet. Above 100, consider a course platform with built-in progress tracking so the data captures itself.
Can I use this tracker for a self-paced course or only for cohort-based courses?
You can use it for both. For cohort courses, the attendance and due-date columns are straightforward because everyone follows the same schedule. For self-paced courses, rely on the Last Active column instead of attendance and track module completions instead of session attendance. The at-risk rule still works, because it reads the Last Active column: it flags anyone who has finished fewer than half the modules and hasn't logged progress in more than two weeks.
Is there a way to have students update their own progress in the sheet?
Yes, but it introduces complications. You can share the sheet with edit access and assign each student their own row. The risk is that students accidentally edit someone else's data or delete formulas. A safer approach is to create a linked Google Form where students submit their progress, and the responses feed into your tracking sheet automatically. That keeps the spreadsheet under your control while reducing your manual entry.
Related Guides
- How to Create a Course Production Schedule Using Google Sheets — track your own content creation progress with a similar spreadsheet approach
- How to Create Course Surveys Using Google Forms — collect structured student feedback that complements your progress data
- How to Write Assessment Questions with ChatGPT — create the assignments and quizzes you'll track in your spreadsheet
- Create Your First Online Course — the full guide to building a course from scratch
From Spreadsheet to Built-In Tracking
A Google Sheet is a solid starting point, and it costs nothing. If you're teaching your first course or running a small cohort, it gives you the visibility you need to support your students without adding software complexity.
Comparison: Google Sheets vs. Built-In Course Tracking
Tracking in spreadsheets works until your course grows. Here is how manual tracking compares to an integrated learning platform:
| Workflow Feature | Google Sheets (Manual) | Ruzuku (Built In) |
|---|---|---|
| Data entry | Manual checkmark typing after each session | Students mark lessons complete as they go |
| Student view | Hidden from students unless you manage row permissions | Progress bar on each student’s course page |
| Spotting stalled students | Requires manual formula audits & conditional rules | Progress table sorts by lessons complete and shows each student’s Last Active date |
| Practical scale | Workable up to about 50 students; data entry is the limit | Up to 5 students on Free; unlimited on Core and Pro |
Track student progress without maintaining a spreadsheet.
When you outgrow the spreadsheet — when manual entry takes too long or you want students to see their own progress — Ruzuku records completion as students mark each lesson done. Add a quiz with a passing score and turn on Required for the quiz lesson, and later lessons stay locked until the student passes. You get the same at-a-glance view of who's engaged and who needs a nudge, without typing it in yourself. Start building your course on Ruzuku for free.