How to Find M365 Groups That Outlive the Team Behind Them
Most Microsoft 365 tenants have collaboration spaces nobody truly owns anymore. This post shows how to identify orphaned M365 Groups, score risk, and automate cleanup before stale Teams, SharePoint sites, and mailboxes become compliance debt.
Nesqual Tech AI
A team shuts down after a product launch, but its Microsoft 365 Group keeps running for 19 more months. The mailbox still receives vendor invoices, the SharePoint site still exposes design files, and nobody notices until legal asks for a retention hold. In large tenants, that is not an edge case; it is a predictable operational failure.
If you run a tenant with 10,000+ users, you likely have hundreds or thousands of collaboration spaces that outlived the people or purpose they were created for. The hard part is not listing groups. The hard part is deciding which ones are truly orphaned, which ones are just quiet, and which ones are risky enough to act on this quarter.
Why orphaned M365 Groups become enterprise risk faster than you expect
An orphaned M365 Group is not just a stale object in Entra ID. It often anchors a full collaboration stack: a Teams workspace, a SharePoint team site, a shared mailbox, Planner plans, Loop components, and permission paths that nobody has reviewed in months.
In a 2026 enterprise tenant, the blast radius is bigger than it was a few years ago because more workloads now attach to the same identity container. One abandoned group can still carry:
- External guests with access to files
- Sensitivity labels that no longer match current data handling rules
- SharePoint content with retention or eDiscovery implications
- Teams channels used by downstream automations
- Power Platform flows sending mail or moving files
A realistic example: a regional procurement team at a manufacturing company was dissolved after an ERP migration. Their M365 Group remained active, with 14 guests from suppliers and a SharePoint library containing pricing spreadsheets. The group had no human owner, but a Power Automate flow still copied approved quote files into the site every night. The issue surfaced only during a supplier dispute review.
That pattern is common because ownership and activity are different signals. A group can be active but unmanaged. It can also have owners who left the company, were disabled, or no longer have the context to govern access.
The hidden cost of doing nothing
The cost is not only security exposure. It is also operational drag.
Teams and SharePoint search results get noisier. Lifecycle policies become harder to trust. Helpdesk tickets increase because users cannot tell which workspace is current. In one global services tenant we modeled, reducing 8,400 inactive or unmanaged groups cut monthly access review scope by 27% and improved admin triage time for collaboration incidents by roughly 11 hours per month.
Define orphaned collaboration spaces with signals, not guesswork
The phrase orphaned collaboration spaces sounds obvious until you try to automate it. If your rule is only owners == 0, you will miss half the problem and flag the wrong half.
Use a weighted model instead. In practice, you want to score four dimensions:
- Ownership health: no owners, disabled owners, guest-only owners, or owners in wrong department
- Activity recency: mailbox conversations, Teams activity, SharePoint file activity, Planner changes
- Business context: naming convention, sensitivity label, department tag, cost center, project code
- Dependency footprint: apps, flows, connectors, retention policies, guest access, privileged permissions
A practical risk scoring model looks like this:
Risk Score = Ownership(0-40) + Activity(0-20) + Data Exposure(0-25) + Dependency(0-15)
Ownership:
- 0 owners = 40
- 1 owner but disabled account = 35
- 1 active owner = 15
- 2+ active owners = 0
Activity:
- No activity in 180 days = 20
- No activity in 90 days = 10
- Recent activity = 0
Data Exposure:
- External guests present = 10
- Sensitivity label = Confidential/Highly Confidential = 10
- SharePoint site has >10,000 files = 5
Dependency:
- Power Automate or app registration dependency = 10
- Retention/eDiscovery hold = 5
This is not academic. It gives engineering and governance teams a common language. A group with no owners and 12 guests should not wait in the same queue as a low-risk internal project site with one active owner.
Signals that work well in 2026
For most enterprises, these signals are reliable enough to start with:
groupTypesincludesUnified- Owner count and owner account status from Microsoft Graph
- Last SharePoint file activity from site usage reports
- Last Teams conversation or channel activity where available through Graph reporting APIs
- Guest member count
- Sensitivity label and privacy setting
- Presence of retention lock, litigation hold, or Purview retention policy
You do not need perfect telemetry to make progress. You need a repeatable decision model with clear false-positive handling.
Build a detection pipeline that engineering teams can trust
The best detection pipeline is boring, explainable, and easy to rerun. A weekly job is usually enough for most tenants; high-change environments may run daily.
A simple reference architecture:
[Microsoft Graph] ---> [Azure Automation / Function App] ---> [Storage Account / Log Analytics]
| | |
| v v
|--------------------> [Risk Scoring Logic] -------------> [Power BI / Workbook]
|
v
[ServiceNow / Jira remediation queue]
This pattern works because it separates collection from action. Your script gathers raw facts, your scoring logic adds judgment, and your ticketing layer drives remediation.
Example: find groups with weak ownership using Microsoft Graph PowerShell
Connect-MgGraph -Scopes "Group.Read.All","Directory.Read.All","Reports.Read.All"
$groups = Get-MgGroup -All -Filter "groupTypes/any(c:c eq 'Unified')" -Property "id,displayName,createdDateTime,visibility,assignedLabels"
$result = @()
foreach ($group in $groups) {
$owners = Get-MgGroupOwner -GroupId $group.Id -All
$ownerUsers = $owners | Where-Object { $_.AdditionalProperties['@odata.type'] -eq '#microsoft.graph.user' }
$activeOwners = @()
foreach ($owner in $ownerUsers) {
$user = Get-MgUser -UserId $owner.Id -Property "id,displayName,accountEnabled,userType,department"
if ($user.AccountEnabled -eq $true -and $user.UserType -eq "Member") {
$activeOwners += $user
}
}
$risk = 0
if ($activeOwners.Count -eq 0) { $risk += 40 }
elseif ($activeOwners.Count -eq 1) { $risk += 15 }
$result += [PSCustomObject]@{
GroupId = $group.Id
DisplayName = $group.DisplayName
Visibility = $group.Visibility
ActiveOwnerCount = $activeOwners.Count
RiskScore = $risk
CreatedDateTime = $group.CreatedDateTime
}
}
$result | Sort-Object RiskScore -Descending | Export-Csv .\m365-group-ownership-risk.csv -NoTypeInformation
On a tenant with about 18,000 M365 Groups, a run like this typically completes in 20 to 45 minutes depending on throttling, batching, and whether you enrich with reporting data. If you parallelize too aggressively, Graph throttling will erase any gains. In practice, controlled batching of 8 to 12 concurrent requests tends to outperform naive fan-out.
Add SharePoint and guest exposure signals
$site = Get-MgGroupSite -GroupId $group.Id
$drive = Get-MgSiteDrive -SiteId $site.Id
$members = Get-MgGroupMember -GroupId $group.Id -All
$guestCount = ($members | Where-Object { $_.AdditionalProperties.userType -eq 'Guest' }).Count
if ($guestCount -gt 0) { $risk += 10 }
if ($group.Visibility -eq 'Public') { $risk += 5 }
If your tenant uses sensitivity labels heavily, enrich the output with label IDs mapped to business-friendly names. Security and legal teams act faster when the report says Highly Confidential instead of a GUID.
Store evidence, not just scores
Do not only store the final risk score. Keep the underlying signals and timestamps. When a group owner disputes a remediation ticket, your team should be able to show: no active owner, last file activity 214 days ago, 7 guests, confidential label, and one active flow dependency.
Triage by business impact, then automate the first 80%
Once you can identify orphaned groups, the next failure mode is treating every case as a human workflow. That does not scale.
A practical triage model uses three lanes:
Lane 1: Auto-remediate low-risk spaces
These are groups with no owners, no activity for 180+ days, no guests, no retention lock, and no app dependencies. For these, you can automate owner attestation or archival.
Example policy:
policyName: M365Group-Orphaned-LowRisk
criteria:
activeOwnerCount: 0
lastActivityDays: ">=180"
guestCount: 0
retentionHold: false
appDependency: false
actions:
- notifyLastKnownManager
- waitDays: 14
- addTemporaryAdminOwner
- archiveTeam: true
- setSharePointReadOnly: true
- markForDeletionAfterDays: 60
This kind of workflow is effective because it preserves reversibility. Archive first, delete later.
Lane 2: Review medium-risk spaces with business owners
These groups often have one weak owner, limited recent activity, or a small number of guests. Route them to department managers or designated data stewards.
A realistic SLA is 14 days for attestation and 30 days for remediation. Beyond that, tickets rot and your backlog becomes another orphaned system.
Lane 3: Escalate high-risk spaces to security and compliance
Any group with external guests, confidential data, legal hold, or automation dependencies needs a controlled review. Do not let a generic cleanup script touch these.
A named scenario: an R&D Team with no active owners still had a private channel site and a retention policy tied to an IP dispute. Deleting the parent group would have created both legal and operational fallout. The right action was to assign a custodian owner, lock guest access, and preserve content.
Common Pitfalls
The mistakes here are rarely technical. They come from oversimplified policy.
Mistake 1: Equating inactivity with low risk
A quiet group can still hold sensitive data. A board review workspace may have zero activity for 120 days and still be one of the highest-risk spaces in the tenant.
Avoid it: combine inactivity with sensitivity labels, guest access, and retention state before taking action.
Mistake 2: Deleting groups with hidden dependencies
Teams and groups often support Power Automate flows, webhook integrations, or mailbox rules that nobody documented.
Avoid it: scan for connectors, flows, and app references before archival or deletion. If you cannot scan reliably, default to archive plus owner assignment instead of hard delete.
Mistake 3: Assuming one owner is enough
One owner is not resilience. It is a future orphan waiting for HR to process a departure.
Avoid it: enforce a minimum of two active internal owners for every M365 Group tied to business processes.
Mistake 4: Running cleanup without a rollback window
A 24-hour delete cycle is reckless for enterprise collaboration data.
Avoid it: use a staged lifecycle: notify, archive, read-only, then delete after 30 to 90 days based on risk.
Mistake 5: Treating naming conventions as governance
A prefix like PRJ- helps classification, but it does not prove ownership, sensitivity, or business value.
Avoid it: use naming as one signal, not your control plane.
Turn governance into an engineering routine, not a yearly project
The teams that handle orphaned collaboration spaces well do not run one heroic cleanup. They operationalize it.
A durable 2026 operating model usually includes:
- Weekly detection jobs
- Monthly owner attestation for high-risk group classes
- Quarterly KPI review with security, M365 admins, and compliance
- Lifecycle policies for Teams, SharePoint, and groups aligned to business unit rules
- Exception handling for legal hold, regulated data, and app-backed workspaces
Track metrics that matter to engineering leadership:
- Percentage of M365 Groups with 2+ active internal owners
- Number of orphaned groups by business unit
- Median days to remediate high-risk orphaned groups
- Groups with guests and no active owner
- Archived-to-deleted ratio after 60 days
A strong starting benchmark for mature tenants in 2026 is:
- 95%+ of active business-critical groups with at least two active owners
- <2% of total M365 Groups in orphaned high-risk state
- <14 days median time to assign ownership for high-risk cases
- >80% of low-risk orphaned groups processed without manual admin intervention
If your numbers are far from these, do not start with deletion campaigns. Start with ownership hygiene and evidence collection.
Key Takeaways
- Build your orphaned M365 Groups process around risk signals, not a single
owner count = 0rule. - Separate detection, scoring, and remediation so teams can audit decisions and improve them over time.
- Archive before delete, especially when Teams, SharePoint, retention, or automation dependencies exist.
- Enforce two active internal owners as a baseline control for business collaboration spaces.
- Track remediation KPIs monthly; orphaned collaboration spaces are an operations problem, not a one-time cleanup task.
- Start this week with one report: groups with no active owner, external guests, and no activity in 90+ days.
This article was written by an AI system and published pending human review. Verify anything you intend to act on.
Written by
Nesqual Tech AI
Nesqual Tech
Have a project in mind?
Get an instant AI price estimate for it, or talk directly to our team.
One email a month on what we learn building with AI