How to upload SCORM to Moodle and verify completion tracking

To upload SCORM to Moodle, add a SCORM package activity and upload the original ZIP without extracting it. The upload is the easy part. Completion tracking is verified only after a normal learner attempt produces the expected status, grade and interaction records.

These steps follow the current Moodle 5.2 SCORM documentation. Labels can move between versions or themes, but the package, attempt and report concepts remain the same.

Before the upload

Check the package outside Moodle first:

  • keep it as a .zip file;
  • confirm imsmanifest.xml is at the archive root;
  • know whether the package reports status, a numeric score or both;
  • know the pass mark and expected score scale;
  • decide whether learners receive one attempt or several;
  • prepare a learner test account.

Do not configure grading by guessing from the course title. A slide deck that reports completion needs different interpretation from a scored final quiz.

Step 1: add the SCORM activity

  1. Open the Moodle course and turn editing on.
  2. Select Add an activity or resource in the required course section.
  3. Choose SCORM package.
  4. Enter the activity name and learner instructions.
  5. In Package, drag the SCORM ZIP into the file area or use the file picker.

Do not unzip the package before upload. Moodle reads the manifest and expands the archive itself.

If the whole Moodle course consists of one SCORM package, Moodle also supports the Single activity course format. Use a normal course section when SCORM is one activity among pages, forums, assignments or other resources.

Step 2: set appearance for the real launch environment

Choose whether the package opens in the current window or a new window. The current window avoids popup blockers. A new window can provide more space for a fixed-size legacy course but introduces another browser boundary.

For responsive packages, set the stage width to 100%. Test the height rather than accepting a fixed value that clips the course. Moodle's Using SCORM guidance recommends percentage width for content that should scale.

Disable preview mode for graded compliance training unless learners have a clear reason to browse without recording progress. A test performed in Preview is not equivalent to a Normal attempt.

Step 3: match Moodle grading to the package

Moodle offers four SCORM grading methods:

Grading method Use it when
Learning objects The package reports completion or pass status for SCOs but no meaningful raw score
Highest grade The package reports cmi.core.score.raw and the best result should reach the gradebook
Average grade Several scored SCOs should be averaged
Sum grade Scores from several SCOs are designed to be added

For a single scored LMSable quiz, Highest grade is the clearest starting point. Set the maximum grade to 100 because the package reports a percentage from 0 to 100.

For a slide-only package, the SCORM status is the primary completion signal. LMSable can also place progress in the raw score field, so decide whether Moodle should expose that number as a grade or use it only for diagnostic reporting.

Step 4: configure attempts and mastery behavior

Set the allowed number of attempts and the grading rule for multiple attempts: first, last, average or highest. Moodle can offer a new attempt after a SCORM 1.2 attempt reaches completed, passed or failed, provided the activity entry page is available.

Review these compatibility settings when results look wrong:

  • Force new attempt creates a new attempt whenever the learner enters.
  • Force completed can mark SCORM 1.2 content complete even when the package handles revisit status poorly.
  • Auto commit makes Moodle store changed values periodically, so data survives when the package does not commit them itself.
  • Mastery score overrides status can change the final status when a raw score falls below the manifest threshold.

Do not enable a workaround before running the package as authored. Otherwise Moodle may hide a missing runtime call by manufacturing the expected state.

Step 5: configure Moodle activity completion

Moodle activity completion sits outside the SCORM runtime record. Configure it to reflect the course rule your learners and reports should use.

Possible conditions include viewing the activity, receiving a grade, reaching a minimum score or requiring a SCORM status such as passed or completed. Availability depends on the Moodle version and course configuration. For assessed training, "viewed" is too weak. Prefer a score or status condition that can be checked against the SCORM result.

Keep these two layers distinct:

  1. The package sends SCORM status and score.
  2. Moodle decides when its course activity checkbox becomes complete.

A correct SCORM result paired with the wrong Moodle completion rule can still block the next course activity.

Step 6: run a controlled learner attempt

Save the activity and switch to the test learner. Enter in Normal mode, not Preview, because a preview visit is not equivalent to a graded attempt.

Follow a predetermined path instead of clicking at random: interrupt one attempt to confirm that Moodle restores the saved position, then finish the package using an answer pattern whose score you calculated in advance. Run it once above and once below the pass mark, so the grading method and the mastery-score override are both exercised. The full attempt script and the evidence to record after each run are in the guide on how to test a SCORM package before publishing it.

Step 7: inspect Moodle's reports

Open the SCORM activity as a teacher and select Reports. Moodle documents four report types:

  • Basic shows learner attempts, final score and completion status.
  • Graph plots score distribution.
  • Interactions shows question-level responses where the package supplies them.
  • Objectives shows recorded objective status and scores.

Click the attempt count for the test learner to inspect tracked details. Then check the course gradebook and the learner's activity-completion state.

For an LMSable quiz, verify that the report contains the percentage, passed or failed status, and one interaction per answer. Moodle can display the learner response and correct or wrong result. The current LMSable quiz exporter does not send a separate correct-answer pattern after a wrong response, so do not expect that report to serve as an answer key. The article on how quiz scores and answers reach an LMS covers which interaction fields the package writes and why some platforms display none of them.

Troubleshoot from the first missing value

Symptom Check first
ZIP rejected during upload Manifest location, XML validity and package structure
Course opens blank Launch path, missing files, browser console and iframe size
Attempt stays incomplete Final write to cmi.core.lesson_status
Score is present but gradebook is wrong Grading method and maximum grade
Correct score becomes failed Manifest mastery score and Moodle override setting
Resume starts at page one lesson_location, suspend_data, commit and same attempt
No interaction report cmi.interactions data and whether the package sends it
Works in SCORM Cloud, fails in Moodle Moodle activity, browser and compatibility settings

Enable Moodle's SCORM API debug tracing only for a controlled test account and reproduce one attempt. The log is easier to read when it contains one known path instead of a class of unrelated launches.

Build a SCORM 1.2 package in Course Builder, upload the untouched ZIP to a staging course and verify it with the same learner script before assigning it in Moodle.

Reference documentation