Microsoft Teams and Zoom attendance
Twelve Teams and Zoom reports. One attendance roster.
Teams and Zoom both write a separate attendance report for every occurrence of a recurring meeting. Drop them all in, mixed or matched, and get one roster: who attended how many sessions, for how long, and who completed.
CSV or XLSX · 25 MB max
Free · no sign-in · your files never leave the browser
- Eligible
Ada Lovelace
12/12 · 684 min
- Eligible
Grace Hopper
11/12 · 601 min
- Not eligible
Tom Byrne
7/12 · 268 min
Watch Attendance Report Merge combine separate Teams attendance reports into one roster, in 30 seconds.
Real Teams attendance reports, merged in the actual product — no account, and nothing to upload to watch it happen.
Thirty seconds, and it starts silent — turn the sound on in the player once it loads.
Nothing has been sent to YouTube yet: the image and this text came from us, and pressing play is what connects your browser to YouTube.
- 0:00One report per session.
- 0:02Two reports, six people.
- 0:05Same name, different address.
- 0:09Decide what counts as complete.
- 0:12Sessions attended, minutes, result.
- 0:16Where every number came from.
- 0:18And what it cannot know.
- 0:22One workbook. Three sheets.
Teams counts one meeting. Nobody counts the series.
A recurring meeting produces a unique attendance report for each instance, and Microsoft's own support answer is that there is no cumulative version. The two obvious ways to add them up are both wrong.
The double count
Someone rejoins, and the arithmetic breaks
Teams records one interval per join. Add the durations up and a laptop plus a phone counts the same half hour twice; take last leave minus first join and a thirty-minute gap counts as attendance. Only the union of the intervals is the time that person was actually there.
The wrong merge
Two people, one name
A four-hundred-person cohort has more than one Maria Silva. Match on the display name and one of them ends up on a completion list she never earned while the other drops off one she did — with nothing on screen to show it happened.
The silent zero
A missing duration is not a duration of zero
The Teams policy “Only show who attended” strips every join and leave time from the report. A tool that reads that as zero minutes marks an entire room non-compliant for a setting an administrator changed.
Attendance report format and policy behaviour read from Microsoft's and Zoom's own documentation. Vendor behaviour changes; Attendance Report Merge reports what the file says rather than assuming.
Upload, merge, decide.
Reports dropped
New Starter Onboarding
12 sessions
- Ada Lovelace
- 12/12
- Grace Hopper
- 11/12
Reviewed roster
- Eligible
Ada Lovelace
684 min
- Eligible
Grace Hopper
601 min
- Not eligible
Tom Byrne
268 min
Exported workbook
44 people across 12 sessions · 38 met the rule
Merges people, not rows
Records join on an identifier both of them carry — a UPN or an address. A shared name is offered as a decision with both records on screen, never applied on your behalf.
Counts time that was actually spent
Overlapping joins are counted once and the gaps between them are not counted at all. Where the report hides its times, the roster says so instead of scoring a zero.
Applies the rule you state
Minimum minutes per session, minimum sessions, minimum percentage, minimum total time. The result column shows the arithmetic behind every verdict.
Answers who signed up and did not come
Add the registration report next to the attendance files and the roster gains three lists: registered but not seen attending, attended without registering, and matched. Nothing joins on a name alone.
Three steps, one browser tab.
Drop in every report
One file per occurrence, the way Teams or Zoom exports it — Teams' UTF-16 CSV, which opens as one mangled column in a spreadsheet, or Zoom's plain participant CSV from a Usage report. XLSX works too if someone has already re-saved it. If the meeting had registration, drop that report in as well — it is optional, and it only adds the signed-up-versus-showed-up lists.
Review the merges and set your rule
Everything provable is already merged. What is left is shown with the evidence, and the completion thresholds sit beside the roster so you can watch the results move.
Take the workbook
One .xlsx with three sheets — the roster with a column per session, the sessions themselves, and every finding the files raised. Or any single table as CSV.
Who this is for
Four kinds of buyer show up with the same pile of files.
Learning and development
You run the course and you are the one who has to say who completed it, usually from a folder of downloads and a spreadsheet you built yourself.
HR and people operations
Onboarding runs continuously and the attendance question arrives in batches, per cohort, from someone who needs it today.
Compliance and quality
Mandatory briefings have an attendance threshold and an auditor who will ask how the number was produced. Every figure here is traceable to a file and a rule.
Training providers
You deliver the same series for several clients and produce an attendance report per engagement. The job repeats; the files are different every time.
What the roster actually contains
Every column below is in the export, and every number is derived from the files you gave it.
- Sessions attended
- Out of the sessions held, counting only the ones long enough to meet your per-session minimum.
- Total attended time
- Across the whole series, in minutes, with overlapping joins counted once.
- Attendance percentage
- Counted sessions over sessions held — the number a completion policy is usually written against.
- Missed sessions
- Which weeks, not just how many. Absence is shown as absence, never as zero minutes.
- Completion result
- Eligible, not eligible, or “cannot tell” when the data has no durations to apply your rule to.
- A column per session
- Minutes attended in each occurrence, so a conversation about week three starts with week three.
Say what counts as completion
Four numbers, all starting at zero, because a tool that arrives with an opinion about what counts as attendance has made a decision that belongs to you.
- Minutes to count a session
- Below this, someone is recorded as present but the session does not count as attended. Ten minutes of a ninety-minute workshop is not attendance.
- Sessions to complete
- How many counted sessions someone needs. The usual shape of a training requirement.
- Percentage to complete
- The share of all sessions held that someone must have attended — useful when the number of sessions varies by cohort.
- Total minutes to complete
- Total time across the series, for a requirement written in contact hours rather than sessions.
The tool applies the threshold and shows the arithmetic. Whether someone who missed week three for a funeral still completes is a judgment, and it stays yours.
Built for meetings that repeat
- Training courses
- A twelve-week course produces twelve reports. This turns them into an attendance sheet with a pass column.
- Onboarding cohorts
- Every new starter attends the same six sessions on different days. Merge the cohort and see who still owes one.
- Workshops and series
- Repeated half-day sessions with an overlapping audience — the case where the same person appearing in four files matters most.
- Recurring meetings
- A standing weekly with an attendance expectation attached, reported monthly or quarterly rather than one meeting at a time.
What it does not do
Stated plainly, because the boundaries are what keep this one tool rather than a platform.
It is not an LMS or an HR system
No courses, no enrolments, no certificates, no employee records. It answers one question about one pile of files.
It does not connect to Microsoft 365
If a report was never downloaded, this cannot see it. Collecting them automatically would need a tenant-wide permission, which is the trade this product declines.
It does not decide who passed
It applies the threshold you state and shows the working. The exceptions stay a human decision.
It ignores engagement data
Reactions, camera-on and raised hands are in the report and are deliberately not read. They are not presence, and scoring people on them is a different product.
It cannot prove an absence
An attendee can opt out of being identified, and a tenant policy can exclude them entirely. Someone on the registered-but-absent list may have attended without appearing in any file this reads. The list says so beside the count.
Privacy
The reports never leave your browser
An attendance report is a record of where a named employee was, minute by minute, usually beside their work address. That is a stronger reason for this posture than convenience.
Files are read in this browser tab, by code running on your own machine. No file is sent to a server, because no code on this page sends one — that is what our code does, not something the browser enforces. What the browser enforces is reach: the page's Content-Security-Policy admits, for the page itself, only our own origin, Cloudflare's two analytics hostnames and the host the demo video's player is loaded from once you press play. Our policy stops at that frame: what the player loads inside it is YouTube's, not ours to govern or count. Nothing from your reports is in any of it.
No connection to Microsoft 365 or Zoom. No Graph API, no Zoom API, no admin consent, no tenant permission. Attendance Report Merge never touches your organisation's data; it reads files an organizer already downloaded.
No account, no sign-in, no email address. There is nothing to create and nothing to delete.
Nothing from your reports is stored between page loads. There is no history and no local database — closing the tab is the delete button. The demo video plays inside YouTube's own player, which we do not control.
Questions people ask
Everything below is answered by what the tool does today, not by a roadmap.
- What does Attendance Report Merge do?
- It combines the attendance reports Microsoft Teams produces for each occurrence of a recurring meeting into one roster. For every person it shows how many sessions they attended, how long they were present in total, their attendance percentage, and whether they met the completion rule you set. It runs entirely in your browser and exports an Excel workbook or CSV.
- Where do I get the attendance reports?
- In Teams, open the meeting chat or the meeting's invite, go to the Attendance tab, and download the report as a .csv file. A recurring meeting has a separate report for each instance, so download one per occurrence. Only the organizer can do this, and an administrator can turn attendance reports off entirely.
- Why does Teams not just give me a combined report?
- It does not have one. Microsoft's documentation states that recurring meetings have a unique attendance report for each instance, and Microsoft's own support answer to people asking for a cumulative report is that no such feature exists — the recommendation is to consolidate the downloads manually or build something in Power Query or Power Automate. Attendance Report Merge is that consolidation without the build.
- What happens if someone leaves and rejoins?
- Their time is counted once. Teams records a separate interval for every join, so a person on a laptop and a phone has overlapping intervals and a person who dropped out has a gap. Attendance Report Merge merges the intervals and measures the time they cover, which is neither the sum of the durations nor the span from first join to last leave — both of those are wrong, in opposite directions.
- How does it know two rows are the same person?
- Only by an identifier both rows carry: the UPN, or the email address. Two records that share nothing but a display name are never merged automatically — they are shown side by side with their addresses and how many sessions each accounts for, and you decide. Every decision can be undone.
- My reports have no join or leave times. Does it still work?
- Yes, and it will tell you what it cannot answer. The Teams policy “Only show who attended” removes the times, so the roster records those people as present with an unknown duration — never as zero minutes. Rules about session counts still apply; rules about minutes return “cannot tell” for them rather than a failure.
- Can I see who registered but did not attend?
- Yes. Add the Teams registration report alongside the attendance files and you get three lists: people who registered and were not seen attending, people who attended without registering, and the matches. The registration file is optional — with attendance files alone the output is exactly what it was before. People are matched on an address or UPN both records carry, never on a display name alone, so a registrant and an attendee who share only a name appear on both lists rather than being merged for you.
- Does this work with Zoom too?
- Yes. Drop in a Zoom Usage report's participant export the same way as a Teams attendance report — the upload step reads either, and the result names which platform each file was read as. Zoom's own registration export works the same way as Teams' for the registered-but-absent comparison. A Zoom participant row with no email address (a guest, a dial-in caller) is kept and shown rather than dropped; it just cannot be matched across files without an address, the same rule that already governs a name-only Teams row.
- What does the export look like?
- One .xlsx workbook with three sheets: the roster, one row per person with a column per session; the sessions, one row per report with the meeting length each percentage is measured against; and the findings, everything the files got wrong. Any of the three can also be downloaded on its own as CSV. The same files and settings always produce the same file.
- How many sessions can I merge at once?
- Up to 60 reports, and up to 25 MB per file. A year of weekly sessions fits. The limit is about what a browser tab can hold comfortably, not about the reports themselves — an attendance report for a four-hundred-person town hall is well under a megabyte.
- What does it cost?
- Nothing. There is no account, no trial and no upload, so there is no cost to run it and nothing to cancel.
Stop joining spreadsheets by hand. Drop the reports in.
Free · no sign-in · your files never leave the browser