1. Use Course Categories to Represent Branches
Course categories are the most straightforward way to model branches. Create one category per branch and put that branch's courses inside it.
How to do it
- Go to Site administration → Courses → Manage courses and categories.
- Create a category for each branch (e.g., Colombo Branch, Kandy Branch).
- Add new courses to the proper category or move existing ones.
Benefits
- Clear separation of courses per branch.
- Ability to assign category managers (branch coordinators).
- Simplifies navigation and reporting.
2. Use Cohorts to Group Users by Branch
Cohorts are site- or category-wide groups of users that you can enrol as a group into courses. They are ideal for enrolling all users from a branch into multiple courses quickly.
How to do it
- Navigate to Site administration → Users → Accounts → Cohorts.
- Create a cohort for each branch (e.g., Colombo Branch).
- Add users manually or via CSV. Use a CSV column like
cohort1to assign users while bulk-uploading. - In a course, use the Cohort sync enrolment method to enrol the entire branch cohort.
CSV example
username,firstname,lastname,email,cohort1 john,John,Doe,john@example.com,Colombo Branch sara,Sara,Santos,sara@example.com,Kandy Branch
Benefits
- Fast bulk enrolment and management.
- Works well with category-based course organization.
- Can be used for auto-enrolment workflows.
3. Add a Custom User Profile Field for Branch Identification
When you only need to label or filter users by branch for reports (but not to control access), create a custom profile field.
How to do it
- Go to Site administration → Users → Accounts → User profile fields.
- Add a new Dropdown field named
Branchwith options for each branch. - Enable it for registration if you want users to select it when creating accounts.
Benefits
- Lightweight way to tag users for reports.
- Easy to export and filter in ad-hoc reports.
- No effect on enrolments unless paired with cohorts.
4. Assign Roles and Permissions by Category
Delegate branch management by assigning roles at the category level. For example, a Category Manager or a custom Branch Coordinator role can manage only the courses in their assigned branch.
How to do it
- Open Manage courses and categories, click the gear next to a category → Assign roles.
- Assign users to the Manager, Teacher, or a custom role scoped to that category.
Benefits
- Localized administration — coordinators manage their own branch.
- Limits scope of actions per manager for security.
- Scales to many branches without central bottlenecks.
5. Generate Branch-Specific Reports
With cohorts and profile fields in place, you can run reports filtered by branch. Several Moodle report plugins and built-in reports support cohort or profile-field filters.
Options
- Use built-in reports (Course completion, Activity completion) and filter by cohort.
- Install reporting plugins like Configurable Reports or use Ad-hoc database queries to build custom views filtered by the
Branchfield.
Tips
- Keep cohort names and profile field values consistent (same spelling/casing).
- Automate cohort assignment during user upload via CSV or custom scripts.
- Use category managers to run and export branch reports when needed.
Conclusion
You don’t need plugins like Iomad or Totara to run a multi‑branch setup in Moodle. With sensible use of Categories, Cohorts, Custom profile fields, and Category-level roles, Moodle can efficiently support branches, localized administration, and branch-level reporting from a single site.
If you'd like, I can also provide:
- A ready-made CSV template for bulk user import with cohort assignment.
- Example SQL or an Ad-hoc report query to filter by profile field.
- A short guide on creating a custom Branch Coordinator role with limited capabilities.

