Zoom Webinar Analytics: Attendance and Time in Session
Zoom webinar analytics starts with two facts about each participant: that they joined, and how many minutes they stayed. The attendee report holds both, one row per connection. Three figures worth reporting come from it: unique attendees, the share who stayed past a threshold you set, and the minute the room started to leave.
This page is the method: how to clean the rows, the formulas, a log to keep, a worked example, and the mistakes that inflate the count. What webinar numbers prove in general, including an attendance rate measured against a sign-up list, is covered in webinar analytics. Cost and revenue belong to webinar ROI.
What is in a Zoom webinar attendee report?
Zoom's public documentation describes several webinar reports, among them an attendee report, a performance report, and reports for Q&A and polls. Attendance and time in session come from the attendee report, so that is the one this page works through.
Four terms, defined the way the rest of the page uses them.
Row. One connection to the webinar. A person who drops and rejoins, or who joins from a laptop and a phone, produces more than one row.
Attendee. One person, identified by email, however many rows they produced.
Time in session. The minutes attributed to a row, between its join time and its leave time. For an attendee, it is the sum across their rows.
In room. The number of attendees connected at a given minute, read from join and leave times.
Column names and layout depend on your account settings and on how the report was generated, so open your own export first. Confirm four points: where the host and panelists are listed, whether a rejoin produces a new row, how phone dial-ins appear, and whether time is stated in minutes or seconds.
This page covers Zoom Webinars. Zoom Meetings have their own participant report. The method is the same and the columns differ.
How do you turn report rows into a count of attendees?
Apply five rules in this order and record the count after each one. The order matters because each rule changes what the next one sees.
| Step | Rule | What you record |
|---|---|---|
| 1. Keep attendee rows | Keep only rows in the attendee section that carry a join time. Leave host and panelist rows out | Rows kept |
| 2. Remove internal rows | Remove rows from your own email domains and from named agency or speaker-support addresses | Rows removed, rows left |
| 3. Set aside rows with no email | Phone dial-ins and blank addresses go on their own line. They are attendance, and they cannot be deduplicated or matched | No-email rows |
| 4. Collapse to one line per email | Lowercase and trim the address, then group. Keep the earliest join time, the latest leave time, the row count, and the summed minutes | Unique attendees, rows per attendee |
| 5. Cap summed time | If a person's summed minutes exceed the actual running time, set them to the running time | Attendees capped |
Rule 5 exists because two devices connected at once each accrue minutes. Without the cap, one person can show 110 minutes in a 60-minute session and pull the average up.
Keep the list of internal domains in one place and reuse it for every session. Producers, moderators, and colleagues who join as attendees stay to the end and lift both the count and the average.
Keep the raw export beside the cleaned file, so someone else can recount under a different rule next year.
How much time in session counts as attended?
Zoom records that a person connected. Whether that counts as attending is a rule you set, and it has to be the same rule for every session you intend to compare.
Unique attendees = Distinct emails after the cleanup rules
Threshold (minutes) = Scheduled running time × Agreed share
Qualified attendees = Unique attendees with time in session ≥ Threshold
Qualified share (%) = Qualified attendees ÷ Unique attendees × 100
The decision rule: set the agreed share once, before the next session, and apply it to every webinar in the series. Half of the scheduled running time is a workable default. That is 30 minutes for a 60-minute session and 23 minutes for a 45-minute one, rounding up.
A share travels across session lengths and a fixed number of minutes does not. Twenty minutes is two thirds of a 30-minute briefing and under a quarter of a 90-minute workshop.
Report unique attendees and qualified attendees side by side, with the threshold named next to the second. Report the median minutes beside the average, because a group that left in the first few minutes pulls the average toward a duration few people sat through.
When did the room leave?
Minutes per person say how long people stayed. Join and leave times say when they went, and that is the part you can change in the next running order.
Peak in room = Highest in-room count across your checkpoints
Held from peak (%) = In room at minute T ÷ Peak in room × 100
Loss between checkpoints = In room at the earlier checkpoint − In room at the later checkpoint
Set a checkpoint every 5 or 10 minutes, plus one 2 minutes before the scheduled end. Then line the table up against the running order: the segment that was on screen at each checkpoint. A loss several times the size of its neighbors has a timestamp, and usually a cause you can name, such as a speaker handover or the switch to Q&A.
Example: a 60-minute Zoom webinar
Take one 60-minute webinar. All figures are hypothetical.
| Step | Change | Rows left | People |
|---|---|---|---|
| 1. Attendee rows with a join time | 474 | ||
| 2. Internal rows removed | −14 | 460 | |
| 3. No-email rows set aside | −11 | 449 | |
| 4. Collapsed to one line per email | 57 extra rows merged | 449 | 392 |
| 5. Summed time capped at 60 minutes | 0 attendees | 449 | 392 |
The 449 rows with an email belong to 392 people. The other 57 rows, 449 − 392, were rejoins or second devices, which is 449 ÷ 392 = 1.15 rows per attendee. A team reporting rows would have claimed 474 attendees, 82 more than the 392 it can identify, an overstatement of 21%.
The threshold was written down before the session at half the scheduled 60 minutes: 30 minutes.
| Measure | Value | Share of unique attendees |
|---|---|---|
| Unique attendees | 392 | 100% |
| Qualified attendees, 30 minutes or more | 243 | 62% |
| Attendees under 5 minutes | 47 | 12% |
| No-email rows, reported separately | 11 | |
| Total minutes across unique attendees | 15,484 | |
| Average minutes per attendee | 39.5 | |
| Median minutes per attendee | 46 |
Qualified share is 243 ÷ 392 = 62%. The average is 15,484 ÷ 392 = 39.5 minutes. Dividing the same minutes by the 449 rows gives 34.5, which is what you get by averaging the report without collapsing it, and it understates the average person by 5 minutes. The median, 46 minutes, sits above the average because the 47 people who left within 5 minutes pull the average down.
Now the checkpoints, read from join and leave times.
| Minute | In room | Held from peak | Loss since previous checkpoint |
|---|---|---|---|
| 5 | 318 | 95% | |
| 10 | 334 | 100% (peak) | |
| 20 | 309 | 93% | 25 |
| 30 | 281 | 84% | 28 |
| 40 | 262 | 78% | 19 |
| 45 | 204 | 61% | 58 |
| 50 | 187 | 56% | 17 |
| 58 | 139 | 42% | 48 |
The room held 78% of its peak through minute 40, then lost 58 people in 5 minutes. That is about three times the 19 it lost across the 10 minutes before, and 58 ÷ 262 = 22% of everyone who was in the room at minute 40. The running order shows the handover to open Q&A at minute 41. The 48 who left between minutes 50 and 58 went over 8 minutes as the session wound down, which is the expected shape.
What the example supports: 392 identified people attended, 243 of them for at least half the session, and about a fifth of the room left at the handover. The next session can test one change, such as taking questions before the closing summary. The 243 qualified attendees are also the list to carry into the CRM. How those people connect to deals is on the Salesforce integration page.
What do you keep from one webinar to the next?
One line per webinar, with the same columns every time.
| Column | What goes in it |
|---|---|
| Date and title | As scheduled in Zoom |
| Scheduled running time | Minutes |
| Threshold | Minutes, and the share it came from |
| Unique attendees | Count after cleanup rules 1 to 4 |
| No-email rows | Count, kept apart from unique attendees |
| Qualified attendees | Count and share of unique attendees |
| Median and average minutes | Per attendee, after the cap |
| Peak in room | Count and the minute it occurred |
| Largest loss | Size, the two checkpoints, and what was on screen |
| Rule changes | Any change to the domain list, the threshold, or the checkpoints, with the date |
The last column is what keeps the log comparable. A threshold that moved in March makes April look different for a reason nobody remembers by September. For a program of sessions under one event, virtual event ROI covers what changes across a multi-session schedule.
Which mistakes distort Zoom attendance numbers?
Counting rows as people. Every rejoin adds a row. In the example, rejoin rows alone would have added 57 to a count of 392, which is 15%.
Averaging per row. A person with three short rows becomes three short visits. Sum per email first.
Folding no-email rows into the unique count, or deleting them. Adding them risks double counting, and removing them understates the room. Keep the separate line.
Reporting the peak as the audience. Peak in room is lower than unique attendees, because early leavers and late joiners never overlap. Use it for the checkpoint table only.
Changing the threshold after seeing the result. A threshold chosen afterward tends to land on the flattering cut. Write it down before the session.
Reading minutes as attention. Time in session records an open connection. A person can leave at minute 30 for another meeting and be a serious buyer. Use the figure to define attendance consistently and to find where the session lost people.
What to do this quarter
- Export the attendee report for every webinar from the last quarter and store each file with its date and title.
- Write the five cleanup rules and your internal domain list on one page, and name who maintains it.
- Agree on the threshold share, record the date, and recompute past sessions under it.
- Build the checkpoint table for your last three sessions and mark the largest loss against the running order.
- Start the series log, including the rule-changes column.
Common questions
Should phone dial-ins count as attendees?
Count them as attendance, on their own line. Without an email they cannot be merged with a second row from the same person or matched to a CRM contact, so adding them to unique attendees mixes two kinds of count.
Why does our count differ from the figure shown in the Zoom account?
Usually because the two figures follow different counting rules. A summary figure may count connections, include panelists, or count unique users, depending on the report and its settings. State which rule your number follows and keep the rows behind it.
Can we compare a 30-minute webinar with a 90-minute one?
Compare qualified share, since the threshold scales with the running time. Average minutes do not compare directly: 25 minutes is most of one session and under a third of the other.
Where EventIQ fits
EventIQ replaces nothing. It connects on top of the platforms you already run: event platforms (Cvent, Zoom, Swapcard), CRM (Salesforce, HubSpot, GoHighLevel), and marketing (Google Ads, Meta Ads, LinkedIn Ads, Mailchimp, Google Analytics). Platforms with an API outside that list are connected on request.
From Zoom, EventIQ holds two things per participant: attendance and time in session. Records arrive on a schedule: every 2 hours by default, configurable per source. Each participant is matched to a CRM contact by exact email, and the result stays on the record: matched, unmatched, or no email. Salesforce deals, with stage, amount, and close date, link to the event through a campaign relationship a person confirms.
Where it stops. Zoom registrants are not counted per webinar in EventIQ yet, so a registered-versus-attended comparison for a Zoom webinar is a division you run on your own Zoom reports. Registration records in EventIQ come from the Cvent integration. Poll answers, Q&A, and recording views are not part of the Zoom data flow. The cleanup rules, the threshold, the qualified share, and the checkpoint table on this page are arithmetic you run on the attendee report yourself. EventIQ makes no recommendation about the session, there is no screen showing a match rate, and a person who appears in two connected sources is counted in each.
Book a demo to see Zoom attendance and time in session per participant, with the CRM match result on each record, on a sample event, in a 20-minute demo.