Need Help with extracting Microsoft Teams Presence Data

Danish Rizvi 20 Reputation points
2025-07-02T18:59:11.7766667+00:00

I’m trying to extract Microsoft Teams presence status for each employee in the company, specifically to track how often and how long someone’s status is Active, Away, In a Meeting, Be Right Back, etc.

I attempted to use the Graph API endpoint: https://graph.microsoft.com/v1.0/me/presence

However, the response returns a blank string. Other endpoints like Call Records and Chat Messages are working as expected.

Someone please guide me if there is a different or elevated permission required to retrieve presence data for all users?

Microsoft Teams | Development
Microsoft Teams | Development

Building, integrating, or customizing apps and workflows within Microsoft Teams using developer tools and APIs

0 comments No comments

Answer accepted by question author
Teddie-D 19,760 Reputation points Microsoft External Staff Moderator
2025-07-03T05:51:35.8533333+00:00

Hi @Danish Rizvi 

Thank you for posting your question in the Microsoft Q&A forum. 

Based on my research, the Microsoft Graph API allows you to retrieve a user's current presence status using: 

GET https://graph.microsoft.com/v1.0/users/{userID}/presence

or

GET https://graph.microsoft.com/v1.0/communications/presences/{userID}

Currently, there is no such Graph API available to track how often and how long someone’s status is. 
To retrieve presence information for users other than yourself, your application must be granted application-level permissions, such as Presence.Read.All or Presence.ReadWrite.All, through Microsoft Entra ID.   
User's imageYou can read more at Microsoft Graph permissions reference - Microsoft Graph | Microsoft LearnUser's image

I hope this helps. 
If you have further concerns, please feel free to reach me out.


If the answer is helpful, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".   

Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

Was this answer helpful?


1 additional answer

Sort by: Most helpful
  1. Philipp König - SSIG-IT GmbH 0 Reputation points
    2026-06-16T19:47:03.99+00:00

    Two things to clarify, since this comes up a lot:

    1. /me/presence returns the signed-in user's presence; for other users you need /users/{id}/presence or the batch POST /communications/getPresencesByUserId plus Presence.Read.All Application Permission with admin consent in Entra ID. The blank response usually means missing/unconsented permissions.
    2. Important caveat on historical tracking: Microsoft has explicitly stated (and /r/sysadmin discussions confirm) that presence is not designed as a productivity metric – it's frequently inaccurate (away from mouse ≠ away from work). In the EU, monitoring this can run into works-council and worker-protection regulations.

    If your goal is live availability visibility (not historical tracking), a hosted dashboard works well: TeamsDashboard (teamsdashboard.com) reads Graph presence + status messages and shows them filterable by department/location, with 15-sec refresh and a no-login kiosk URL. EU-hosted, GDPR-clean, which matters for the use case you described. 14-day trial.

    For historical logging, plan it carefully with legal/HR – the technical part is the easy bit.

    Was this answer helpful?

    1 person found this answer helpful.
    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.