On this page
Microsoft Teams shows you a colored dot next to each person: green for available, yellow for away, red for busy, gray for offline. What it does not show you is history. There is no built-in way to ask "what was this person's status yesterday afternoon," or "how much of last week was this team actually available."
The missing history matters more than it looks, because even the status you can see isn't the whole story. Someone can stay green all day and barely be around (a mouse jiggler keeps Teams green). Someone who always looks yellow when you check might be doing their best work in the evening. Only the history shows the pattern behind each.
You might be the IT admin who gets asked for it or the manager who wants it. Either way, here is the honest landscape of your options and what each one can and cannot do.
Why doesn't Teams keep status history?
Teams doesn't keep status history because presence is designed to answer one question in the moment: is this person available right now. The status is computed live from calendar, calls, and activity, and it is not stored as a timeline you can query later.
The Microsoft 365 admin center does have a Teams user activity report, but that is a different thing. It counts actions (messages sent, meetings attended, calls) and shows each user's last activity date. It does not record presence status (available, away, busy, offline) over time. So the admin report tells you that someone used Teams on a given day, not whether they showed as available at 2pm on Tuesday.
To get presence history, something has to capture it as it happens and store it. There are three common ways to do that.
Option 1: A PowerShell script against the Graph presence API
Microsoft Graph exposes a presence endpoint, and you can write a PowerShell script that reads it on a schedule and writes the results to a file or a spreadsheet.
This is the cheapest way to start, and for a one-off question it can be enough. The trade-offs:
- It runs wherever you run it. If your laptop is asleep, it is not sampling.
- You own the storage, the formatting, the charts, and the maintenance.
- There is no access control, retention policy, or audit trail unless you build it.
- It is easy to point at the whole directory by accident, which is exactly the kind of over-collection you usually want to avoid.
If you want to see the script-versus-tool trade-off in detail, we wrote a side-by-side comparison.
Option 2: A real-time presence dashboard
Several tools show a live grid of who is available right now across your tenant. These are useful for a help desk or a front desk. Most of them are real-time only, though: they answer "who is available now," not "what did availability look like over the last month." Check whether a dashboard actually retains history before you rely on it for trends.
Option 3: A tool that polls and stores the history for you
The category that actually answers the history question is a service that reads the Graph presence API on a regular schedule and stores each change. It turns that record into timelines and trends. When you evaluate one, the questions that matter are:
- Is it read-only? It should read presence and basic directory fields, 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 and per-user and workspace-wide deletion.
- Who can see it? Role-based access and an audit log matter once more than one person has access.
- Does it flag presence that looks gamed? A status that looks artificially held green only stands out in the history. Look for flags that surface the patterns a mouse jiggler or keep-alive script tends to leave, and that show how each one 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.
How Presify does it
Presify is a Microsoft Teams presence tracker built for exactly this question. It samples Teams presence through the Microsoft Graph presence API on a short, regular interval, stores each change, and keeps up to a year of history, depending on your plan. From that it builds, per person and per team:
- The timeline. Who was online, when, and for how long, with every status change on a 24-hour day view.
- Online-time totals and trends. How much each person is online, week over week.
- Flags for 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.

A few things we are deliberate about:
- Five minutes, nothing installed. Setup is one read-only Microsoft sign-in by an admin, about five minutes. There is nothing to install on anyone's device. History builds from that point on, because Teams keeps none to import.
- 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.
- 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.
A word on reading it fairly
Presence history is useful, but it describes what someone's status showed, not why, and presence isn't productivity. Read it as a directional view of when people are online and how much, and treat anything surprising as a starting point for a conversation. Tell your team that presence is being kept. Some states also have electronic-monitoring notice laws, such as Connecticut's prior written notice requirement; check with counsel whether one applies to you. Every flag in Presify shows how it's calculated, so you can check the pattern before you judge.
If presence history is something you need on an ongoing basis, see how Presify works, compare plans, or start with one Microsoft sign-in. Setup takes about five minutes.
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