A SCORM package that launches in Moodle isn't proof it's tracking correctly. Completion status, scores, and attempt data can all be wrong even when the content opens and plays back exactly as authored in Articulate Storyline, Adobe Captivate, or iSpring. Here's what actually breaks SCORM tracking, and how to debug it properly instead of guessing.
The SCORM standard was never simple, and Moodle's SCORM module has its own settings that have to match what the authoring tool exported. When they don't line up, the package still launches — but completion, scores, and grades quietly stop reflecting what learners actually did.
Learners finish the content but the activity never marks complete, because the completion trigger Moodle is watching for doesn't match what the package reports.
The gradebook shows a score that doesn't seem to correspond to any single attempt — usually a grading method mismatch, not a tracking failure.
A manifest error or launch mode conflict stops the content from opening, sometimes only in certain browsers or only after an authoring tool update.
Most "broken SCORM" reports trace back to one of a small number of known failure points, almost all of them at the boundary between what the authoring tool exported and what Moodle's SCORM module expects.
A malformed or incomplete imsmanifest.xml — missing required elements, incorrect organization/item references, or a broken zip structure — causes Moodle to reject the package or read its structure incorrectly.
A package authored as SCORM 2004 but launched against Moodle's SCORM module expecting 1.2 (or vice versa) looks for the wrong JavaScript API object — API for 1.2, API_1484_11 for 2004 — and the handshake never completes.
Storyline or Captivate exported with the completion trigger tied to "slides viewed" instead of "quiz result" reports completion the moment a learner clicks through, regardless of whether they passed anything.
LMSInitialize (1.2) or Initialize (2004) never succeeds because the content frame can't locate the API object in a parent or opener window — often caused by a popup blocker, an iframe sandbox attribute, or the package being opened directly rather than through Moodle.
The package's own launch settings expect a new window while Moodle's SCORM "display package" setting is set to current window (or the reverse), breaking the window reference the API discovery process depends on.
Assets or API calls referenced over plain http on an https Moodle site get silently blocked by the browser, breaking playback or tracking calls with no obvious error message to the learner.
Before assuming a score is wrong, it's worth checking whether the SCORM activity's grading method is doing exactly what it's configured to do. Moodle's SCORM module supports four grading methods across multiple attempts:
Completion adds a second layer on top of grading: an activity can require view, require a passing grade, or require a specific status value (such as completed or passed) before Moodle marks it done. A package that reports cmi.core.lesson_status = incomplete will never satisfy a "require status: passed" completion rule, no matter how the grading method is set — which is why completion and gradebook issues often need to be diagnosed separately rather than assumed to share one cause.
Guessing and re-uploading rarely fixes SCORM tracking. This is the order we actually work through.
Open browser dev tools, launch the activity from inside Moodle, and watch the Console and Network tabs for Initialize/LMSInitialize, GetValue/SetValue, periodic Commit calls, and a final Terminate/LMSFinish on exit.
The SCORM activity's Reports screen shows raw tracking values per attempt, plus an interactions tab with question-level detail — often revealing exactly which data element is missing or unexpected.
Rather than patching behavior in Moodle, check the tracking, completion, and reporting settings in Storyline, Captivate, or iSpring — this is where most completion and grading mismatches originate.
Load the same package in a standalone SCORM test harness to confirm whether the issue lives in the package itself or in Moodle's activity configuration — an important distinction before deciding what to fix.
A large share of SCORM tracking issues are fixed at the export screen, not in Moodle.
Check Player > Tracking: LMS reporting version (1.2 vs 2004), the "Track using" setting (slides vs a specific quiz result), and whether "Completed" also requires a passing score.
In Quiz > Reporting, confirm the SCORM version, the completion criteria ("Mark completed if"), the passing score, and whether the exit behavior sends a final commit before closing.
In the LMS publish settings, check the reporting standard, the "report status as" option (passed/incomplete vs complete/incomplete), and the passing score threshold that drives it.
Actual root-cause diagnosis of the package and Moodle's configuration together, instead of re-uploading and hoping.
Real experience with grading methods, completion rules, and attempt-handling edge cases most tickets never surface.
Verified in Moodle's own SCORM player and in a standalone SCORM debugger, so we know exactly which side needed the fix.
Documented settings so your next SCORM export doesn't repeat the same failure.
Straight answers to what comes up most often when SCORM content doesn't track the way it should.
Launching only proves the package's files loaded and rendered — it says nothing about whether the JavaScript API handshake succeeded or whether the completion trigger set in the authoring tool matches what actually happened. Most "launches fine but won't complete" cases trace back to a completion criteria mismatch at export or a handshake failure that never gets reported to the learner.
They use different JavaScript API objects (API vs API_1484_11) and different data model elements — for example cmi.core.lesson_status in 1.2 versus cmi.completion_status and cmi.success_status as separate values in 2004. Moodle's SCORM module reads whichever version the package's manifest declares, so the package and the module have to agree on which spec is in play.
This is very often not a tracking bug at all — it's Moodle's SCORM grading method (highest attempt, average attempt, first attempt, or last attempt) doing exactly what it's configured to do across multiple attempts. If a learner scored 60% on attempt one and 90% on attempt two, and the activity is set to "average attempt," a 75% in the gradebook is correct behavior, not broken tracking.
Yes. If the package is set to launch in a new window and the browser blocks that window (or a browser extension interferes with it), the SCORM API discovery process — which walks up the window/opener chain looking for the API object — never finds it, and every LMSSetValue or SetValue call silently fails.
Open the browser's developer tools, launch the SCORM activity from within Moodle, and watch the Console and Network tabs while the content plays. You should see repeated calls to Initialize/LMSInitialize, GetValue/SetValue, and periodic Commit calls, along with a final Terminate/LMSFinish when the learner exits. Missing or erroring calls point to exactly where the handshake or data flow is breaking.
Both, because the two have to match. Sometimes the fix is entirely in Moodle's SCORM activity settings (grading method, completion rules, launch mode). Other times the package needs to be re-exported from Articulate, Captivate, or iSpring with corrected tracking settings. We diagnose which side is actually wrong before touching either.
Any tool that exports a standard SCORM 1.2 or SCORM 2004 package — Articulate Storyline and Rise, Adobe Captivate, iSpring Suite, and Lectora are the ones we see most often. The underlying debugging approach is the same regardless of which tool produced the package, since Moodle is reading the same manifest and API structure either way.
SCORM, xAPI, cmi5, and LTI integration services for content built in Articulate, Captivate, and more.
A Moodle-native alternative to SCORM authoring tools for interactive video, branching scenarios, and more.
The full overview of our Moodle development services, pricing, and process.
Custom plugins and upgrade-safe themes built around your workflow and brand.
Send us the package and a description of what's wrong, and we'll tell you exactly where it's breaking.
Get SCORM Tracking Fixed