"How many SharePoint sites do we actually have, who owns each one, and how much storage is each one using?" It sounds like a simple question until you try to answer it for a tenant with three hundred site collections and years of ad hoc provisioning behind it. Three methods can get you there: the SharePoint admin centre itself, a PowerShell script, and Report Master.
| Method | Owner data | Storage per site | Activity indicator | Scripting required |
|---|---|---|---|---|
| SharePoint admin centre | Yes (primary only) | Yes | Limited | No |
| PowerShell (Get-SPOSite) | Yes (primary + secondary) | Yes | Last content modified date | Yes |
| Report Master (ShareMaster) | Yes | Yes, per library | Based on what SharePoint exposes to the signed-in admin | No |
What is a SharePoint site inventory report?
A site inventory report is a single list covering every site collection in a tenant, typically including its URL, display name, primary owner, template, storage consumed, and some indicator of whether it is still in active use. It differs from a storage report or a permissions report in that its purpose is breadth across the whole tenant rather than depth on any one site.
Option 1: SharePoint Admin Centre
The Active sites list under Sites in the SharePoint admin centre already functions as a basic inventory. Every site collection appears with its URL, primary admin, template, and storage used, and the list can be exported to CSV directly from the toolbar. For a tenant under a couple of hundred sites, this alone answers most day-to-day questions without any setup.
Where it falls short: the export has no dedicated activity column, so judging whether a site is still in use means opening it separately or cross-referencing another report. It also lists only the primary site owner, not every group or user with administrative rights, which matters when ownership has drifted since a site was first provisioned.
Option 2: PowerShell (Get-SPOSite and Get-PnPSite)
Get-SPOSite -Limit All -Detailed returns a richer object per site than the admin centre exposes, including LastContentModifiedDate, which is the closest built-in proxy for site activity. Combined with Export-Csv, a single script produces a tenant-wide inventory in one run:
Get-SPOSite -Limit All -Detailed | Select-Object Url, Title, Owner, Template, StorageUsageCurrent, LastContentModifiedDate | Export-Csv -Path "C:\Reports\sp-inventory.csv" -NoTypeInformation
The -Detailed switch adds real runtime cost. On a large tenant this script can take considerably longer than the equivalent admin centre export, so plan to run it outside business hours if the tenant has more than a few thousand sites.
PowerShell is the only free option that reliably surfaces a per-site activity date without opening each site individually, and it can be scheduled to run on a recurring basis for teams that want a standing inventory rather than a one-off snapshot. The tradeoff is upkeep: someone has to own the script, handle module updates, and troubleshoot when authentication or throttling breaks a run partway through.
Option 3: Report Master (ShareMaster)
Report Master exports site-level detail to Excel without any scripting, and because it works at the library level as well as the site level, the resulting inventory can show which specific libraries within a site are driving its storage total. That is one layer of detail beyond what either the admin centre or a basic PowerShell script provides without additional custom code.
For a migration or licence renewal, this extra granularity changes what the inventory can actually be used for. Rather than knowing only that a site is using 40 GB, the report can point at the specific library responsible, which shortens the gap between "we have a problem" and "here is exactly where to start."
See what Report Master exports before deciding which method fits your next inventory pass.
Decision Matrix
| Situation | Recommended method |
|---|---|
| Small tenant, quick answer, no export needed | SharePoint admin centre |
| Need a per-site activity date, comfortable scripting | PowerShell (Get-SPOSite -Detailed) |
| Recurring scheduled inventory, in-house automation team | PowerShell |
| Need library-level storage detail, no scripting | Report Master |
| Pre-migration or pre-renewal inventory for a mixed audience | Report Master (Excel output shareable with non-technical stakeholders) |
Frequently Asked Questions
What should a SharePoint site inventory report include?
At minimum: URL, title, primary owner, template type, storage used, and a recent activity indicator such as last modified date. Some teams add sensitivity label, external sharing tier, and Microsoft 365 group association where relevant.
How often should a SharePoint site inventory be refreshed?
Quarterly is a common baseline. Ahead of a migration, audit, or licence renewal, most teams pull a fresh inventory immediately before the project starts, since even a few weeks of drift in storage and ownership data can change decisions.
Once you have an inventory in hand, the guide to identifying inactive SharePoint sites walks through turning that activity data into a shortlist for archiving or decommission.