All articles
SCORM TroubleshootingLMSTechnical

Common SCORM Errors and How to Fix Them

Practical troubleshooting guide for the most common SCORM errors — tracking failures, completion not recording, bookmarking issues, API errors, and LMS compatibility problems. Problem-solution format.

LI
Larry Ioannidis
29 January 202613 min read

SCORM is reliable — until it isn't. When a course stops tracking, scores go missing, or the LMS shows "incomplete" for learners who definitely finished, it can be maddening to diagnose.

I've spent years debugging SCORM issues across dozens of LMS platforms. These are the errors I see most often, with practical solutions for each.

Before You Start Debugging

A few basics that save hours of frustration:

  1. Test in SCORM Cloud first. Upload your package to SCORM Cloud (Rustici Software's free testing tool). If it works there but not in your LMS, the problem is LMS-specific. If it fails in SCORM Cloud too, the problem is in your package.
  2. Check the browser console. Open Developer Tools (F12) and watch the console while running through the course. SCORM API errors usually appear here.
  3. Know your SCORM version. SCORM 1.2 and SCORM 2004 have different API calls, data model elements, and status values. Mismatching these is a common source of errors.
  4. Document the exact behaviour. "It doesn't work" isn't debuggable. Note: which LMS, which browser, what the learner did, what the expected result was, and what actually happened.

Error 1: Course Completion Not Recording

Symptoms: Learners complete the course but the LMS still shows "Incomplete" or "Not Attempted."

This is the single most common SCORM issue. It has several possible causes:

The Course Isn't Setting the Status

Problem: The course never sends a completion status to the LMS.

Solution: Verify the course is calling the correct API method:

  • SCORM 1.2: API.LMSSetValue("cmi.core.lesson_status", "completed")
  • SCORM 2004: API_1484_11.SetValue("cmi.completion_status", "completed")

If you're using an authoring tool, check the publish settings. Most tools have a "tracking" or "completion" configuration where you specify what triggers completion — slides viewed, quiz passed, or a specific trigger.

The Course Isn't Committing Data

Problem: The course sets the status but never saves it to the LMS.

Solution: Ensure LMSCommit("") (SCORM 1.2) or Commit("") (SCORM 2004) is called after setting values. Many LMSs cache SCORM data and only write it to the database on commit. If the learner closes the browser before a commit happens, data is lost.

Also check that LMSFinish() (1.2) or Terminate() (2004) is called when the course ends. This triggers a final save.

The Completion Trigger Isn't Being Met

Problem: The course is configured to mark complete when the learner views all slides, but the LMS counts slides differently from the authoring tool.

Solution: Review your completion criteria. If set to "view all slides," does that include hidden or branched slides? Try changing the completion method to something more explicit, like a quiz result or a specific slide (e.g., "mark complete when the learner reaches the final summary slide").

LMS Caching Issues

Problem: The LMS caches the old status and doesn't update.

Solution: Clear the learner's attempt data in the LMS and have them try again. If it works on a fresh attempt, the LMS's caching was the issue. Check if your LMS has a "relaunch" vs "resume" setting — some LMSs lock the status after the first session.

Error 2: Score Not Reporting to the LMS

Symptoms: The learner passes the quiz and sees a score in the course, but the LMS shows no score or 0%.

Score Value Formatting

Problem: The course sends the score in a format the LMS doesn't expect.

Solution:

  • SCORM 1.2: The score should be a number between 0 and 100 (as a string): API.LMSSetValue("cmi.core.score.raw", "85")
  • SCORM 2004: The scaled score should be between -1 and 1: API_1484_11.SetValue("cmi.score.scaled", "0.85"). Also set the raw score: SetValue("cmi.score.raw", "85")

A common mistake in SCORM 2004 is sending "85" as the scaled score instead of "0.85" — this is outside the valid range and will be rejected.

Score Set Before Initialisation

Problem: The course tries to set the score before the SCORM API is properly initialised.

Solution: Ensure LMSInitialize("") (1.2) or Initialize("") (2004) returns "true" before setting any values. If initialisation fails, all subsequent calls will fail silently.

Score Overwritten on Exit

Problem: The course sets the score correctly but then overwrites it with a default value when the course unloads.

Solution: Check if the course's exit/cleanup code is resetting the score. Some authoring tools send a score of 0 on initial load, which can overwrite the actual score if the learner resumes a completed course.

Quiz Not Connected to SCORM Reporting

Problem: In the authoring tool, the quiz exists but isn't configured to report to the LMS.

Solution: In most tools, there's a "report to LMS" or "include in tracking" setting for quizzes and question banks. Verify this is enabled. In Storyline, check the Results slide is set to report. In iSpring, check the quiz properties under SCORM settings.

Error 3: Bookmarking (Resume) Not Working

Symptoms: The learner exits the course, returns later, and starts from the beginning instead of where they left off.

Suspend Data Not Being Saved

Problem: The course isn't saving bookmark data, or it's not being committed before the window closes.

Solution: The course needs to save its position using:

  • SCORM 1.2: API.LMSSetValue("cmi.core.lesson_location", "slide5") and/or API.LMSSetValue("cmi.suspend_data", "{...}")
  • SCORM 2004: API_1484_11.SetValue("cmi.location", "slide5") and/or SetValue("cmi.suspend_data", "{...}")

This must be followed by a commit and should happen before the course window closes. Use the beforeunload event to trigger a final save.

LMS Launch Mode

Problem: The LMS is launching the course in "normal" mode instead of "resume" mode.

Solution: Check the LMS's course settings. Most LMSs have a setting for how to handle returning learners — options typically include "always restart," "always resume," or "ask the learner." Ensure it's set to resume.

In SCORM terms, check cmi.core.entry (1.2) or cmi.entry (2004). It should be "resume" for returning learners and "ab-initio" for new attempts.

Suspend Data Too Large

Problem: The course tries to save more data than the SCORM specification allows.

Solution:

  • SCORM 1.2: cmi.suspend_data is limited to 4,096 characters. If your course tries to save more, the LMS will reject it.
  • SCORM 2004: The limit is 64,000 characters, which is rarely an issue.

For SCORM 1.2 courses with complex state, consider compressing the suspend data (base64 encoding + compression) or simplifying what you save.

Browser Pop-up Blockers

Problem: The SCORM course launches in a new window, and the browser's pop-up blocker interferes with the communication between the course window and the LMS window.

Solution: Ensure pop-up blockers are configured to allow pop-ups from your LMS domain. In many enterprise environments, this needs to be done via IT policy/GPO. Alternatively, configure the LMS to launch SCORM content in an iframe instead of a new window, if your LMS supports this.

Error 4: SCORM API Not Found

Symptoms: The course displays but doesn't track anything. The browser console shows errors like "API not found," "Cannot read property 'LMSInitialize' of null," or similar.

Course Launched Outside the LMS

Problem: The course HTML was opened directly in a browser (double-clicking the file) rather than launched through the LMS.

Solution: SCORM courses must be launched by an LMS. The API object is injected by the LMS into the browser environment. If you open the files directly, there's no API to find.

API Search Depth

Problem: The course's SCORM API detection code can't find the API object in the browser's window hierarchy.

Solution: The SCORM specification says the course should search up the window hierarchy (parent frames, opener windows) to find the API object. Some courses have a limited search depth. If your LMS uses multiple nested iframes, the course may not search deep enough.

The standard SCORM API detection code searches up to 500 levels. If you have custom detection code, ensure it searches both window.parent and window.opener chains.

Mixed Content (HTTP/HTTPS)

Problem: The LMS loads over HTTPS but the SCORM content tries to communicate over HTTP (or vice versa). Browsers block this as a security risk.

Solution: Ensure both the LMS and the SCORM content use HTTPS. This is increasingly enforced by modern browsers. If you're testing locally over HTTP, this may work in some browsers but fail in others.

Problem: The browser blocks third-party cookies, which some LMSs require for SCORM session management.

Solution: This is becoming more common as browsers tighten privacy controls. Solutions include:

  • Configuring the LMS to launch content in the same domain context
  • Adding the LMS domain to the browser's cookie whitelist
  • Using an LMS that supports cookieless SCORM session management
  • Launching SCORM content in an iframe on the same domain rather than a pop-up

Error 5: Course Works in One LMS but Not Another

Symptoms: The same SCORM package works perfectly in LMS A but fails (no tracking, wrong status, errors) in LMS B.

LMS-Specific SCORM Implementation

Problem: LMS vendors interpret the SCORM specification differently, especially for edge cases.

Solution: This is the most frustrating category of SCORM issues because there's no single fix. Common discrepancies:

  • API timing: Some LMSs need a delay before the API is available after launch. Add a retry loop to your API detection code.
  • Case sensitivity: Some LMSs are case-sensitive about data model element names. Use exact case as specified in the standard.
  • Status values: SCORM 1.2 accepts "passed" and "completed" as separate valid values for lesson_status. Some LMSs treat these differently for reporting.
  • Commit behaviour: Some LMSs save on every SetValue, others only save on Commit. Always call Commit to be safe.

Testing Across LMSs

If you need your content to work across multiple LMS platforms, test in each one. I know that sounds obvious, but I regularly see organisations deploy to a new LMS without testing, assuming "it's SCORM, it'll just work." It usually does — but when it doesn't, finding out from frustrated learners is far worse than finding out from testing.

I offer SCORM testing and validation services specifically for this — testing your packages across multiple LMS environments and documenting any issues.

Error 6: Course Stuck on "Incomplete" After Passing

Symptoms: The learner passes the quiz and the course shows "Passed," but the LMS shows "Incomplete."

SCORM 1.2: Status Conflict

Problem: In SCORM 1.2, cmi.core.lesson_status handles both completion and success. If the course sets it to "passed" but the LMS expects "completed," there's a mismatch.

Solution: In SCORM 1.2, set the status to "passed" or "failed" (not "completed") when a quiz determines the outcome. Most LMSs treat "passed" as also meaning "completed" for reporting purposes. But verify with your specific LMS — some report "passed" and "completed" separately.

SCORM 2004: Separate Status Fields

Problem: In SCORM 2004, cmi.completion_status and cmi.success_status are separate. The course might set cmi.success_status = "passed" but forget to set cmi.completion_status = "completed".

Solution: Always set both fields in SCORM 2004:

SetValue("cmi.completion_status", "completed")
SetValue("cmi.success_status", "passed")

If you're using an authoring tool, check the SCORM tracking settings. Some tools only set one of these fields depending on the tracking method selected.

Error 7: Multiple Attempts Not Working

Symptoms: The learner needs to retake the course but the LMS won't let them, or retaking doesn't clear previous data.

LMS Attempt Settings

Problem: The LMS is configured for single-attempt access.

Solution: Check the LMS course settings for attempt management. Options typically include:

  • Number of allowed attempts (1, 3, unlimited)
  • What happens on a new attempt (clear all data, keep best score, keep latest)
  • When to allow a new attempt (always, only after failure, only after completion)

Course Not Resetting State

Problem: The learner starts a new attempt but the course loads their old progress.

Solution: On a new attempt, the course should check cmi.core.entry (1.2) or cmi.entry (2004). If the value is "ab-initio" (new attempt) rather than "resume", the course should ignore any saved suspend data and start fresh.

Some authoring tools handle this automatically; others need explicit configuration.

Error 8: SCORM Package Won't Upload to LMS

Symptoms: The LMS rejects the SCORM package during import — error messages about invalid manifest, missing files, or corrupt package.

Invalid imsmanifest.xml

Problem: The manifest file has XML errors, missing required elements, or references to files that don't exist in the package.

Solution: Validate your manifest against the SCORM schema. SCORM Cloud's upload process will flag manifest errors. Common issues:

  • File references in the manifest that don't match actual file names (case sensitivity matters)
  • Missing <organizations> or <resources> elements
  • Incorrect schema namespace declarations

File Path Issues

Problem: The SCORM package contains file paths with special characters, spaces, or paths that exceed the LMS's limit.

Solution: Use simple, short file paths with no spaces or special characters. Stick to letters, numbers, hyphens, and underscores. Keep the total path length under 200 characters.

Package Too Large

Problem: The ZIP file exceeds the LMS's upload size limit.

Solution:

  • Compress images (use WebP or optimised JPEG instead of PNG where appropriate)
  • Host video externally and embed it (YouTube, Vimeo, or your own streaming server)
  • Split the course into multiple smaller SCORM packages
  • Check your LMS's upload limit and adjust PHP/server settings if you control the LMS server (for self-hosted platforms like Moodle)

ZIP File Structure

Problem: The imsmanifest.xml file is inside a subfolder within the ZIP rather than at the root.

Solution: The manifest must be at the root level of the ZIP file, not inside a subfolder. When creating the ZIP, ensure you're zipping the contents of the course folder, not the folder itself.

Error 9: Time Tracking Is Wrong

Symptoms: The LMS shows wildly inaccurate time spent — either 0:00, impossibly large values, or times that don't match reality.

Time Format Mismatch

Problem: The course sends time in a format the LMS doesn't expect.

Solution:

  • SCORM 1.2: Time should be in HH:MM:SS.SS format (e.g., "00:15:30.00" for 15 minutes 30 seconds)
  • SCORM 2004: Time should be in ISO 8601 duration format (e.g., "PT15M30S" for 15 minutes 30 seconds)

Mixing these formats is a common error, especially in custom-built courses.

Session vs Total Time

Problem: The LMS shows session time but you expected total (cumulative) time, or vice versa.

Solution: The course reports session_time — the time spent in the current session. The LMS is responsible for accumulating this into total_time across sessions. If total time isn't accruing, check the LMS's time tracking configuration.

Getting Help

If you've worked through these solutions and still have issues, here's my recommended escalation path:

  1. Test in SCORM Cloud to isolate whether it's a package or LMS issue
  2. Check your authoring tool's documentation for known SCORM issues and settings
  3. Contact your LMS vendor — they may have specific guidance for SCORM configuration
  4. Consult a specialist — sometimes fresh eyes on a problem find the solution quickly

I offer SCORM consultation and troubleshooting services for exactly this scenario. If you've spent hours debugging and are stuck, get in touch. I can usually identify the problem within a single consultation session — and often have it fixed the same day.

For proactive quality assurance, consider using my SCORM testing checklist before deploying courses to catch these issues early.

Tagged:SCORM TroubleshootingLMSTechnical

Need Help With SCORM?

Whether you're building your first course or troubleshooting a tricky LMS issue, I'm here to help. Get a free consultation — no strings attached.

Free 30-min consultation
Same-day response
No obligation