To export site storage usage in SharePoint Online, list the sites with Get-SPOSite -Limit All and write StorageUsageCurrent and StorageQuota to CSV. Both are in megabytes, OneDrives are not listed, and the account must be a SharePoint Administrator and a site collection administrator. Storage is pooled by default, so compare sites by storage used, not by limit.
| Method | Best fit |
|---|---|
| PowerShell | A CSV of every site's storage used and limit in gigabytes, largest first. |
| Admin centre | Sorting the Active sites list by storage and exporting it, or reading 1 site's usage. |
| Altivane | Recommended for regular storage reviews, with use against each limit, days unused and a workbook to keep. |
Before you start
Use an account with the SharePoint Administrator role. For Get-SPOSite, Microsoft says the account must also be a site collection administrator.
Microsoft says storage usage leaves out changes made in the last 24 to 48 hours. The script lists SharePoint sites only: OneDrives and sites in the Recycle Bin are not returned. The examples read and export and change nothing.
Option 1
Export site storage usage with PowerShell
Install the module once, then connect and export every site's storage, 1 row for each. 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'
Connect-SPOService -Url 'https://contoso-admin.sharepoint.com'
try {
$sites = @(Get-SPOSite -Limit All)
if ($sites.Count -eq 0) {
Write-Output 'No sites were returned.'
} else {
$report = @(foreach ($site in $sites) {
$used = [double]$site.StorageUsageCurrent
$quota = [double]$site.StorageQuota
$percent = if ($quota -gt 0) { [math]::Round(100 * $used / $quota, 1) } else { $null }
[pscustomobject]@{
Url = $site.Url
Title = $site.Title
Template = $site.Template
Owner = $site.Owner
StorageGB = [math]::Round($used / 1024, 2)
LimitGB = [math]::Round($quota / 1024, 2)
UsedPercent = $percent
LockState = $site.LockState
}
})
$report | Sort-Object StorageGB -Descending |
Export-Csv -Path './sharepoint-site-storage.csv' -NoTypeInformation -Encoding utf8
Write-Output "$($report.Count) sites written to sharepoint-site-storage.csv."
}
} finally {
Disconnect-SPOService
}-Limit All matters: the cmdlet returns 200 sites by default. The storage properties are filled when -Limit is used; the sharing properties are not, and for those see how to check external sharing settings in SharePoint Online. Add -Template GROUP#0 to list only group sites, or -IncludePersonalSite $true to add OneDrives.
Check a single site
Run this while connected. Replace the example address.
Get-SPOSite -Identity 'https://contoso.sharepoint.com/sites/research' |
Select-Object Url, Title, StorageUsageCurrent, StorageQuotaOption 2
Review site storage in the admin centre
- Open the Microsoft 365 admin centre.
- Under Admin centers, select SharePoint. If it is missing, select Show all first.
- Select Sites > Active sites, then the Change view arrow on the right of the command bar, and choose Largest sites.
- Select the arrow next to any column header, then Customize columns, and tick Storage used.
- Select Export on the command bar for a CSV of the list in view, or select a site's name and open the Activity tab for its files and storage usage.
This suits a quick look or a one-off file. The CSV shows the hub as a GUID and the template as an ID such as STS#0, and the page leaves out some sites that Get-SPOSite returns, such as site redirects.
Option 3 ยท Recommended for regular storage reviews
Run Altivane's Site Inventory report
- Open Altivane and choose the tenant.
- Run the Site Inventory report for SharePoint.
- Open the Excel workbook the run wrote and read its rows, including Storage (GB), Limit (GB), Used (%), Days unused and Files.
Altivane reads the site list from Microsoft Graph and joins the SharePoint site usage report for the last 30 days, so each row also has owners, page views and days since last use. Usage reports typically become available within 24 to 72 hours. With the admin tier (Sites. on the SharePoint API), the table adds Sharing, Lock state, Archive and Hub site columns. The reports need a tenant signed in with a certificate.
The SharePoint Sites scorecard report adds a Storage used (GB) total and a table of sites at or above the Storage warning percentage, which starts at 90%.
Contact usCommon questions
Why does every site show a limit of 25600 GB?
Storage is pooled by default: sites draw from 1 central pool. Microsoft says switching from manual to pooled resets every limit to 25 TB (25600 GB), the most a site can be given. A limit means little unless someone set it manually.
Does the export include OneDrives or deleted sites?
No to both: sites in the Recycle Bin are not returned. For OneDrives, see how to export OneDrive storage usage in Microsoft 365.
Why are Altivane's files and page views blank?
The tenant conceals names in its usage reports, which hides which site each row is about, so Altivane cannot match them and leaves last activity, files and page views blank. A Global Administrator can clear Conceal user, group, and site names in all reports under Settings > Org settings > Services > Reports, if your privacy rules allow it. With the admin tier, storage and the last change still come from SharePoint.
Microsoft references
Technical references checked on 5 October 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.