The cloud suite exposes a great deal of usage data for Teams, but it's spread across two admin portals, and each one tells a different slice of the story. the Admin Center gives you tenant-level summaries; the Teams Admin Center digs deeper into call quality and Teams-specific activity. Knowing which report answers which question saves a lot of time.
the Admin Center's Reports
You'll find the Admin Center usage reports under Reports > Usage in the left navigation. For Teams, the reports that matter are:
Teams activity. This is the main adoption report. It shows active users by day/week/month, split by activity type: team messages, private chat messages, calls and meetings. It also covers files uploaded and meeting and call minutes. Offered over 7, 30, 90 and 180-day windows.
Reach for this report to: track overall adoption trends, see whether usage is growing or levelling off, and compare activity types to understand whether Teams is being used mainly as a chat app (low governance value) or as a full collaboration platform (high governance value).
Teams device usage. Shows the device types users reach Teams from: Windows, Mac, iOS, Android, web. Handy for infrastructure planning (do you need to prioritise mobile app issues?) and for seeing whether particular user groups are mostly mobile users.
Teams user activity. Gives 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, and so on. 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 Admin Center settings (Reports > Settings), swapping user names for random identifiers. Check whether your organisation has switched this on. If it has, you can still download the data but won't be able to pin activity to specific individuals without extra steps.
Teams Admin Center's Reports
The Teams Admin Center (admin.teams.example.com > Analytics & reports) offers finer-grained 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 took place. Handy for spotting your most (and least) actively used teams. A team of 30 members with zero messages in 30 days is a candidate for a lifecycle management review.
User activity report. Per-user activity data with finer detail than the cloud suite Admin Center version, including data on Teams Phone calls (where deployed).
App usage report. Shows which Teams apps (tabs, bots, connectors) are in use and by how many users. Handy for weighing the ROI of app deployment decisions and for flagging apps that are installed but unused.
Meeting and call quality reports (Call Analytics / CQD). The Call Quality Dashboard and per-user Call Analytics data give detailed information on meeting and call audio/video quality. This sits in a separate domain from adoption reporting — it's mainly useful for troubleshooting quality problems rather than measuring usage.
Using the Graph API for Custom Reporting
For organisations needing custom dashboards, scheduled automated reports, or data folded into existing BI tools, the Graph API exposes Teams usage data programmatically. The key endpoints:
GET https://graph.api.example/v1.0/reports/getTeamsUserActivityUserDetail(period='D30')
GET https://graph.api.example/v1.0/reports/getTeamsTeamActivityDetail(period='D30')
GET https://graph.api.example/v1.0/reports/getTeamsDeviceUsageUserDetail(period='D30')
These return CSV files carrying the same data you'd see in the Admin Center UI. Going through the Graph API lets you automate data collection and feed it into Power BI, your SIEM, or whatever other data platform your organisation uses for analytics.
The Graph PowerShell SDK offers a tidier interface for ad-hoc PowerShell queries against that same data:
Get-MgReportTeamUserActivityUserDetail -Period D30 -OutFile "TeamsUserActivity.csv"
Reading Adoption Metrics: What to Look For
A handful of patterns worth watching for in Teams usage data:
Channel messages growing faster than chat messages: A positive sign. It points to team-based collaboration (open channels) rising relative to private messaging. This is what you're after — it suggests Teams is becoming the primary collaboration platform, not merely a chat app.
Meeting hours growing without channel activity: A warning sign. It suggests Teams is being used for meetings but not for day-to-day collaboration. Users may sit in 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 ones, then 600 people aren't touching Teams at all. This deserves investigation — are they in departments where Teams hasn't rolled out yet? 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 keeping an eye on. Rapid guest user growth may signal that Teams is turning into a primary external collaboration platform — which carries governance implications (guest lifecycle management, sensitivity label enforcement, DLP coverage for external communication).
Tying Usage Data Back to Governance Decisions
Usage reporting shouldn't sit in isolation from governance decisions. A few examples of putting usage data to work in governance:
- Teams with high activity but only one owner: prioritise them for owner remediation before that owner leaves
- Teams with heavy external user activity: confirm the sensitivity labels and guest access controls suit the activity level
- App usage data showing an app with high installs but low use: consider dropping it from the app permission policy to shrink tenant surface area
- User activity data showing one department with near-zero Teams adoption: trigger a targeted adoption intervention for that department
- Teams with climbing guest counts and no sensitivity label: queue them for a label decision before that sharing pattern becomes the norm.
- Users active only on the web client within a group that was issued the desktop client: check whether the install failed before writing it off as a preference.
Usage data shifts governance from reactive (patching problems after they happen) to proactive (catching governance risks before they become incidents). Set up 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 Gather Dust
Usage reporting for Teams is either a recurring job or a screenshot. The admin center will keep gathering data regardless. The governance value only shows up when the same cut of the data is reviewed on a schedule by someone able to change a setting or speak to a manager.
An insurer's collaboration team put together a careful report during the project: active users, channel versus chat, meetings, and a department split made by joining the export to HR. It got presented once. Two quarters on, the join was broken because HR had renamed a cost-centre field, the person who built the spreadsheet had moved on, and leadership was still quoting the original 80 percent figure. The live export, unread, showed a drop in one division after a reorganisation that had spawned a wave of ownerless teams. The report's design hadn't been wrong. It had simply been allowed to decay into a slide.
Write the report up as a definition: which export, which period, which accounts are excluded, how the department join works, and who refreshes it. Keep the definition alongside the file. When the HR field changes, the definition tells the next person what to edit. A spreadsheet without that note can't be refreshed safely, and an unsafe refresh is how a dropped column turns into a silent undercount.
Use the report to trigger a specific governance action, or stop making it. Examples that pull their weight: a team with heavy external participation and no label goes onto the label backlog; a team with one owner and high activity goes onto the owner-remediation list; a deployed app with no usage goes to the app-permission review. With no action attached, the metric is trivia and it will forfeit its place on the agenda.
Graph exports and the admin-center CSV are the same family of facts. Choose one path and automate it where the skills allow. A manual download is fine as long as it genuinely happens. Automation that fails closed — sending a mail when the job didn't run — beats a manual habit resting on a single analyst. Either way, keep one historical file per period. Trends rebuilt from memory aren't trends.
Tag every chart with the period and the exclusion rules. An unlabelled 80 percent will get reused in the wrong month. Anonymised reports are a privacy setting, not grounds to skip department analysis. Where names are hidden, join on a department attribute that isn't a person's name. Call quality data belongs in a separate review from adoption data. Blending the two gives you a meeting that decides nothing. When the active-user definition changes, mark the break on the chart. A continuous line spanning a definition change misleads. Share the row-level exceptions, not just the percentage. Managers can act on a team name. They can't act on a tenant average. Retire a metric that hasn't shifted a decision in two quarters. Swap it out rather than tacking another tile beside it. A broken department join should fail the refresh visibly. A chart that silently drops a division is worse than a late chart. Keep the active-user definition in the report header. The product's definition has changed before and will change again. Log the actions from the last review as done or not before new numbers come up. Where automation is used, store the script alongside the report. A script living only on a laptop won't run during that person's leave. Anonymisation doesn't remove the need to exclude shared accounts — those accounts still skew the total. One historical file per month is plenty. Daily extracts nobody compares are just noise.