Attendance Tracking from Microsoft Teams Report
Summary
I built this to stop matching Microsoft Teams attendance by hand. It normalizes participant names, fuzzy-matches them against the official database, and hands the result to a Streamlit web application.
Problem
Tracking attendance from Microsoft Teams used to mean lining up an attendance report against a participant database by hand.
What made it painful:
- Participant names never agree with each other
- People get abbreviated
- Some show up as a first name and last name only
- Some arrive with extra 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 close to guaranteed
- Auditing the result is hard, and keeping it consistent is harder
So attendance tracking turned into a bottleneck: a lot of time spent on something nobody should have to do by hand.
Solution
I built an attendance synchronization and matching system in Python. It:
- Ingests Microsoft Teams attendance reports
- Preprocesses and normalizes participant names
- Matches participants against the official database using fuzzy string matching
- Generates attendance summaries on its own (present/absent plus statistics)
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
- Download the results. No manual cleanup afterwards.
It runs as a Streamlit web application, so the people who actually need it never touch Python.
Impact
- β±οΈ Time back
- Work that took hours now takes seconds
- π 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
- The code is split into modules, which makes it easy to extend
- 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 badly written name list will beat it wherever you put it.