ILT Attendance Reporting & Roster Export
Who this guide is for: Administrators, compliance leads, managers and instructors who need to read attendance back out of the platform — across sessions, across a series, or per learner — and hand it to someone else as a file.
Attendance is recorded on the session itself (by the instructor, by a learner’s QR check-in, or automatically from a virtual meeting). This guide covers the other half: reading it back.
There are two surfaces:
| Surface | Where | What it answers |
|---|---|---|
| Attendance report | Analytics → Session Attendance | ”How is attendance across our sessions, this series, this learner?” |
| Roster export | Planned sessions → (a session) → Roster → Export roster (CSV) | “Give me the list of who was in this room.” |
How the attendance rate is calculated
This is the number people misread most often, so it is worth being precise.
attendance rate = present ÷ (present + absent)Registrations that nobody marked either way are not in the denominator. They are reported separately, in their own Not marked column.
The reason is that “did not attend” and “we never checked” are different findings, and an auditor is usually asking about the second one. A session with 12 present, 0 absent and 8 unmarked reads as 100% of what is known, with 8 registrations still to close out — not as 60% attendance. If unmarked registrations counted as absences, every session an instructor forgot to close would quietly drag the tenant’s numbers down and there would be no way to tell that apart from real absenteeism.
Two related rules:
- A cancelled registration is never an absence. Someone who withdrew before the session does not appear in any tally. They still appear in the roster export, with their registration status, because “who dropped” is a real question.
- A rate of
—means nothing has been marked yet. It is deliberately not rendered as 0%.
The attendance report
Go to Analytics → Session Attendance. Instructors working in Teach mode find the same page under Course insights → Session Attendance.
Step-by-step
- The summary strip across the top shows the totals for everything matching your filters, not just the page you are looking at. It does not change as you page through the table.
- Filter with Course, Series, From and To, then choose Apply. Choosing a course narrows the series list to that course’s series.
- The table lists one row per session, most recent first, with its tally.
- Select a session title to open its roster: every registered learner, the status recorded for them, how it was recorded, and when.
- Select Series detail on any row to open the series view: every session in that series with its tally, plus every learner’s attendance across the whole series, worst attendance first. That last table is usually the point — a cohort’s problem is normally one person missing four sessions, not one session going badly.
Configuration reference
| Filter | Values | Notes |
|---|---|---|
| Course | Any course you can report on | Only courses that actually have sessions appear |
| Series | Any series in scope | Narrowed by the selected course |
| From / To | Dates | Filters on the session start time |
| Column | Meaning |
|---|---|
| Registered | Non-cancelled registrations |
| Present | Marked present |
| Absent | Marked absent |
| Not marked | Registered, never marked either way |
| Rate | Present ÷ (present + absent) |
| Recorded by | How the mark was made — see below |
| ”Recorded by” | Meaning |
|---|---|
| Instructor | Marked by a person on the session page |
| QR check-in | The learner scanned the session’s QR code |
| Automatic (meeting) | Derived from the virtual meeting’s join/end events |
| — | Nothing has been recorded for this registration |
Who sees what
Scope is a security boundary, not a convenience filter.
| Role | Sees |
|---|---|
| Owner / Admin | Every session in the tenant |
| Instructor | Sessions of their assigned courses, plus any session where their user account is set as the session’s instructor (a typed instructor name does not count) — with the full roster of each |
| Manager | Sessions where someone in their report chain is registered, and only those people’s rows. The tallies a manager reads describe their own team, not the whole session |
| Group Admin | The same, narrowed to members of their assigned groups |
Two consequences worth stating plainly:
- A manager’s session tally will legitimately differ from an admin’s for the same session. Both are correct; they are counting different populations.
- The course and series filters only ever offer what you can already report on, so the picker itself does not disclose what exists outside your scope.
Exporting
The attendance report (CSV)
Both export buttons obey the filters currently applied, so the file and the screen always agree.
| Export | One row per | Columns |
|---|---|---|
| Export by session (CSV) | Session | Course, series, session, type, status, start, end, instructor, registered, present, absent, not marked, attendance rate |
| Export by learner (CSV) | Learner per series | Last name, first name, email, course, series, registered, present, absent, not marked, attendance rate |
“Per series” is the grain on purpose: a learner enrolled in two cohorts of the same course has two attendance stories, and averaging them would hide both.
report:export is a separate permission from report:read. A manager can read
this report but cannot export it unless the permission has been granted to them
through a custom role — see Roles and Permissions.
The session roster (CSV)
From Planned sessions, open a session and choose Export roster (CSV) in the Roster panel.
One row per registration — including cancelled ones, with their status — with these columns:
| Column | Notes |
|---|---|
| Last name, First name, Email | The learner |
| Course, Series, Session, Session type | Where the session sits |
| Start (UTC), End (UTC), Location | When and where |
| Registration status | registered, waitlisted or cancelled |
| Registered at (UTC) | When they signed up |
| Attendance | present, absent or not_set |
| Recorded by | manual (instructor), self_qr (QR check-in), automatic (meeting) or none |
| Marked at (UTC) | When the mark was made |
| Notes | Any note left with the mark |
Timestamps are written in UTC, ISO-8601, not in your display timezone. A localised date inside a CSV is the fastest way to make a column unreadable to whoever opens it in the other language.
Column order and names are a stable contract — columns may be added at the end over time, but existing ones are not renamed or reordered, so a spreadsheet or script that binds to them keeps working.
Headers are translated: an export taken in French has French headers.
Notes on delivery and retention
The export is generated in the moment and downloaded straight to your browser. Nothing is stored on our side, so there is no copy of the file to expire, expose or clean up later — but equally, there is no link to re-share. Take the export again if you need it again.
Every export is written to the audit log with the number of rows taken and by whom. The contents are never logged.
Troubleshooting
The report is empty but I know sessions exist
Check your filters first, particularly the date range — it filters on the session’s start time, so a series that ran last quarter will not appear under a “from today” filter. If the filters are clear and it is still empty, you are most likely scoped: an instructor sees only their courses’ sessions, and a manager only sessions their reports are registered for.
A session shows a rate of —
Nothing has been marked for it. That is different from 0% and is shown differently on purpose. Open the session and record attendance.
My numbers differ from another admin’s for the same session
One of you is scoped and the other is not — see Who sees what above. A manager counts only their own reports.
The export button is not there
Exporting the attendance report needs report:export, which is not a manager
default, and the buttons appear only when the filtered report has rows. Exporting a
session roster needs session:view on that session, and Export roster (CSV)
appears only once the session has at least one registration. See
Roles and Permissions.
My export says only the first 2,000 sessions were included
The report renders in the moment, so it is capped. Narrow the date range or filter by course and take it in parts. The warning is always shown — an export is never silently short.
Attendance is recorded but the learner’s course did not complete
Attendance completes the session’s module, not necessarily the whole course. See ILT & VILT Sessions for how session attendance feeds module and course completion.
Related
- ILT & VILT Sessions — scheduling, rosters, marking attendance
- QR Attendance Check-In — learner self-check-in
- Reports & Analytics — the wider reporting surface