# See where students stall in your ClickFunnels courses

> An app your course team opens to see the exact lesson where each group stops, then fix enrollments and access problems on the spot.

- Workflow type: app
- Services: ClickFunnels, Google Sheets
- Categories: Operations, Customer Support
- Published: 2026-08-16

## What it does

- Lists your courses and draws a lesson-by-lesson chart of how many students made it through each one, so the exact point where a cohort stalls is obvious at a glance
- Ranks students by how long they have gone without finishing a lesson and flags anyone inactive for 14 days as stalled, with a threshold you can change
- Opens a detail view for any student showing every lesson they finished and when, with buttons to grant access, change an enrollment, or correct a lesson that was recorded by mistake
- Grants course access in bulk from a roster spreadsheet after an off-platform sale or a payment fix, previewing every change before it is written, and exports your stalled-student list back to a sheet

## What you'll need

- A ClickFunnels login with access to your courses and student list
- A Google account for the roster spreadsheet you want to read from and export to
- A roster sheet with one student per row, including an email address for each
- Your courses already set up in ClickFunnels with lessons students can complete

## Prompt

Build me an internal app my course team opens to see where students get stuck in our ClickFunnels courses and to fix access problems on the spot. It has two tabs: a course diagnosis and repair surface, and a roster import and export surface backed by Google Sheets.

Main tab, course picker and drop-off chart. Load my courses with List Courses and show them in a picker. When a course is selected, build a lesson-by-lesson drop-off chart for it: use List Sections to get the course sections, List Lessons per section to assemble the full curriculum in order, List Enrollments to get everyone enrolled in that course, and List Lesson Completions to see which enrollments finished which lessons. Plot lessons on the x axis in curriculum order and the number of enrolled students who completed each lesson on the y axis, so the line drops as students fall away. Call out the single biggest lesson-to-lesson drop as the stall point, and show how many students never got past it. Show headline numbers next to the chart: total enrolled, how many finished at least one lesson, how many finished the whole course, and how many are currently stalled.

Main tab, student list. Below or beside the chart, list the students in the selected course ranked by days since their last completed lesson, longest idle first. Each row shows the student name and email, the last lesson they completed, the date they completed it, days since then, and how far through the course they are. Treat anyone with no completed lesson in the last 14 days as stalled and mark those rows clearly. The 14 day threshold must be adjustable from the UI, and the chosen value should persist for the user between visits along with the selected course. Students who have never completed a lesson should be counted from their enrollment date and surfaced as a separate group, since they are the ones who never started.

Pagination matters here. ClickFunnels list endpoints are cursor paginated and return at most 20 records per page, with sort_order=desc available, so the handlers need to page through enrollments and lesson completions with the cursor rather than assuming one call returns everything, and the student list needs paging or a load-more control in the UI. Enrollments are listed per course, so anything cross-course means iterating the courses one at a time.

Student detail pane. Clicking a student opens a detail pane. Use Fetch Enrollment for their enrollment record and Fetch Contact for their contact details, showing name, email and any other contact fields worth seeing. List every lesson they have completed and when, in curriculum order, with lessons they have not completed shown as outstanding so the gap is obvious. Give the pane these actions: Create Enrollment to enroll or re-enroll them in a course, Update Enrollment to change an existing enrollment, Create Lesson Completion to record a lesson they genuinely finished, and Remove Lesson Completion to strip out a completion that was recorded by mistake. Every write should confirm before it runs and refresh the pane and the chart afterward.

Handle the duplicate completion case gracefully. Create Lesson Completion returns a 409 conflict if the same enrollment completes the same lesson twice, so lessons the student has already finished should be shown as already complete and not offered for marking again, and if a conflict still comes back the app should say the lesson was already marked complete rather than surfacing a raw error.

Second tab, roster import from Google Sheets. Let the user paste a spreadsheet link or id and a tab and range, then read the roster with Get Values. Match each row to a student by email address and show a preview table of exactly what will happen before anything is written: who will be newly enrolled, who is already enrolled and will be skipped, and which rows could not be matched to a contact. Only when the user confirms should the app run Create Enrollment for the rows that need it, then show a per-row result so failures are visible. This is for granting course access in bulk after an off-platform purchase or after a payment problem gets fixed.

Second tab, export. Add a button that exports the current stalled-student list back to a sheet with Append Values, letting the user choose the spreadsheet and tab. Write one row per stalled student with name, email, course, last lesson completed, the date it was completed, and days stalled, appending so a history builds up over time. Remember the spreadsheet id, tab and range the user last used.

Keep the whole thing dense and fast to scan, since this is a working tool for a course team rather than a report. The chart should be readable at a glance, the student table should stay compact with the stalled rows visually distinct, and every action that writes to ClickFunnels should be obvious about what it is about to change. The point of the app is diagnosing the exact lesson where a cohort stalls and repairing enrollments and completions, not sending anyone email.

## How to customize

- Change the stalled cutoff from 14 days to whatever matches the pace of your course
- Point the roster tab at a different spreadsheet or tab, and pick which columns hold names and email addresses
- Choose which details get exported to the stalled-student sheet, such as cohort, course name, or the last lesson finished

## FAQ

### Does this change anything in my courses automatically?

No. Nothing is written to ClickFunnels until you click a button. Bulk access grants always show you a full preview of every change first, and you decide whether to apply it.

### What counts as a stalled student?

By default, anyone who has not finished a lesson in the last 14 days. You can raise or lower that number right in the app, so a fast four-week course and a year-long program can each use a cutoff that makes sense.

### Can I use this across more than one course?

Yes. Pick any course from the list and the chart and student rankings reload for that course, so you can compare where different cohorts stall.

### What happens if I mark a lesson complete that was already complete?

The app shows lessons a student has already finished as done, and if a duplicate does get submitted it tells you plainly that the lesson was already marked complete instead of showing a confusing error.

### Will this work if my students bought somewhere other than ClickFunnels?

Yes, that is exactly what the roster tab is for. Put your buyers in a spreadsheet, preview the matches, and grant course access to everyone at once after an off-platform sale or a payment that was fixed later.

Use this prompt in General Input: https://www.generalinput.com/prompts/see-where-students-stall-in-your-clickfunnels-courses