Every term starts with two or three weeks of add/drop. A student registers on Tuesday and still can't see the course on Thursday, so they miss the first quiz. Another drops the course but keeps receiving forum notifications. A third switches sections and finds an empty gradebook where last week's work used to be.

Each case becomes a ticket, first to the helpdesk, then to the Moodle team, sometimes to the registrar. Under pressure, teachers start enrolling students by hand, which fixes today's problem and creates a new one later in the term.

Why do students lose access during add/drop?

Moodle does exactly what the enrollment data tells it to do. The trouble lies in when that data arrives, in what order, and how removals are applied.

Symptom Likely cause
Registered in the SIS, missing in Moodle Sync runs overnight or weekly; account not created yet; identifier mismatch
Dropped, still has access Sync only adds; unenrol action set to keep users; manual enrollment left behind
Switched sections, work is gone Swap processed as unenroll then enroll; grades removed with the enrollment
Lost access without dropping An SIS status such as waitlisted or provisional mapped to "dropped"
Listed twice or in the wrong section Manual enrollment on top of the synced one; stale section course

Three root causes explain most of these:

What does it cost when enrollment lags?

Which quick fixes make it worse?

How to fix enrollment sync for add/drop

1. Shorten the delay where it matters

During add/drop, changes should reach Moodle within minutes. After the deadline, a slower schedule is fine. Let the schedule follow the academic calendar rather than a single cron setting for the whole year.

2. Create accounts before enrollments

Provision Moodle accounts from the SIS or the identity provider as soon as a student is admitted, not at their first login. A late admit with no account is the most common reason a valid enrollment never appears.

3. Match on stable identifiers

Match users on their SIS ID number and courses on their course ID number. Names and email addresses change, and a student who updates their preferred name shouldn't lose their courses.

4. Suspend, don't delete

Configure your enrolment plugin so that a student removed from the source is suspended rather than unenrolled. The external unenrol action setting decides this:

Option Access Grades and work When to use
Unenrol user from course Removed Removed from the gradebook Final cleanup only, after the drop deadline
Keep user enrolled Kept Kept When the source lists only the current term and past courses must keep their students
Disable course enrolment Blocked Kept, roles kept The safe default during the term
Disable course enrolment and remove roles Blocked Kept, roles removed When dropped students should leave grading reports

Run any final cleanup after the drop deadline, once the registrar has confirmed the lists.

5. Process section swaps as a move

Add the student to the new section first, then remove them from the old one. In a meta-course, both sections feed the same parent, so the student only changes group; see how meta-courses handle section swaps.

6. Keep one source of truth

In SIS-managed courses, reserve manual enrollment for documented exceptions, such as auditors or guests, and record who added them and why. Remove self-enrolment from those courses.

7. Reconcile every day during add/drop

Compare Moodle with the SIS once a day: students in the SIS without a Moodle enrollment, Moodle enrollments without an SIS record, and courses whose counts differ. Fix the cause, not only the individual case.

How to investigate a "student lost access" ticket

When a ticket arrives anyway, check in this order. Most cases are solved by step 3.

  1. Check the SIS. Confirm the student's current registration status, section and the time of the last change.
  2. Check the account. In Site administration > Users, find the student by ID number. Make sure the account exists, isn't suspended at user level and uses the expected authentication method.
  3. Check the enrollment. On the course's participants page, look at the enrolment method and the status: Active, Suspended or Not current. Not current usually means an enrollment start or end date is set.
  4. Read the logs. Filter the course logs by the student and look for user enrolled, user unenrolled and user enrolment updated events. The origin column shows whether the change came from the web interface, web services or a command-line task.
  5. Check visibility and restrictions. A hidden course, a future course start date or an activity restricted to one group can look like missing access.
  6. Fix it at the source. Correct the SIS record or the sync rule, then let the sync apply the change, instead of adding a manual enrollment.

How Classeo handles it

Classeo syncs enrollments from the SIS in real time or on a schedule, so a student who registers late, drops or switches sections sees the change in Moodle within minutes, not the next morning. The edge cases that break homegrown scripts, such as late adds, audit students and section swaps inside meta-courses, follow the SIS rather than manual edits.

Every enrollment change is timestamped and tagged with its actor. When a student says they lost access, the helpdesk can see which change caused it and when, without digging through server logs. The same trail answers privacy officers' questions under Law 25 and the GDPR, as our article on Moodle audit trails and end-of-term archiving explains.

For the IT team, what remains is monitoring and exception handling, usually under four hours a term. The Moodle SIS integration page lists the supported systems, Moodle administration shows what super-users still control, and the FAQ covers sync timing and data handling.

Key takeaways

  • Most add/drop problems come from timing and order, not from Moodle itself: nightly batches, missing accounts and drop-then-add section swaps.
  • Suspending an enrollment blocks access but keeps grades and work, while unenrolling removes grades, roles and group memberships.
  • Manual enrollments by teachers fix today's ticket and create tomorrow's stale access, because the sync never removes them.
  • During add/drop, sync within minutes and reconcile Moodle against the SIS every day.
  • A log showing which SIS change caused each Moodle change turns a long investigation into a quick lookup.

See an add/drop week without the tickets

A 30-minute demo of Classeo propagating late registrations, drops and section swaps from the SIS to Moodle within minutes.

Book a demo

Frequently asked questions

Why can't a student see their Moodle course after registering?

The usual reasons are timing and identity. The enrollment sync may run only overnight, the student's Moodle account may not exist yet because accounts are created separately, or the student is matched on a different identifier than the one in the SIS. Check the sync schedule, confirm the account exists with the right ID number, then look for the enrollment in the course's participants list.

What is the difference between unenrolling and suspending a student in Moodle?

A suspended enrollment keeps the student in the course but blocks their access, and their grades, submissions and group memberships stay intact. Unenrolling removes the enrollment entirely, along with role assignments and group memberships, and their grades disappear from the gradebook. During add/drop, suspending is safer, because a mistaken drop can be reversed without losing anything.

How often should Moodle sync enrollments from the SIS during add/drop?

Often enough that a student who registers in the morning can work in the course the same day. In practice that means within minutes during the add/drop weeks, rather than a nightly batch. After the deadline, changes slow down and a less frequent schedule is usually fine, as long as drops are still processed promptly and reconciled against the SIS.

How does Classeo handle late registrations and drops?

Classeo syncs enrollments from the SIS in real time or on a schedule, so adds, drops and section swaps reach Moodle within minutes. Section changes in meta-courses follow the SIS, and every enrollment change is timestamped and attributed, so the helpdesk can see what happened to a student without searching server logs. Monitoring and exceptions usually take under four hours a term.