How to compare event registrations with attendance
By the Analistable team · Updated · 6 min read
Join the registration export to the check-in (or webinar attendee) export on email. Registrants with a check-in attended; registrants without one are no-shows; check-ins with no registration are walk-ins. Divide attendees by registrants for the attendance rate, and join the attendee list to your CRM to see which leads turned up.
Part of our guide: How to join spreadsheets on a common column
Three lists from one join
Attended =COUNTIF(Checkins[Email key], [@[Email key]]) > 0
No-shows =FILTER(Registrations[Email], NOT(Registrations[Attended]))
Walk-ins =FILTER(Checkins[Email], COUNTIF(Registrations[Email key], Checkins[Email key]) = 0)| Measure | Value |
|---|---|
| Registered | 180 |
| Attended (registered) | 104 |
| Walk-ins | 12 |
| Attendance rate | 58% (104 / 180) |
Webinars: minutes watched
Webinar platforms export one row per join, so people who dropped out and rejoined appear several times. Sum minutes per email before joining: =SUMIFS(Attendees[Minutes], Attendees[Email key], [@[Email key]]), then flag anyone who watched at least half the session.
Attendance and your CRM
Join attendees to CRM leads to update their status and to compare conversion: leads who attended vs leads who registered but didn't. That comparison is often the best evidence of whether events work.
| Group | Leads | Became customers | Conversion |
|---|---|---|---|
| Attended | 96 | 11 | 11.5% |
| Registered, didn't attend | 74 | 3 | 4.1% |
Emails typed on registration forms contain typos. Check no-shows for near matches with walk-ins (same name, similar email) before sending follow-ups.
Clean the emails first
=LOWER(TRIM(SUBSTITUTE([@Email], CHAR(160), "")))Registration forms and badge scanners export emails with stray spaces, capitals and non-breaking spaces (CHAR(160)) pasted in from other tools. Clean both lists with the same formula before matching, or attendees will show up as no-shows.
Follow-up lists
- Attended: thank-you email with the slides or recording.
- No-shows: the recording and the next date — they were interested enough to register.
- Walk-ins: add to your contact list only if they gave consent at check-in.
Export each list separately rather than one file with a status column, so the right message goes to the right people.
Across several events
Stack every event's registrations and check-ins with an Event column, then count events attended per person. People who registered for three events and attended none are worth removing from future invitations; people who attended every event are your most engaged audience.
Step by step
- Export registrations with name, email, company, ticket type and registration date.
- Export check-ins from the badge scanner, door list or webinar platform with email and check-in time.
- Clean the email on both sides with the formula below and put the result in an Email key column.
- Add Attended to the registrations table, then build the no-show and walk-in lists.
- Calculate the attendance rate per ticket type or registration source.
In Excel 365 and Google Sheets, the FILTER formulas above spill the lists directly. In Excel 2019, add Attended as a column, then filter the table on FALSE for no-shows; for walk-ins, add a column in the check-ins table with =COUNTIF(Registrations[Email key], [@[Email key]]) = 0.
Second example: attendance by ticket type
Registered =COUNTIFS(Registrations[Ticket], [@Ticket])
Attended =COUNTIFS(Registrations[Ticket], [@Ticket], Registrations[Attended], TRUE)
Rate =[@Attended] / [@Registered]| Ticket | Registered | Attended | Rate |
|---|---|---|---|
| Paid | 60 | 51 | 85% |
| Free | 100 | 41 | 41% |
| Partner invite | 20 | 12 | 60% |
| Total | 180 | 104 | 58% |
The overall 58% hides a large gap: paying registrants nearly all came, while fewer than half of free registrants did. For the next event, that's a reason to over-allocate free places or send free registrants an extra reminder.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Attendance rate unusually low | Emails not cleaned, so attendees fail to match | Apply the same cleaning formula to both lists |
| Walk-ins who did register | Registered with a work email, checked in with a personal one | Compare walk-ins with no-shows on name and company |
| One person counted twice | Group registration under one booker's email | Match on attendee email, not booker email |
| Webinar attendance above registrations | Each rejoin is a row | Sum or count per email before joining |
Checking the result
Registered attendees plus no-shows must equal registrations, and registered attendees plus walk-ins must equal the number of distinct cleaned emails in the check-ins. If the event has paid tickets, compare no-shows with your refund list too: a no-show who was refunded shouldn't receive the recording. For combining several events' files before counting, see pulling data from multiple sheets into one, and for the matching technique itself, finding matches between two lists.
Matching names when emails differ
After the email join, a handful of walk-ins are usually registrants who used another address. A second key built from name and company catches most of them:
Name key =LOWER(TRIM([@[First name]])) & "|" & LOWER(TRIM([@[Last name]])) & "|" & LOWER(TRIM([@Company]))
Possible match? =COUNTIFS(NoShows[Name key], [@[Name key]]) > 0Add the formula to the walk-ins list and review every TRUE by hand before moving that person from no-show to attended. Don't automate it: two people with the same name at a large company are common enough to cause wrong merges.
Doing it in SQL
For large events or a series of webinars, the three lists come from two joins. This runs in DuckDB and SQLite:
-- No-shows
SELECT r.email FROM registrations r
WHERE NOT EXISTS (SELECT 1 FROM checkins c WHERE LOWER(TRIM(c.email)) = LOWER(TRIM(r.email)));
-- Walk-ins
SELECT DISTINCT LOWER(TRIM(c.email)) FROM checkins c
WHERE NOT EXISTS (SELECT 1 FROM registrations r WHERE LOWER(TRIM(r.email)) = LOWER(TRIM(c.email)));NOT EXISTS keeps each registrant once even when they checked in several times, which a plain join would not.
Common mistakes
- Exporting check-ins before the event ends, so late arrivals appear as no-shows.
- Counting speakers, staff and exhibitors in the attendance rate.
- Sending the no-show email to people who cancelled their registration — exclude cancelled tickets first.
- Treating partial webinar viewers as full attendees when reporting to sponsors.
Which method when
| Situation | Method |
|---|---|
| Single event, a few hundred people | COUNTIF and FILTER in Excel 365 or Google Sheets |
| Older Excel or a shared workbook | COUNTIF helper columns and table filters |
| A webinar series or many events | Stack the exports and use SQL or Power Query |
| Emails unreliable (badge scans, typed lists) | Email match first, then a name and company review |
Whichever you choose, keep the cleaned registration and check-in tables after the event; they're the inputs for comparing events later and for checking how many attendees became customers.
Frequently asked questions
- How do I find event no-shows?
- Match the registration list to check-ins by email; registrants with no check-in are no-shows.
- How do I calculate attendance rate?
- Divide the number of registrants who attended by the number registered.
- How do I handle webinar attendees who joined several times?
- Sum their minutes per email before joining to the registration list.
- How do I match attendees who used a different email?
- Compare names and companies for unmatched check-ins against unmatched registrations, and review likely pairs by hand.
- Should walk-ins be added to my mailing list?
- Only if they gave consent at check-in.
- How do I count unique attendees across sessions?
- Use UNIQUE on the cleaned emails of all check-ins, then COUNTA of the result.
- How do I compare attendance by ticket type?
- Count registrants and registered attendees per ticket type with COUNTIFS, then divide attended by registered for each.
- Should walk-ins be added to my mailing list?
- Only if they gave consent at check-in. Otherwise record them for attendance figures but don't add them to marketing lists.
- How do I count partial webinar attendance?
- Sum minutes per email, divide by the session length, and set a threshold, such as half the session, for counting someone as attended.