Your input shapes our product. Suggest a feature now →
  1. Home
  2. Compare
  3. Site Inventory Report Options

3 Ways to Build a SharePoint Site Inventory Report

"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

SituationRecommended method
Small tenant, quick answer, no export neededSharePoint admin centre
Need a per-site activity date, comfortable scriptingPowerShell (Get-SPOSite -Detailed)
Recurring scheduled inventory, in-house automation teamPowerShell
Need library-level storage detail, no scriptingReport Master
Pre-migration or pre-renewal inventory for a mixed audienceReport 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.

Try ShareMaster free for 14 days