To track training completion in an LMS, find out which status your course package sends, set the LMS completion rule to that same status, test it once as a learner, and export the LMS report as your proof. SCORM 1.2 carries completed and passed in one field, cmi.core.lesson_status; SCORM 2004 splits them into cmi.completion_status and cmi.success_status. The proof is the LMS's own export: Moodle's SCORM report downloads in ODS, Excel or text format, Canvas exports its gradebook as a CSV file, and TalentLMS exports a course report to Excel.

If your finished learner shows as incomplete, the pages read for this guide point to 3 causes: a mismatched status, a save or exit call that never arrives, or a retake that wrote over the result.

What does a SCORM package report to the LMS?

At minimum, 4 things. SCORM.com calls them the "Big 4": "completion, score, duration and satisfaction".

The course does the talking: "The LMS is a passive entity that simply responds to the API calls made by the content." If your package never sends a status, the LMS cannot ask for one: it "can’t initiate any communication".

What is recordedSCORM 1.2 fieldSCORM 2004 fieldWhat the reference says it indicatesSource
Who the learner iscmi.core.student_id, cmi.core.student_namecmi.learner_id, cmi.learner_nameThe person the course was launched for; both values are read only for the course, and the reference says the LMS provides the nameReference
Finished or notcmi.core.lesson_statuscmi.completion_status (completed, incomplete, not attempted, unknown)Whether the learner completed the SCOReference
Passed or failedcmi.core.lesson_status (passed, completed, failed, incomplete, browsed, not attempted)cmi.success_status (passed, failed, unknown)Whether the learner mastered the SCO; in SCORM 1.2 the same field also carries completionReference
The scorecmi.core.score.raw, cmi.core.score.min, cmi.core.score.maxcmi.score.scaled, cmi.score.raw, cmi.score.min, cmi.score.maxThe learner's result, against the range the course declaresReference
The pass markcmi.student_data.mastery_scorecmi.scaled_passing_scoreThe score required to master the SCO; read only for the courseReference
Time in one sittingcmi.core.session_timecmi.session_timeTime spent in the current sessionReference
Time across the attemptcmi.core.total_timecmi.total_timeThe sum of all session times in the current attemptReference
How the learner leftcmi.core.exitcmi.exitWhether the attempt was suspended so it can be resumed, or ended so the next launch begins a new attemptReference; run time overview

A completion date field and a course version field were not found in the pages read for this guide, so both have to come from the LMS and your own records.

What makes a course count as done?

What is the difference between completed and passed?

Completed means the learner finished the content. Passed means they met the mastery requirement, usually a score.

Separation of status. In SCORM 1.2 a single element, cmi.core.lesson_status represents the SCO’s status. In SCORM 2004, status is broken down into two separate elements, cmi.completion_status (completed vs incomplete) and cmi.success_status (passed vs failed).

SCORM.com (Rustici Software), "SCORM Run-Time Environment"

Articulate says of SCORM 1.2: "It only reports one status value, so LMSs must judge what that value means in order to record a completion status and a success status." The version tradeoffs are in SCORM 1.2 vs SCORM 2004. Check your LMS before you choose 2004: TalentLMS says it "supports SCORM 1.2 files only", and Moodle's FAQ says SCORM 2004 is "not supported in Moodle" while "some SCORM 2004 packages may appear to work".

Moodle's Require status has Passed and Completed boxes, and completes a learner on "at least one of the checked statuses". TalentLMS tells you to look in the browser console for LMSSetValue("cmi.core.lesson_status","completed") or "passed", then LMSCommit(). In a Canvas gradebook export, "Complete/incomplete assignments are shown as full or no credit"; how Canvas turns a SCORM status into a grade was not found in the pages read for this guide.

If your package carries a mastery score and Moodle's Mastery score overrides status is on, a raw score below it turns the status into failed when the course calls LMSFinish.

Which one counts as done is your call, set by your regulator or your own policy. On a US home care course we built, the state required scores to be kept. Every lesson had a quiz mid-lesson and at the end, and learners could speed the video up but not skip it.

How does the authoring tool decide what to send?

You choose it at publish time, under Reporting and Tracking in the Storyline 360 Publish window. The LMS Reporting option is "the wording you want your LMS to display for learners’ statuses in reports", in 4 pairs: Passed/Incomplete, Passed/Failed, Completed/Incomplete and Completed/Failed. Articulate recommends the 2 Passed pairs as "most likely to record both completion and success statuses in your LMS".

