Microsoft 365 surfaces a lot of usage data for Teams, but it's distributed across two admin portals and the data from each tells a different part of the story. The Microsoft 365 Admin Center gives you tenant-level summaries; the Teams Admin Center goes deeper on call quality and Teams-specific activity. Knowing which report to use for which question saves a lot of time.
Microsoft 365 Admin Center Reports
The Microsoft 365 Admin Center usage reports are at Reports > Usage in the left navigation. For Teams, the relevant reports are:
Microsoft Teams activity. This is the primary adoption report. It shows active users by day/week/month, broken down by activity type: team messages, private chat messages, calls, and meetings. It also shows files uploaded and meetings and calls minutes. Available for 7, 30, 90, and 180-day windows.
Use this report to: track overall adoption trends, identify whether usage is growing or plateauing, compare activity types to understand whether Teams is being used primarily as a chat app (low governance value) or as a full collaboration platform (high governance value).
Microsoft Teams device usage. Shows which device types users are accessing Teams from: Windows, Mac, iOS, Android, web. Useful for infrastructure planning (do you need to prioritise mobile app issues?) and for understanding whether specific user populations are primarily mobile users.
Microsoft Teams user activity. Provides a per-user breakdown of the activity metrics from the Teams activity report. Each row is a user, with columns for messages sent, calls made, meetings attended, etc. This is the data source for department-level adoption analysis (join it to HR data to segment by department).
Privacy note: The per-user activity report can be anonymised in the Microsoft 365 Admin Center settings (Reports > Settings), replacing user names with random identifiers. Check whether your organisation has enabled this. If it has, you can download the data but won't be able to attribute activity to specific individuals without additional steps.
Teams Admin Center Reports
The Teams Admin Center (admin.teams.microsoft.com > Analytics & reports) provides more detailed Teams-specific data:
Teams usage report. Shows activity at the team level — how many active users each team has, how many messages were posted, and how many meetings occurred. Useful for identifying your most (and least) actively used teams. A team with 30 members but zero messages in 30 days is a candidate for a lifecycle management review.
User activity report. Per-user activity data with more detail than the M365 Admin Center version, including data on Teams Phone calls (if deployed).
App usage report. Shows which Teams apps (tabs, bots, connectors) are being used and by how many users. Useful for evaluating the ROI of app deployment decisions and for identifying apps that are installed but not used.
Meeting and call quality reports (Call Analytics / CQD). The Call Quality Dashboard and per-user Call Analytics data provide detailed information about meeting and call audio/video quality. This is a separate domain from adoption reporting — it's primarily useful for troubleshooting quality issues rather than measuring usage.
Microsoft Graph API for Custom Reporting
For organisations that need custom dashboards, scheduled automated reports, or data integrated with existing BI tools, the Microsoft Graph API exposes Teams usage data programmatically. Key endpoints:
GET https://graph.microsoft.com/v1.0/reports/getTeamsUserActivityUserDetail(period='D30')
GET https://graph.microsoft.com/v1.0/reports/getTeamsTeamActivityDetail(period='D30')
GET https://graph.microsoft.com/v1.0/reports/getTeamsDeviceUsageUserDetail(period='D30')
These return CSV files with the same data available in the Admin Center UI. Using the Graph API allows you to automate data collection and feed it into Power BI, your SIEM, or any other data platform your organisation uses for analytics.
The Microsoft Graph PowerShell SDK provides a cleaner interface for ad-hoc PowerShell queries against the same data:
Get-MgReportTeamUserActivityUserDetail -Period D30 -OutFile "TeamsUserActivity.csv"
Interpreting Adoption Metrics: What to Watch For
A few patterns worth watching in Teams usage data:
Channel messages growing faster than chat messages: A positive sign. It indicates that team-based collaboration (open channels) is increasing relative to private messaging. This is what you want — it suggests Teams is becoming the primary collaboration platform, not just a chat app.
Meeting hours growing without channel activity: A warning sign. It suggests Teams is being used for meetings but not for ongoing collaboration. Users may be attending Teams meetings while doing their asynchronous work in email or other tools.
Large discrepancy between licence count and active user count: If you have 1,000 licensed users but only 400 monthly active users, 600 people aren't using Teams at all. This warrants investigation — are they in departments where Teams hasn't been rolled out? Are they frontline workers without regular computer access? Are they using Teams on personal devices without enrolling them?
Guest user count growing faster than internal users: Not necessarily a problem, but worth monitoring. High guest user growth may indicate that Teams is becoming a primary external collaboration platform — which has governance implications (guest lifecycle management, sensitivity label enforcement, DLP coverage for external communication).
Connecting Usage Data to Governance Decisions
Usage reporting shouldn't exist in isolation from governance decisions. A few examples of how to use usage data to inform governance:
- Teams with high activity but a single owner: prioritise for owner remediation before the owner leaves
- Teams with high external user activity: verify sensitivity labels and guest access controls are appropriate for the activity level
- App usage data showing a high-install but low-use app: consider removing it from the app permission policy to reduce tenant surface area
- User activity data showing a specific department with near-zero Teams adoption: trigger a targeted adoption intervention for that department
- Teams with rising guest counts and no sensitivity label: queue them for a label decision before the sharing pattern becomes the norm.
- Users active only on the web client in a population that was issued the desktop client: check whether the install failed before treating it as a preference.
Usage data turns governance from reactive (fixing problems after they occur) to proactive (identifying governance risks before they become incidents). Build a regular reporting cadence and review it with IT leadership and the business stakeholders who own the Teams deployment.
A Report Built Once and Then Left to Rot
Usage reporting for Microsoft Teams is a recurring job or it is a screenshot. The admin center will keep collecting data either way. The governance value appears only when the same cut of the data is reviewed on a schedule by someone who can change a setting or talk to a manager.
An insurer's collaboration team built a careful report during the project: active users, channel versus chat, meetings, and a department split produced by joining the export to HR. It was presented once. Two quarters later the join was broken because HR had renamed a cost-centre field, the person who wrote the spreadsheet had moved, and leadership still quoted the original 80 percent figure. The live export, unread, showed a drop in one division after a reorganisation that had created a wave of ownerless teams. The report had not been wrong in its design. It had been allowed to become a slide.
Write the report as a definition: which export, which period, which accounts are excluded, how the department join works, and who refreshes it. Store the definition next to the file. When the HR field changes, the definition tells the next person what to edit. A spreadsheet without that note cannot be refreshed safely, and an unsafe refresh is how a dropped column becomes a silent undercount.
Use the report to trigger a specific governance action, or stop producing it. Examples that earn their keep: a team with high external participation and no label goes to the label backlog; a team with one owner and high activity goes to the owner-remediation list; a deployed app with no usage goes to the app-permission review. If no action is attached, the metric is trivia and it will lose its slot on the agenda.
Graph exports and the admin-center CSV are the same family of facts. Pick one path and automate it if the skills exist. A manual download is acceptable if it actually happens. Automation that fails closed, with a mail when the job did not run, beats a manual habit that depends on a single analyst. Either way, keep one historical file per period. Trends that are rebuilt from memory are not trends.
Label every chart with the period and the exclusion rules. An unlabelled 80 percent will be reused in the wrong month. Anonymised reports are a privacy setting, not a reason to skip department analysis. Join on a department attribute that is not a person's name if names are hidden. Call quality data belongs in a different review from adoption data. Mixing them produces a meeting that decides nothing. If the active-user definition changes, mark the break on the chart. A continuous line across a definition change is misleading. Share the row-level exceptions, not only the percentage. Managers can act on a team name. They cannot act on a tenant average. Retire a metric that has not changed a decision in two quarters. Replace it, rather than adding another tile beside it. A broken department join should fail the refresh visibly. A chart that quietly drops a division is worse than a late chart. Keep the definition of active user in the report header. The product's definition has changed before and will change again. Actions from the last review should be listed as done or not before new numbers are discussed. If automation is used, store the script with the report. A script only on a laptop will not run during that person's leave. Anonymisation does not remove the need to exclude shared accounts. Those accounts still distort the total. One historical file per month is enough. Daily extracts that nobody compares are noise.