To find sites open to everyone in SharePoint Online, look in each site's groups for the 2 built-in claims that stand for whole populations: Everyone except external users, which is every person in your organisation, and Everyone, which includes guests too. A site that holds either in a group with permissions is open to that whole population, whatever its own membership says. Microsoft's site permissions report counts them across the tenant, but it needs SharePoint Advanced Management.
| Method | Best fit |
|---|---|
| PowerShell | A CSV of each site where either claim is in 1 of its groups, with the groups named. |
| Admin centre | A count of both claims' permissions on every site, with SharePoint Advanced Management. |
| Altivane | Recommended for recurring reviews, with each site and the group or permission that opens it. |
Before you start
Use an account with the SharePoint Administrator role. To read a site's users with Get-SPOUser, Microsoft says the account must be at least a SharePoint Online administrator and a site collection administrator of that site, so the script can't read a site where you aren't one and lists it as not read. In PowerShell 7 the SharePoint Online Management Shell loads through Windows PowerShell, which the last line of the install block does.
The script reads every site in turn, so it's slow on a large tenant. OneDrives are left out. The examples read and export and change nothing.
Option 1
Find sites open to everyone with PowerShell
Install the module once, then connect and read the users of each site. The connection prompts you to sign in. Replace contoso with your tenant's name.
# Install once, if the module is not already installed.
Install-Module Microsoft.Online.SharePoint.PowerShell -Scope CurrentUser
# In PowerShell 7 only: load the module through Windows PowerShell.
Import-Module Microsoft.Online.SharePoint.PowerShell -UseWindowsPowerShell$ErrorActionPreference = 'Stop'
$claims = 'Everyone', 'Everyone except external users'
Connect-SPOService -Url 'https://contoso-admin.sharepoint.com'
try {
$rows = [System.Collections.Generic.List[object]]::new()
foreach ($site in Get-SPOSite -Limit All) {
try {
$users = @(Get-SPOUser -Site $site.Url -Limit All)
} catch {
$rows.Add([pscustomobject]@{ Url = $site.Url; Claim = 'Not read'; Groups = "$_" })
continue
}
# Keeps a claim only where it's in 1 of the site's groups.
foreach ($user in $users | Where-Object { $_.DisplayName -in $claims -and $_.Groups }) {
$rows.Add([pscustomobject]@{ Url = $site.Url; Claim = $user.DisplayName
Groups = $user.Groups -join '; ' })
}
}
if ($rows.Count -eq 0) {
Write-Output 'No site holds Everyone or Everyone except external users in a group.'
} else {
$rows | Sort-Object Url, Claim |
Export-Csv -Path './sites-open-to-everyone.csv' -NoTypeInformation -Encoding utf8
Write-Output "$($rows.Count) rows written to sites-open-to-everyone.csv."
}
} finally {
Disconnect-SPOService
}Each row names a site, the claim and the site groups that hold it; a site you couldn't read has Not read and the error instead. The script finds a claim by its name and only where it's in a site group, so a claim given a permission directly, or on 1 library or file, isn't in the file. A claim in a group with no permission on the site reaches nothing, so check the group before you act.
Option 2
Run the site permissions report in the SharePoint admin centre
- Sign in to the SharePoint admin centre as a SharePoint Administrator.
- Expand Reports and select Data access governance.
- Under Site permissions across your organization, select View reports, then Create report. Microsoft says the first report takes up to 5 days, later ones up to 24 hours, and a report can run again every 30 days.
- When it's ready, select View report under SharePoint, and download the CSV.
- Sort the CSV by EEEU permission count and Everyone permission count. Any site above 0 is open to that population somewhere.
This suits a tenant with SharePoint Advanced Management, and it counts permissions at every level, files and folders included. With Microsoft 365 E5 alone, Microsoft says the snapshot reports aren't there, so use PowerShell or a report instead.
Option 3 ยท Recommended for recurring reviews
Find sites open to everyone with Altivane
- Open Altivane and choose the tenant.
- Run the SharePoint Sites report. It reads each site's access, so it takes longer on a large tenant.
- Open the tenant's Excel workbook and find Sites Open to Everyone: each site with its address and how the claim reaches it, such as Everyone except external users in the site's visitors group, or granted a permission level directly.
- To see everyone who can reach the sites, run the Site Access report, which lists each site's groups and direct grants.
Altivane counts a site group only when the site grants it a permission level, so a group that reaches nothing isn't listed, and it finds a claim granted directly as well as through a group. SharePoint Sites Summary counts the sites open to everyone. The table needs a tenant signed in with a certificate, with Everything as its access, or Custom with SharePoint full control; with Reports or Manage, the report leaves it out.
Contact usCommon questions
What's the difference between the 2 claims?
Everyone except external users is a built-in group of every person in your organisation, with guests left out. Everyone covers all users, guests included, so it's the wider of the 2.
Why does Microsoft's report count a site the script doesn't list?
The site permissions report counts permissions at any level, so a claim given access to 1 library, folder or file counts. The script reads only the site's own groups.
How do I find sites that allow Anyone links?
Anyone links open without signing in at all, which is wider again. See how to find sites allowing Anyone links in SharePoint Online.
Microsoft references
Technical references checked on 7 November 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.