Skip to main content

PresifyversusPowerShell script

Presify vs a PowerShell Teams presence script

A PowerShell script against the Graph presence API is the DIY way to track Teams status history. How it compares to a maintained presence tracker.

The Presify team5 min read

Start free trial

Quick answer

A script does exactly what you build, and nothing you do not build. A maintained tracker handles capture, storage, analysis, access, and retention for you.

A script is the cheapest path to a single answer. A maintained tracker earns its keep when the history has to be there later, with roles, an audit trail, and bounded retention.

A PowerShell script against the Microsoft Graph presence API is the free, do-it-yourself way to record Teams status history, and it fits a one-off answer. Presify is a maintained presence tracker that captures, stores, and reads that same presence for you, with roles, an audit trail, and retention built in.

A script is the natural first move for an admin: Microsoft Graph exposes a presence endpoint, so you can poll it on a schedule and write the results somewhere. A script is a genuinely good answer for some situations. The rest of this guide is an honest look at where it shines and where a maintained presence tracker like Presify earns its place.

What does a PowerShell presence script actually do?

A typical PowerShell presence script signs in to Graph and reads the presence of a set of users on an interval. The script appends each reading to a CSV or an HTML report, and with enough effort you can chart it, schedule it, and scope it to a group.

Graph can return the presence of many users in one request. A script that polls a whole team also has to handle Graph throttling, when Graph answers 429 Too Many Requests and asks the caller to wait.

The script's value and its limit are the same thing: it does exactly what you build, and nothing you do not build.

Side by side

PowerShell script DIY

Runs where you run it; misses samples if that machine is off.

Presify Maintained

One read-only Microsoft sign-in

AvailableAwayBusyOffline

Runs continuously as a managed service.

CriterionPowerShell scriptPresify
CostFree to writePaid subscription, with a free trial
Capture reliabilityRuns where you run it; misses samples if that machine is offRuns continuously as a managed service
StorageYou own the filesStored, queryable history
Timelines and online timeYou build the chartsBuilt in, per person and per team
Flags for presence that looks gamedNone unless you write the pattern analysisBuilt in (one on Standard, all six on Pro and up)
Access controlNone unless you build itRole-based: owner on every plan; additional admins and scoped monitors on Pro and up
Audit trailNone unless you build itAppend-only audit log (viewable and exportable on Pro and up)
Retention and deletionManualPlan-based retention, per-user and workspace-wide delete
ScopingEasy to over-collect by accidentGuests never tracked, group scoping, and people whose directory location is set to the EEA, the UK, Switzerland, or Canada excluded automatically
MaintenanceYours foreverOurs

When the script is the right call

  • You have a one-off question and a quick CSV answers it.
  • You are comfortable in PowerShell and Graph, and you enjoy owning the plumbing.
  • It is a small number of people and you do not need retention, roles, or an audit trail.

There is nothing wrong with the script in those cases. It is the cheapest path to a single answer.

When a maintained tracker earns its keep

  • You need the history to be there later, captured reliably without babysitting a scheduled task.
  • You want to know whether anyone's presence looks gamed. A mouse jiggler keeps Teams green. Surfacing presence that looks gamed takes pattern analysis across days (unbroken Available stretches, no idle time, status changes at unusually even intervals), not a CSV of samples.
  • More than one person needs access, which means roles and an audit trail start to matter (additional admins, scoped monitors, and the viewable audit log are on Pro and up).
  • You want presence turned into timelines and online-time trends without building the analysis yourself.
  • You want to ask about it in plain language from the AI assistant you already use, with the same read-only permissions as the app.
  • You care about doing this carefully: bounded retention, easy deletion, read-only scope, and not accidentally collecting the whole directory.
Start free trial

Past that line, the script's "you build everything" becomes a cost rather than a feature. A service that handles capture, storage, analysis, access, and retention then pays for itself.

All comparisons

What Presify is: a Microsoft Teams presence tracker

Presify reads Teams presence through the same Graph presence API on a short, regular interval and stores each change. Presify shows you who's online, when, and for how long, per person and per team. The same history shows the other side of the green dot too. Someone who always looks yellow might be doing their best work at 11pm, and the 24-hour day view shows those hours online.

On Pro and up, six automatic flags run, and each one shows how it’s calculated. Four (unbroken Available, no idle time, robotic regularity, no activity variation) are the patterns a mouse jiggler or keep-alive script tends to leave. Two (overnight presence, weekend uniformity) mark unusual hours that can just as easily be someone working late. Standard runs the Idle suppression flag; Basic and the free trial run none.

A flag is a pattern worth a look, not proof, which is the right posture whether you use a script or a tool.

Setup is one read-only Microsoft sign-in, about five minutes, with nothing installed on anyone's device. Presify is built and hosted in the US, tenant-isolated, and trims history automatically by plan. The people you track can be in most countries except the European Economic Area, the UK, Switzerland, and Canada. People whose Microsoft 365 directory location is set to one of those are excluded automatically.

Wherever your people are, tell them their Teams presence is tracked before you start, and handle any consent or lawful basis local law requires. Some US states require advance written notice, and Presify includes a ready-to-adapt employee-notice template.

A read-only connector built on the open Model Context Protocol (MCP) lets Claude, ChatGPT, Microsoft Copilot (through Copilot Studio), and other MCP clients answer questions in plain language. The connector is on every plan and covers presence history, online time, flags, and coverage; flag and coverage answers follow your plan. It sees only what the signed-in person can already see in Presify and can be revoked at any time. Connections are recorded in the audit log (viewable on Pro and up), and the AI assistants guide covers setup.

The Presify dashboard: Online now, Avg online and Open anomalies tiles above the Presence timeline, one 24-hour bar per member with online time and time zone.
The dashboard, sample data.

Setup takes about five minutes.

One read-only Microsoft sign-in by a Microsoft 365 admin, nothing installed on anyone’s device. Presence is sampled on a short, regular interval, and the history builds from the moment you connect.

  1. Minute 0An admin connects Microsoft
  2. Minute 2Pick who to track
  3. Minute 5The history starts building
  4. Day 7Your first full week to read

If the DIY script has stopped scaling, see how Presify works or start with one Microsoft sign-in. If you want the broader picture first, the guide to seeing Teams status history walks through every option.

See the pattern behind the green dot.

If the everyday question is yours, start with one Microsoft sign-in. About five minutes, nothing to install, and the history starts building.

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.