Type something to search...

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:

  1. Upload the participant database
  2. Upload the Microsoft Teams attendance report
  3. 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
  4. 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.