# 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.

- Canonical URL: https://adalocado.com/answers/track-per-user-learning-progress-in-adalo
- Verification: Documented from current sources
- Topic: Database and Relationships
- Skill level: Intermediate
- Last reviewed: 2026-09-07
- Index status: index-now

## Short answer

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.

## 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

1. **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.

2. **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.

3. **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.

4. **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.

5. **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.

6. **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.

## Why it works

- 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 | 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 |

## Common failures

### 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

- [ ] Complete one of two stories as User A and confirm User A shows one completed story while User B still shows zero.
- [ ] Open and finish the same story twice as one user and confirm the app keeps one Progress record for that User and Story.
- [ ] Attempt to view User A’s progress while signed in as User B and confirm the records are not returned.
- [ ] Progress relates to one User and one Story
- [ ] Shared Story records do not contain learner-specific completion state
- [ ] Completion updates the existing Progress record
- [ ] Counts include only the logged-in user’s completed records
- [ ] Collection Permissions restrict progress data to the related user
- [ ] Two test users keep independent results

## 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.

## Community evidence

### [How to update a single users' progress without changing entire database?](https://forum.adalo.com/t/how-to-update-a-single-users-progress-without-changing-entire-database/54907/2)

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.

## Sources

- [Adalo forum accepted solution](https://forum.adalo.com/t/how-to-update-a-single-users-progress-without-changing-entire-database/54907/2)
- [Adalo Help: Relationships](https://help.adalo.com/database/relationships)
- [Adalo Help: Adalo Join Collections](https://help.adalo.com/database/relationships/adalo-join-collections)
- [Adalo Help: Change Data](https://help.adalo.com/action-basics/creating-an-action-that-triggers-data-edit)
- [Adalo Help: Collection Permissions](https://help.adalo.com/database/collection-permissions)
- [Adalo Help: Progress Bar](https://help.adalo.com/component-basics/marketplace-components/progress-bar)

Markdown version: https://adalocado.com/answers/track-per-user-learning-progress-in-adalo.md
