SCORM course not marking complete? 9 causes and how to fix each
Stuck on incomplete, passed instead of completed, or tracking in one LMS but not the next? Match your symptom to one of nine causes, then run our 15-minute package test.
A SCORM course usually fails to mark complete for one of three reasons. The completion rule set in the authoring tool is never met, the status never reaches the LMS (closed tab, blocked pop-up, dispatch package, expired session), or the LMS reads a different field than the course writes. Launch the same zip in SCORM Cloud first. If it completes there, look at the LMS.
In LMS Advisor, SCORM 1.2, SCORM 2004, xAPI and cmi5 packages run as lessons inside a course, and course analytics plus the stuck-mid-course email rule show which learners opened a package but never finished. That pattern is often the first sign of one of the causes below.
Search for SCORM not tracking completion and you get a dozen vendor help centers, each covering only its own product. Below are the nine causes we hit most when fixing and migrating LMS platforms, with the fix for each and a diagnosis table to keep open while you test. The format isn't going anywhere: Rustici's data shows that 92% of SCORM Cloud course launches in 2025 were SCORM courses, with SCORM 1.2 the largest share.
Which symptom do you have?
Before touching any settings, write down exactly what the learner record shows.
- "Not attempted" or no data at all, though the learner opened the course. The course never found the SCORM API, or the package wasn't published for an LMS. Causes 3 and 5.
- "Incomplete" forever, while resume works. The course talks to the LMS but never sends a finished status. Causes 1, 2 and 4.
- Completes for some learners, not others. Think browser, pop-up blocker, session length or how people close the window. Causes 4, 6 and 7.
- Completes in SCORM Cloud, but not in your LMS. The LMS reads the status, version or structure differently. Causes 8 and 9.
- Shows "passed" or "failed" instead of "completed". A reporting status setting, cause 2.
Causes 1 to 3: what did the authoring tool tell the course to do?
Most completion problems are decided at publish time, often by someone who left months ago.
1. The completion rule can never be met
Every authoring tool asks when a learner counts as done. Storyline 360, for example, can track by number of slides viewed, by quiz result or by a completion trigger, and its publishing guide for LMS distribution notes that whichever option the learner meets first is the one reported. TalentLMS's help article on SCORM content that won't complete puts it plainly: many courses only mark completion when a particular action happens, such as clicking an Exit button, submitting the final quiz or visiting the last slide. If that event never fires, the unit stays incomplete.
What we see in practice:
- "Slides viewed" set to the total slide count, in a course with branching. A learner who takes one branch can never view every slide.
- A completion trigger set to fire when the last slide's timeline ends, where learners click Next or close the window before it gets there. Or a trigger on a slide that a later edit made optional.
- Quiz-based tracking where the course ends before the results slide, so the quiz is never submitted.
Fix: walk the shortest legitimate route through the course yourself. If you can finish without meeting the rule, lower the slide count, move the trigger to a slide everyone sees, or track by quiz result.
2. The course reports a status your LMS doesn't count as complete
For SCORM output, Storyline lets you choose the LMS reporting wording: Passed/Incomplete, Passed/Failed, Completed/Incomplete or Completed/Failed. Articulate's guide to troubleshooting LMS issues lists "change the reporting status" as the first thing to try when a course doesn't track.
With Passed/Incomplete, a learner who fails the quiz stays "incomplete" no matter how many times they reach the end. SCORM 1.2 also has a single cmi.core.lesson_status field whose values are passed, completed, failed, incomplete, browsed and not attempted, according to the SCORM run-time reference. If your compliance report only counts "completed" and the course sends "passed", the learner looks unfinished.
Fix: decide what the report needs to say, then pick the matching option. For a course with no quiz, Completed/Incomplete is the least surprising. For a graded course, check whether your LMS treats "passed" as complete before you republish.
3. The package was published for the web, or the launch file is wrong
A web publish plays perfectly inside an LMS and never tracks, because it has no code that looks for the SCORM API. The same happens when someone zips the parent folder, so the manifest isn't at the root, or points the LMS at the wrong launch file. Articulate's troubleshooting guide covers both: point the LMS at the correct launch file, and keep the course files at the root of the zip rather than inside a parent folder.
Fix: unzip the package and confirm imsmanifest.xml sits at the top level. If it's missing, republish with the LMS output option and choose SCORM 1.2 or SCORM 2004 explicitly.
Causes 4 to 6: is the course actually reaching the LMS?
A SCORM course runs in the learner's browser and calls a JavaScript API the LMS provides. Status only counts once the course has set it and the LMS has saved it. Anything that interrupts that conversation looks like a completion problem.
4. Results are only sent when the window closes
TalentLMS notes that some packages post results only when the pop-up closes. If learners don't close the window, data isn't sent. Storyline's help page on when a course communicates completion adds a related rule: because of SCORM 2004 requirements, learners must fully exit the course for completion to show in LMS reports.
The opposite problem is just as common. Learners close the browser tab abruptly, and the final save is lost. Articulate's troubleshooting guide flags Chrome and Chromium-based Edge specifically, because those browsers dropped support for synchronous XHR, the older way many courses and LMSs saved data. If the problem shows up only in those browsers, ask your LMS administrator whether the LMS needs an update.
Fix: add a clear Exit button on the last slide and tell learners to use it. Then republish from the latest version of the authoring tool, which Articulate also recommends.
5. The course can't find the SCORM API
The course searches its parent windows for the LMS's API object. If that search fails, the course plays with no tracking at all. Typical triggers are a pop-up blocker, a player set to launch in its own new window, or content served from a different domain than the LMS. Articulate suggests turning off "Launch player in new window" when a course doesn't play as expected. Rise 360 has an "Only Load in LMS" setting, and its export guide warns that quiz and completion tracking aren't supported in additional windows.
Fix: launch the course the way the LMS expects (usually in the LMS frame or an LMS-opened window), allow pop-ups for the LMS domain, and keep content on the same domain as the LMS unless your LMS documents a cross-domain setup.
6. A dispatch package or an expired session drops the data
Dispatch packages don't hold the course. They load it from a remote server, and TalentLMS lists them as a third cause: any network or configuration problem in between can stop completion data getting through.
A cousin of this problem is a long course and a short LMS login. If the LMS session expires while someone spends an hour in a course, the final save can be refused without the learner noticing. We see it most with compliance modules finished after a lunch break.
Fix: use a direct upload instead of a dispatch package where your license allows it. For long courses, check your LMS session timeout and consider splitting the course into shorter modules.
Causes 7 to 9: what about LMS settings and package structure?
7. SCORM 1.2 resume data overflows
cmi.suspend_data is where the course stores its bookmark and variables. The SCORM run-time reference gives its size as 4,096 characters in SCORM 1.2, 4,000 in SCORM 2004 2nd and 3rd editions, and 64,000 in SCORM 2004 4th edition. Those are the minimums an LMS must store, so some LMSs accept more, but you can't count on it. Long courses with many slides and variables can pass the smaller limits. Some LMSs then truncate the data, others reject the save, and the learner loses their place or the status stops updating. Articulate's troubleshooting guide lists the lower suspend data limit in SCORM 1.2 as a known cause of courses that don't track or resume.
Fix: republish as SCORM 2004 4th edition if your LMS supports it (3rd edition doesn't raise the limit in the spec), or split the course. Our SCORM vs xAPI vs cmi5 comparison covers the version trade-offs in more detail.
8. SCORM 2004 splits completion and success, and the LMS reads the other one
SCORM 2004 has two fields. cmi.completion_status says whether the learner finished (completed, incomplete, not attempted, unknown). cmi.success_status says whether they passed (passed, failed, unknown). A course can set success to "passed" and leave completion at "unknown". An LMS rule that only reads completion will show that learner as unfinished.
Two manifest settings can also override what the course reports. Rustici's explainer on SCORM 2004 completion quotes the specification: if a completion threshold is defined and the course reports a progress measure, the LMS must override cmi.completion_status. So a course that reports a progress measure of 0.8 against a threshold of 1.0 stays incomplete, whatever status it sets.
Fix: in SCORM Cloud, look at both status fields in the debug log after a full run. If the course sets only one, change the reporting option so it sets both, or configure the LMS to accept either.
9. The package has several SCOs and depends on sequencing
A multi-SCO package has more than one launchable unit in its manifest, often with SCORM 2004 sequencing rules that decide order and how completion rolls up to the course. LMS support for sequencing has always been uneven. If the LMS launches only the first SCO, or can't roll up the others, the learner may finish everything they can reach and still show incomplete.
Honest note: LMS Advisor falls into this group. It plays SCORM 1.2 and SCORM 2004 packages, but multi-SCO sequencing packages launch only their entry resource. If your catalog has multi-SCO courses, test them before you migrate, and consider republishing each SCO as its own package. The LMS migration checklist explains where package retesting belongs in the move.
Fix: open imsmanifest.xml and count the <item> elements that reference a resource. More than one means a multi-SCO package. Check your LMS's documentation for sequencing support, or republish as single-SCO packages.
A diagnosis table for SCORM not tracking completion
| Symptom | Likely cause | First fix to try |
|---|---|---|
| No data at all, not even a bookmark | Web publish, wrong launch file, API not found (3, 5) | Check for imsmanifest.xml at the zip root, launch inside the LMS window, allow pop-ups |
| Resume works, status stays incomplete | Completion rule never met (1) | Walk the shortest path through the course and adjust slide count or trigger |
| Failed learners stay incomplete | Passed/Incomplete reporting (2) | Switch to Passed/Failed or Completed/Failed |
| Shows passed, report wants completed | SCORM 1.2 single status field, LMS rule (2) | Change reporting option or LMS completion rule |
| Completes only if the learner clicks Exit | Status sent on close only (4) | Add an Exit button, republish with the latest authoring version |
| Some learners lose completion, others don't | Tab closed abruptly, browser, session timeout (4, 6) | Test in Chrome and Edge, check LMS session length |
| Dispatch course never completes | Remote server connection (6) | Upload the full package directly |
| Long course forgets place, then stops tracking | SCORM 1.2 suspend_data limit (7) | Republish as SCORM 2004 4th edition or split the course |
| Completes in SCORM Cloud, not in your LMS | Completion vs success, threshold, LMS rule (8) | Compare both status fields in the debug log |
| Only the first module ever tracks | Multi-SCO sequencing (9) | Check the manifest, republish as single SCOs |
How do you test a SCORM package before you upload it?
SCORM Cloud is Rustici's hosted test player. As of September 2026, Rustici's free SCORM testing page says you can import SCORM 1.2, SCORM 2004, AICC, xAPI or cmi5 content, check problems in the debug logs, and test as much content as you want for free, within the free account's storage limit. If a package fails there, fix the publish settings before you blame any LMS.
Our 15-minute routine for every new template or suspect course:
- Unzip and look (2 minutes). Confirm
imsmanifest.xmlis at the root, note the SCORM version, and count SCOs. - Upload to SCORM Cloud and launch (3 minutes). Take the shortest legitimate route to the end.
- Read the debug log (3 minutes). Look for the call that sets status to completed or passed, followed by a commit. TalentLMS suggests the same check in the browser console: an
LMSSetValuecall with "completed" or "passed", thenLMSCommit. In SCORM 2004 the calls areSetValueandCommit, and you want to see bothcmi.completion_statusandcmi.success_status. - Exit badly (3 minutes). Relaunch, go halfway, close the tab instead of using Exit. Relaunch again. Does it resume, and is the status still right?
- Fail on purpose (2 minutes). If there's a quiz, fail it, then pass it. Check what status each attempt reports.
- Repeat in your LMS (2 minutes). Upload the same zip and compare the learner record with the SCORM Cloud result.
If SCORM Cloud and your LMS disagree, you're down to causes 5, 6, 8 or 9. If both fail, go back to the authoring settings. Our LMS implementation timeline leaves room for content testing before the pilot for exactly this reason.
How to run SCORM courses in LMS Advisor
Test the package in SCORM Cloud first, then upload the same zip to LMS Advisor as a lesson. Here's how the checks above map to what the platform gives you:
- Versions and formats. SCORM 1.2 and SCORM 2004 packages run as course lessons, next to xAPI and cmi5 content. A built-in LRS stores xAPI statements and state while packages run. It isn't a reporting LRS, but statements can be forwarded to an external one.
- Multi-SCO packages (cause 9). Sequencing packages launch their entry resource only, so republish multi-SCO courses as single-SCO packages before upload.
- Catching stuck learners. Course and learner analytics show who opened a package and never finished, and the stuck-mid-course email rule nudges them. For assigned courses, the overdue report shows the gap before an audit does.
- What happens on completion. A finished course can issue a certificate automatically, and a completion webhook can tell your other systems.
- Migrations. LMS Advisor imports Moodle .mbz backups and LearnDash courses. Run every SCORM package that comes with them through the 15-minute routine above.
- Skipping the zip. For content you own, the built-in course authoring tools let you build interactive modules where blocks marked required gate completion, with no package to debug.
One thing it doesn't do: LMS Advisor has no package debugger, so debugging still belongs in SCORM Cloud and your authoring tool. The standards and interoperability page lists exactly what's supported.
Want to see how your packages behave? Start a trial and upload the course that's giving you trouble.
Frequently asked questions
Does LMS Advisor track SCORM completion?
Yes. LMS Advisor plays SCORM 1.2 and SCORM 2004 packages as course lessons and records the status they report, and it runs xAPI and cmi5 content too. Multi-SCO sequencing packages launch only their entry resource, so republish those as single-SCO packages. Test a problem package in SCORM Cloud first, because LMS Advisor has no built-in package debugger.
Why does my SCORM course show incomplete after the learner finished it?
Usually because the completion rule set in the authoring tool was never met, or the status was never saved. Check the tracking option (slides viewed, quiz result or trigger) and whether the course sends status before the learner closes the window. Launching the same package in SCORM Cloud shows which one it is.
Why does a SCORM package complete in one LMS but not another?
Because LMSs interpret a few parts of SCORM differently: which status values count as complete, which SCORM 2004 status field they read, sequencing support and session timeouts. Compare the SCORM Cloud debug log with the learner record in each LMS.
What is the SCORM suspend data limit?
The spec guarantees 4,096 characters in SCORM 1.2, 4,000 in SCORM 2004 2nd and 3rd editions, and 64,000 in SCORM 2004 4th edition. Some LMSs store more, but long courses can exceed what yours accepts, which breaks resume and can stop status updates. Republishing as SCORM 2004 4th edition, or splitting the course, is the usual fix.
How do I test a SCORM package before uploading it to my LMS?
Upload it to Rustici's free SCORM Cloud, take the shortest route to the end, and read the debug log for a completed or passed status followed by a commit. Then close the tab mid-course and relaunch to check resume.
Can I fix completion tracking without republishing the course?
Sometimes. LMS-side settings like completion rules, session length or pop-up handling can change without touching the package. Anything decided at publish time (tracking option, reporting status, SCORM version) needs a republish from the source file.
Add lmsadvisor.com as a preferred source on Google, or open this article in your AI assistant to use it as a source.
