I'm trying to get a list of all groups in a tenant, but only groups that actually have members are relevant to me. The documentation (use of $count in $filter) (supported objects in advanced queries) seems to vaguely imply i can filter based on members of a group. however, the query gives me an error.
This is the query i tried
GET https://graph.microsoft.com/v1.0/groups?$filter=members/$count ge 1
however, this gives me the following error:
"error": {
"code": "Request_UnsupportedQuery",
"message": "Property 'members' does not exist as a declared property or extension property."
}
Is there any way i can do this with a filter? or do i have to check with a seperate request for every group if it has members?
AFAIK, there is no direct filter to retrieve groups having at least 1 member.
When I ran your query in Graph Explorer, I too got same error as below:
GET https://graph.microsoft.com/v1.0/groups?$filter=members/$count ge 1
Response:
Alternatively, you can make use of below Python code by formatting the /groups
response to retrieve groups having at least 1 member:
import requests
access_token = "token"
groups_api_url = "https://graph.microsoft.com/v1.0/groups"
headers = {
"Authorization": f"Bearer {access_token}",
}
response = requests.get(groups_api_url, headers=headers)
if response.status_code == 200:
groups = response.json().get("value", [])
for group in groups:
group_id = group['id']
members_api_url = f"https://graph.microsoft.com/v1.0/groups/{group_id}/members"
members_response = requests.get(members_api_url, headers=headers)
if members_response.status_code == 200 and members_response.json().get("value", []):
print(f"Group ID: {group_id}, Group Name: {group['displayName']} has at least one member")
else:
print(f"Error: {response.status_code} - {response.text}")
Response: