How to collect feedback on an online course
Collect online course feedback by putting a report button on each lesson and sending the course id and lesson id as metadata. Students who stop watching rarely write in on their own, so send them a short, personal message with a link to the hosted form and ask one open question about where they stopped.
By Rafael Thayto 路 Published 路 Last updated
Why course feedback should start at the lesson
A student who is stuck on lesson seven does not write a message to the course owner. They close the tab, watch a different course, or quietly stop. The most useful feedback arrives at the moment of confusion, so the entry point belongs on the lesson itself, with the lesson's id attached. A general survey at the end of the course arrives too late and from the students who finished, which is the group you already understand.
The widget can sit on every lesson page without a floating button. A report button with data-escuta-open opens the form, and the page sets the lesson details as metadata. The widget reference lists the options, and the REST API reference covers the same data sent from your own server.
Add a report button to each lesson
Load the widget once in the lesson template, and hide its floating button, because a lesson page already has its own controls. Then add a button that opens the form preselected as a bug:
<script src="https://escutaproduto.com/widget.js" data-key="pk_your_product_key" data-trigger="none" defer></script>
<button type="button" data-escuta-open="bug">Report a problem with this lesson</button>
Next, set the course and lesson details once the page is ready. The metadata travels with every report sent from that page:
window.addEventListener("load", () => {
window.EscutaProduto.setMetadata({
courseId: "intro-to-sql",
lessonId: "lesson-07-joins",
lessonPosition: 7,
});
});
The lesson template fills these values from the course data, so every lesson page gets its own ids without hand editing. Use stable ids, such as a slug, rather than titles. Titles change when a lesson is rewritten, and an id that changes breaks the link between old reports and the lesson they describe.
If your course platform does not let you add custom code to lesson pages, send the report from your own server with the REST API instead. Use POST https://escutaproduto.com/api/v1/feedback with the lesson id in metadata. Note that all requests from one server share the limit of 10 per minute per IP address and product, so a busy course should queue them.
Which ids belong in course metadata?
Metadata turns a vague complaint into a lesson you can fix. Send identifiers, not content:
| Key | Example | Why it helps |
|---|---|---|
| courseId | intro-to-sql | Separates reports from different courses |
| lessonId | lesson-07-joins | Points at the exact lesson |
| lessonPosition | 7 | Shows how far the student got in order |
| completedLessons | 6 | Shows whether the student reached this point |
The values stay small, so they sit well inside the 4 KB metadata limit. For example, a report with a course id, a lesson id and a position takes a few dozen bytes. Do not attach the student's quiz answers or the video transcript. Those belong in your own platform, and an engineer can open them from the lesson id.
How do you hear from students who stop watching?
Students who stop rarely report it. They are not angry, they are busy or stuck, and a form in the middle of the course can feel like a demand. A personal message works better. Find the students who have not opened a lesson for a while, then send them a short note from your own email with a link to the hosted form.
Escuta Produto does not send emails to customers, so the note goes out from your email tool, as it always does. The link can prefill the student's address, which saves them one step:
- Build the link with the product slug and
lang=en. - Add the student's address as the
emailparameter, usingencodeURIComponentin your code so the address survives the trip. - Send the message from your own address, not a no-reply sender.
Keep the address out of public pages and shared links. A prefilled address is private to the student, so only put it in a message sent to that student.
What should the drop-off question ask?
Use one open question, and make it easy to answer in a sentence. Something like "Where did you stop, and what got in the way?" works well. The hosted form has a message field and no survey builder, which suits this. A long list of checkboxes is a survey, and it asks students to do work they did not sign up for.
If you want to learn the common reasons, read the answers yourself, then sort them into a few themes in a spreadsheet. The CSV export opens in Excel and Google Sheets, so you can tag the rows there. The inbox itself has no tags, so the spreadsheet is where the themes live.
How do you triage lesson feedback?
Lesson feedback comes in three shapes, and each one has a different owner. A broken video, a missing file or a link that goes nowhere is a bug, and it should be fixed this week. A lesson that is hard to follow is content feedback, and it may need a rewrite or an extra example. A student who asks for a topic you have not covered is an idea, and it can wait for the next version.
Use the inbox statuses to show progress. Move a fixed bug to done, and reply to the student from your own email. Students who see their report acted on are more likely to write again. The triage guide covers a routine that fits a small teaching team.
Getting the course running in Escuta Produto
Create a product for the course, copy its public key and add the widget to the lesson template. Open a test lesson, send a report and check that the course id and lesson id appear in the inbox. Then connect the Slack or Discord webhook, so new reports reach the course team. Prepare the drop-off message and the prefilled link, but send it to one test address first.
For help deciding where the course should ask for feedback, read how to collect customer feedback. If your course lives inside a larger product, the SaaS article describes placing entry points inside a logged-in app, and the newsletter article covers reaching students and members through email.
Frequently asked questions
How do I collect feedback on a single lesson?
Add a report button to the lesson template that opens the widget, and set the course id and lesson id with setMetadata when the page loads. Each report then carries the exact lesson it came from.
Why do students stop watching a course without saying why?
Most students who stop are busy or stuck, and a general survey does not reach them at the right moment. A short personal message with a link to a one-question hosted form gives them an easy way to explain.
Should I send the students' quiz answers with the feedback?
No. Send identifiers such as the course id, lesson id and position. Quiz answers and personal progress details belong in your course platform, where an engineer can open them from the lesson id.
Related
- How to collect feedback in a SaaS productCollect in-app feedback from SaaS customers: load the widget once, identify users after login, add plan metadata and place entry points where work happens.
- How to collect feedback in a mobile appCollect feedback from iOS, Android or React Native with one REST API request, app version metadata and a hosted form link in your store listing.
- How to collect feedback for a Chrome extensionCollect Chrome extension feedback with a REST API call from the popup, a hosted form as the uninstall URL and the extension version on every report.
- How to collect feedback for a WordPress pluginCollect feedback for a WordPress plugin with a settings page link to a hosted form, server-side API posts with site details, and no remote script in wp-admin.