How do you track each user’s learning progress in Adalo?
Create one Progress record per user and story, then count completed records for the logged-in user without changing the shared Story record.
Create a Progress collection with one record per User and Story, then mark that record complete when the user finishes. Filter Progress by Logged-in User for lists and counts, and protect the collection with user-based Collection Permissions.
Keep the learning content shared and store each learner’s state in a separate Progress record. Relating that record to one User and one Story makes the completion state, timestamps, permissions, and progress calculation explicit.
The intended outcome
Each learner has independent story completion records and a progress value that does not change the shared Story catalog for other users.
Requirements
- Users and Stories collections
- A Progress collection related to one User and one Story
- A logged-in test user and at least two sample stories
Step by step
- 01
Create the Progress collection
Add a Progress collection with relationships to one User and one Story. Add Started At, Completed, and Completed At properties when the app needs those states.
- 02
Keep one record per learner and story
When a learner starts a story, create a Progress record related to Logged-in User and Current Story only when that pair has no existing Progress record. Reuse that record on later visits.
- 03
Mark the current record complete
On the finish action, update the current learner’s Progress record so Completed is true and Completed At contains the completion time. Do not update the shared Story record.
- 04
Filter every progress view by user
Show Progress records where User equals Logged-in User. Add a Story filter when a screen needs the state of one specific story.
- 05
Calculate the progress bar
Set Progress Value to the logged-in user’s Progress count filtered where Completed is true. Set Maximum Value to the number of stories included in the course or series.
- 06
Protect the records
Configure Progress Collection Permissions so only the related logged-in user can view or change a record. Keep the list filter as a display rule and the permission as the data-access rule.
The underlying logic
Stories are shared content, while Progress is user-specific state. Separating them prevents one learner’s completion action from changing the Story for everyone.
A Progress record is a join record between one User and one Story, so it can also hold timestamps, notes, or other properties about that learner’s activity.
The completed Progress count supplies the progress value, while the relevant Story count supplies the maximum value.
Data model
| Collection | Important properties | Relationships |
|---|---|---|
| Users | Standard user properties | Has many Progress records |
| Stories | Title, content, order, and series relationship | Has many Progress records |
| Progress | Started At, Completed, Completed At, and optional notes | Belongs to one User and one Story |
What still needs checking?
- The forum reply linked an older example video, but this Answer relies on current Adalo documentation and does not require that video.
Common failure modes
Completing one story changes it for every user
Move Completed and completion timestamps off the Story collection and onto the Progress record related to the current user and story.
The progress count is too high
Check for duplicate Progress records for the same User and Story, then make the start or finish action reuse the existing record instead of creating another one.
A learner can see another learner’s progress
Filter the component by Logged-in User and configure Collection Permissions through the Progress-to-User relationship.
Testing checklist
0 of 9 checked on this device
Current limitations
- The forum source confirms the data-model pattern but does not document one universal screen layout or action sequence for every learning app.
- A direct many-to-many User-to-Story relationship can represent a simple completed state, but a Progress collection is required when the relationship needs timestamps, notes, or other properties.
- The app must prevent repeated actions from creating duplicate Progress records for the same User and Story.
What the Adalo community is reporting
These are concise editorial summaries of public forum posts—not endorsements or independently reproduced results.
How to update a single users' progress without changing entire database?
The accepted answer recommends a separate record related to one user and one story, with optional timestamps and notes, so progress remains specific to each learner.
Boundary: The reply also offers a direct many-to-many relationship for a binary completed state, but it does not describe duplicate prevention or Collection Permissions.
katu (question) and Victor (accepted answer) · March 2025Sources and status
This page was last reviewed on Sep 7, 2026. Its current status is Documented from current sources.
Verification owner: Adalocado daily AI publisher. Next review: Nov 7, 2026.
Changelog
Automatically posted from a solved Adalo forum topic; corrections are monitored on the live site.
Report this answer.
Automated Answers still pass evidence and publication checks, but they can be wrong, outdated, unclear, or missing an important boundary. Send the exact correction and the editor will check the live page.
Report a problemDid this solve your problem?
Never deal with an Adalo problem again.
Rehost becomes the monthly team behind your app. Fixes, releases, integrations, and ongoing changes have an owner.
See monthly managementBring us the messy version.
Describe what you expected, what happened instead, and what you already tried.
Ask Adalocado 💬

