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.

Zoom attendee report: cleanup log to fill in for every webinar
StepRuleWhat you record
1. Keep attendee rowsKeep only rows in the attendee section that carry a join time. Leave host and panelist rows outRows kept
2. Remove internal rowsRemove rows from your own email domains and from named agency or speaker-support addressesRows removed, rows left
3. Set aside rows with no emailPhone dial-ins and blank addresses go on their own line. They are attendance, and they cannot be deduplicated or matchedNo-email rows
4. Collapse to one line per emailLowercase and trim the address, then group. Keep the earliest join time, the latest leave time, the row count, and the summed minutesUnique attendees, rows per attendee
5. Cap summed timeIf a person's summed minutes exceed the actual running time, set them to the running timeAttendees 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.

Time in session per attendee (minutes) = Sum of minutes across that attendee's rows, capped at the running time
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.

In room at minute T = Attendees with a row where join time ≤ T and leave time > T
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.

Hypothetical cleanup log for one 60-minute webinar
StepChangeRows leftPeople
1. Attendee rows with a join time474
2. Internal rows removed−14460
3. No-email rows set aside−11449
4. Collapsed to one line per email57 extra rows merged449392
5. Summed time capped at 60 minutes0 attendees449392

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.

Hypothetical attendance and time in session, same webinar
MeasureValueShare of unique attendees
Unique attendees392100%
Qualified attendees, 30 minutes or more24362%
Attendees under 5 minutes4712%
No-email rows, reported separately11
Total minutes across unique attendees15,484
Average minutes per attendee39.5
Median minutes per attendee46

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.

Hypothetical in-room count at each checkpoint
MinuteIn roomHeld from peakLoss since previous checkpoint
531895%
10334100% (peak)
2030993%25
3028184%28
4026278%19
4520461%58
5018756%17
5813942%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.

Webinar series log: one line per session
ColumnWhat goes in it
Date and titleAs scheduled in Zoom
Scheduled running timeMinutes
ThresholdMinutes, and the share it came from
Unique attendeesCount after cleanup rules 1 to 4
No-email rowsCount, kept apart from unique attendees
Qualified attendeesCount and share of unique attendees
Median and average minutesPer attendee, after the cap
Peak in roomCount and the minute it occurred
Largest lossSize, the two checkpoints, and what was on screen
Rule changesAny 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.

EventIQ replaces nothing. Keep your registration platform, CRM, and marketing tools. EventIQ connects on top of what you already run.