The Tracking tab decides when the status is sent: after a number of slides viewed, when a quiz is completed, or by completion trigger. You can tick several, but "Even if the learner completes multiple criteria, only the first one gets sent to your LMS."

Keep the course Identifier unchanged when you republish. The full settings are in export SCORM from Storyline 360.

Where does each LMS show the record?

In its own report. These are the 3 LMSs whose report and export pages were read for this guide.

Moodle. Teachers get a Reports tab on the SCORM activity. Moodle 5.3's source code lists 4 reports there (Basic report, Graph report, Interactions report and Objectives report) and a Download menu: Download in ODS format, Download in Excel format and Download in text format. As the Basic report's source code shows, the text download is a tab separated.txt file; no Moodle Docs page read for this guide documents it.

The Basic report's columns include Name, your site's identity fields, Attempt, Started on, Last accessed on and Score; when the package sent no raw score, the Score cell shows the status.

A teacher can also "mark an activity complete on behalf of a student" from the Activity completion report, a capability enabled by default. Whether any report flags a manual completion was not found in the pages read for this guide. Setup is in uploading a SCORM package to Moodle.

Canvas. A SCORM import becomes a graded assignment, an ungraded assignment or a page, permanently; if the import is ungraded, "the assignment is not added to the gradebook". To export, open Grades, click Export, then Export Current Gradebook View, or Export Entire Gradebook to include every grading period. The CSV file name starts with the export date and time, and concluded or inactive enrollments are left out unless you turn on Show Concluded Enrollments or Show Inactive Enrollments.

TalentLMS. The SCORM report under Reports, Learning activities has a Users tab where View Attempt shows total attempt time and per interaction detail.

Under Reports, Courses, Save as CSV lists users assigned and users completed per course. Open one course's report, and Export in Excel gives you each assigned user's progress, the learning activity results and a timeline of learner actions. If a certificate is assigned to the course, the Users tab links each user's certificate for download.

When do you need xAPI and a Learning Record Store?

When your course reports in xAPI. xAPI sends statements to a Learning Record Store (LRS), and ADL says LRSs "may be part of an LMS or other software package, or they can be standalone applications".

Storyline can send results to a separate LRS through Report to an external LRS. Moodle's FAQ names 3rd party plugins such as logstore xAPI for reporting to an external LRS. Whether your LMS holds an LRS is a question for its own documentation; the comparison is in xAPI vs SCORM.

What should a completion record contain for an audit?

No regulator's rule was read for this guide, so this is what the data and reports above can show, not what an inspector requires. Hold it against your regulator's own wording.

An auditor with a magnifying glass reading a stamped record card, proof when you track training completion for an audit

  • The learner: the read only ID and name the course receives, and the Name and identity fields in Moodle's report.
  • The course version. A version field was not found in the pages read for this guide, so keep a log: package file name, publish date, Storyline Identifier, and the dates each package was live.
  • The date. Moodle records Started on and Last accessed on per attempt. TalentLMS keeps only the latest completion date and points to the Timeline "which serves as an audit log". The date in a Canvas export file name is the export date, not the completion date.
  • The result: status, score and the pass mark it was judged against.
  • The time, which is time in the unit, not attention: TalentLMS counts screens such as "Click to Resume".
  • Who changed it. A manual completion is a person's decision, not the package's report.
  • The export itself, saved outside the LMS with the date in its name, beside the version log.

Why does a finished learner still show as incomplete?

The pages read for this guide describe 3. None of them says what, if anything, your learner sees on screen; the evidence sits in a Moodle debugging log or the browser console.

The LMS waits for a status the package never sends

Your package sends completed and the LMS waits for passed, or the reverse, as when a Moodle Require status box is ticked for the wrong word. A related case is not a status mismatch at all: a Canvas package imported as ungraded is not added to the gradebook, and the import type cannot be changed in Canvas.

TalentLMS describes another version, a final action the learner never triggers, such as an Exit button: "If that event never fires, the unit stays incomplete." Storyline's rule that only the first criterion met is sent belongs here too.

The call that saves the result never reaches the LMS

