The problem.
Microsoft 365 licences are a big budget line and part of it is wasted: disabled accounts still licensed, duplicates, inactive users, misconfigured shared mailboxes.
What I built.
01
M365 License Scanner
- Standalone read-only WPF app: rule-based unused licence detection, ROI estimate, CSV and HTML export; wizard creating the App Registration through device code.
02
Licence management console
- Windows app (installer) and web UI: CSV import, audit, licence assignment and replacement, distribution lists and shared mailbox permissions, with a Simulation mode before execution.
03
Clean-up scripts
- Disabled mailboxes converted to shared, licences, access and permissions of disabled accounts removed, double licences detected.
The architecture.
TenantMicrosoft Graph · Exchange
Scannerread-only
Consolesimulate then run
Reportestimated savings
Security & guardrails.
- Scanner is read-only.
- Simulation mode before every write.
The results.
- Savings identified and disabled accounts actually cleaned up.