Attendance Tracking from Microsoft Teams Report
Summary
I built this to stop matching Microsoft Teams attendance by hand. It cleans up participant names, fuzzy-matches them against the official roster, and shows the result in a Streamlit app.
Problem
Tracking attendance from Microsoft Teams used to mean lining up an attendance report against a participant database by hand.
What made it painful:
- The names in a Teams report never match the official roster
- Names come out abbreviated
- Some rows carry only a first and last name
- Others carry Teams labels like
(Unverified),(External),(guest) - Capitalization, punctuation and formatting all drift
- There was a lot of it
- 10+ classes, all handled the same way
- Several sessions per class, each with dozens of participants
- Doing it by hand is slow
- It takes hours, and mistakes are almost guaranteed
- Auditing the result is hard, and keeping it consistent is harder
So attendance became hours of work nobody should do by hand.
Solution
I wrote a Python script that: reads the Teams report, cleans the names, matches them against the roster, and totals who showed up.
graph LR
A[Upload Participant DB] --> B[Upload Teams Report]
B --> C{Process}
C --> D[Normalize Names]
D --> E[Fuzzy Match]
E --> F[Set Status]
F --> G[Download Results]
Workflow:
- Upload the participant database
- Upload the Microsoft Teams attendance report
- The system takes it from there:
- Cleans and standardizes participant names
- Applies fuzzy matching with a threshold you can tune
- Determines attendance status
- Aggregates attendance data across sessions
- You download the finished sheet.
It runs as a Streamlit web application, so the people who actually need it never touch Python.
![]()
![]()
Impact
Work that took an evening now finishes in minutes, and the numbers are consistent across classes. I have reused it across 10+ classes without changing the workflow:
- β±οΈ Time back
- Name matching runs on its own now
- π Fewer mistakes
- Name matching is standardized and consistent
- π Clean, structured attendance data
- Easier to analyze, report and audit
- π Reusable
- Runs across multiple classes with no workflow changes
- πΌ Ready for real use
- Fits Edu-Tech programs, training programs and stakeholder reporting
Tech Stack
- Python
- Pandas for data processing and aggregation
- RapidFuzz for fuzzy string matching
- Regex (re) for text preprocessing and normalization
- Streamlit for the web interface
- Microsoft Teams attendance report as the data source
Extras (Optional)
- The fuzzy matching threshold is configurable, so it adapts to how messy the data is
- Parsing, matching, and reporting live in separate modules, so I could retune the threshold without touching the rest
- What Iβd add next:
- CSV / Excel export
- Analytics dashboard
- Direct database or LMS integration
- Automated attendance reporting
- The threshold is the part I would not trust blindly. I still set it by eye on each new dataset, and a truly messy name list will fool it at any threshold.