SCORM.com says "it is essential that Terminate be called in every exit scenario", ideally from the course's onunload event, and that Commit "is simply an informative signal" with no required implementation. Moodle's FAQ says LMSCommit "should be called after every LMSSetValue()", and Moodle's Auto commit setting commits the data 60 seconds after the values are set.

TalentLMS describes the reverse case: some packages post results only when the popup window closes, and "If learners don’t close the window, data isn’t sent". Articulate, in its advice on adding an exit button, says "SCORM 2004 requires learners to fully exit the course for completion data to show in LMS reports." and adds "Ask your LMS provider to be sure." None of these 4 sources traces a learner closing a tab before a commit and losing the status, so close a tab mid course in your test.

A retake or an update writes over the record

Moodle's FAQ warns that when a learner returns to an attempt and your package has no logic to protect earlier values, cmi.core.lesson_status and cmi.core.score.raw "can be overwritten by a lower score". Moodle's Attempts grading records the highest, average, first or last completed attempt, and the last completed option ignores failed attempts.

TalentLMS "will only be keeping the latest completion date for each course and user". The TalentLMS unit option "When failed, retain the failed status upon retries." exists to stop a retry overwriting a failure. Canvas's CSV "only accounts for the most recent submission".

Updates can erase the record too. Moodle deletes a package's tracking data when the replacement has a different item identifier. If you unlock an activity's completion settings, Moodle says "all completion information for the activity will be deleted then recalculated where possible".

How do you track training completion and prove it?

You need a free SCORM Cloud account, a test learner account, your browser's console and a folder outside the LMS. Plan on 1.5 to 3 hours for the first course (a working estimate).

  1. Write down what done means: completion only, or a passing score too, and the pass mark.
  2. Set the same rule in the package. In Storyline, pick a Passed reporting option and the tracking criterion you want to count, since only the first one met is sent. Keep the Identifier if the course is already live.
  3. Run the package in SCORM Cloud and read the completion and pass/fail status, score and time it shows. Articulate uses SCORM Cloud as its baseline for LMS output, so the SCORM Cloud reading is the one to compare your LMS against.
  4. Match the LMS rule. Moodle: Require status or Require minimum score, and Attempts grading. Canvas: a graded assignment. TalentLMS: Score calculation set to Units I choose under Course options, Completion, if the SCORM score is the course score. Uploading: how to upload a SCORM package to any LMS.
  5. Test as the learner twice: once straight through, triggering every final action, and once closing the tab halfway. Watch the console for the status call and the commit; in Moodle, compare the debugging log with the report of the attempt.
  6. Export the report: a Moodle download, the Canvas CSV with concluded enrollments shown, or the TalentLMS Excel export plus certificates.
  7. File the export with the version log and the rule from step 4. Export again on a fixed schedule, since TalentLMS keeps only the latest completion date for each course and user and a Canvas CSV only accounts for the most recent submission.

If your result looks wrong, run a package known to work, such as those in sample SCORM packages to test an LMS, to tell a package fault from an LMS fault.

TaskWho can do itRough time
Define done, set reporting and tracking (steps 1 and 2)Course author20 to 30 minutes
SCORM Cloud run (step 3)Course author15 to 20 minutes
LMS rule and 2 test runs (steps 4 and 5)LMS admin45 to 90 minutes
Export and file (steps 6 and 7)LMS admin or compliance lead15 to 30 minutes each time

Working estimates for one short course, not vendor figures.

Which tracking mistakes cost the most?

  1. Ticking Passed for a package that sends completed, or the reverse.
  2. Importing to Canvas as ungraded, because the import type "is permanent and cannot be changed in Canvas".
  3. Changing the identifier on a republish. Moodle drops tracking data when the manifest's item identifier differs; the pages read for this guide do not say which Storyline field sets that item identifier.
  4. Keeping only one export, for the reason in step 7.

A SCORM course that won't complete? Send it to us. We fix one course free for companies, or tell you why it fails, within 48 hours. See the free SCORM fix.

Other questions about tracking completion

What is the difference between SCORM completed and passed?

Completed says the learner finished; passed says they met the mastery requirement. SCORM 1.2 holds both in cmi.core.lesson_status; SCORM 2004 splits them.

Does SCORM record the date a learner completed?

A completion date element was not found in the pages read for this guide. The dates come from the LMS, such as Moodle's Started on and Last accessed on.

Do I need an LRS to track SCORM completion?

No. SCORM data goes to the LMS through its API; an LRS stores xAPI statements.