Skip to main content
How-to

How to get a Microsoft Teams presence report

How to get a Microsoft Teams presence report: who was online, when, and for how long. A PowerShell export vs a presence tracker that keeps the history.

On this page

Someone asks you for a "Teams presence report" and the first problem is the phrase means different things to different people. Pin down what the report needs to show before you go looking for a tool, because that decides which option fits.

In practice a presence report answers four questions about a set of people over a window of time. It covers who was available, away, busy, or offline, when each state started, how long it lasted, and (often) how that adds up into online-time totals or trends. A single colored dot in the Teams roster answers none of that. It tells you the state right now and nothing about the past.

Even the status it does show isn't the whole story. Someone can stay green all day and barely be around (a mouse jiggler keeps Teams green). Someone who looks yellow every time you check might be doing their best work in the evening. The report exists to replace the glance with the pattern.

So the real question is not "where is the report button," it is "what is going to capture presence over time and turn it into something readable." Here are the honest options.

What do the Microsoft 365 reports give you?

The Microsoft 365 reports give you activity counts, not presence. The Microsoft 365 admin center has a Teams user activity report, and it is the first place people look. It counts activity (messages sent, meetings attended, calls) and shows the last date each user was active.

What it does not contain is presence status over time. "Active on Tuesday" is not the same as "available at 2pm on Tuesday." If your report needs the available / away / busy / offline timeline, the activity report is the wrong source. It was built to measure adoption, not presence.

The missing presence timeline is why the other two options exist. Both rely on the same fact: presence has to be captured as it changes and stored, because Microsoft does not keep it for you.

Option A: A PowerShell export against the Graph presence API

Microsoft Graph exposes a presence endpoint, and you can script against it. A scheduled PowerShell job reads presence for a list of users, then appends the results to a CSV or a spreadsheet you can chart later.

A script is the right call for a genuine one-off. If you need a single snapshot and never again, do not buy anything. The trade-offs land when the question becomes recurring:

  • It only samples when the machine running it is awake. A laptop that sleeps has gaps in the data.
  • You own all of it: the storage, the deduplication, the charts, the formatting, and the upkeep when the script breaks.
  • There is no access control, retention policy, or audit trail unless you build one.
  • It is easy to point at the entire directory by accident, which is exactly the over-collection you usually want to avoid.

We walk through that build-and-maintain reality in the PowerShell vs a tool comparison. The short version: the script is cheap to start and expensive to keep.

Option B: A maintained tool that captures, stores, and visualizes

The category that actually produces an ongoing report is a service that reads the Graph presence API on a schedule and stores each change. It turns the result into timelines and totals you can open and share. The cost moves from your time to a subscription. When you evaluate one, the questions that matter:

  • Is it read-only and scoped? It should read presence and the basic directory fields it needs to label people, nothing more. No message content, no files, no screenshots.
  • Does it need an agent? A Graph-based tool needs a one-time admin consent and no software on anyone's device.
  • What does it retain, and can you delete it? Look for a clear retention window plus per-user and workspace-wide deletion.
  • Who can read the report? Role-based access and an audit log matter the moment more than one person has access.
  • Does it flag presence that looks gamed? A status can be held green artificially. A tool that keeps history can flag the patterns a mouse jiggler or keep-alive script tends to leave, and it should show how each flag is calculated.

See your team's history, not one moment

Connect Microsoft once and Presify starts keeping every status change from that point on, on a full 24-hour timeline per person.

Start free trial Free 7-day trial on your own account · no credit card

Which option should you pick?

Pick the PowerShell export for a one-off snapshot and a maintained tool for a recurring report. A quick way to choose:

QuestionPowerShell exportMaintained tool
One-off snapshot vs ongoingFine for one-offBuilt for ongoing
Who maintains itYou doThe vendor
Retention and deletionYou build itConfigured for you
Roles and audit trailYou build itBuilt in
Charts and timelinesYou build itOut of the box

The deciding factor is usually cadence. If you need the report once, the script wins on cost. The maintained option wins on everything the table lists once the report recurs, more than one person reads it, or a manager should see only their own team.

How Presify produces this report

Presify is a Microsoft Teams presence tracker, and this report is what it is built to produce. It samples Teams presence through the Microsoft Graph presence API on a short, regular interval, stores each change, and keeps the history. From that it builds the report per person and per team:

  • Who was online, when, and for how long. A presence timeline for each person and every status change on a 24-hour day view. Online-time totals and trends run over weeks, with up to a year of history depending on your plan.
  • Presence that looks gamed. Six automatic flags surface unusual presence patterns. Four (unbroken Available, no idle, robotic regularity, no activity variation) are the patterns a mouse jiggler or keep-alive script tends to leave. Overnight presence and weekend uniformity mark unusual hours, which can just as easily be someone working late. Each flag shows how it's calculated, and which flags are included depends on your plan.
  • Exportable. On the Standard plan and above, the report exports to PDF or Excel, and every member's flags to one CSV, when you need to hand it on. On every plan, one person's status history downloads as a CSV.

Setup is one read-only Microsoft sign-in by an admin, about five minutes, and the history builds from that point on.

Page one of a Presify PDF presence scorecard for one member: facts, KPI boxes and a day-by-day 24-hour bar with totals.
The PDF scorecard, one member per report (Standard and up). Sample data.

A few more things we are deliberate about:

  • Read-only and minimal. Presify reads presence plus the basic directory fields it needs to label and scope users. It never touches message content, chats, calls, files, or calendars.
  • Nothing installed. No agent on anyone's device, no screenshots, no keystroke logging.
  • Tenant-isolated and US-based. Your data is scoped to your Microsoft tenant and processed on US infrastructure.
  • Bounded retention you control. History is trimmed automatically by your plan, and per-user and workspace-wide deletion are built in.

Two limits worth stating plainly. First, guest users are never tracked, and Presify does not enroll users whose Microsoft 365 location is in the EEA, the UK, Switzerland, or Canada. The report covers your in-scope users only.

Second, presence describes what someone's status showed, not why. Presence isn't productivity: the report is a directional read on when people are online and how much, and a starting point for a conversation. Every flag shows how it's calculated for the same reason.

Tell people before you start. That is our recommendation everywhere; separately, some states have electronic-monitoring notice laws, such as Connecticut's, and your counsel can confirm whether one applies.

For background on reading the past at all, start with our guide to how to see Teams status history. For the setup-to-report steps, see the Teams online status report page. When you are ready to compare what each plan retains, see /pricing.

If a presence report is something you need on a regular basis, see how Presify works or start with one Microsoft sign-in. Setup takes about five minutes, with nothing to install.

Start keeping the history

Teams keeps none of its own. Presify starts yours today.

One read-only Microsoft sign-in by an admin, about five minutes, and every status change is kept from then on, for up to a year, depending on your plan.

Free 7-day trial · no credit card · nothing to install · five-minute setup

All guides

See the pattern behind the green dot.

History starts the day you connect. Connect today and next week you'll have a full week to read.

The free trial tracks just you. Add your team on any paid plan.

Payments are processed by Stripe. Cancel anytime; access continues to the end of the paid period.