SharePoint storage can grow unnoticed for years. In some environments, the issue reaches IT only when the tenant approaches or exceeds its storage quota.
Version history is often a major contributor. By default, SharePoint can retain up to 500 major versions of each file, and automatic version history limits are not enabled by default.
Why storage usage goes unnoticed
Tenant storage is not visible to end users, nor should monitoring it be their responsibility. Users see only the current files, while storage consumed by previous versions remains hidden.
Administrators can review tenant storage in the SharePoint admin center, but without regular monitoring it is easy to miss. Quota warnings may also reach administrative accounts that are not actively monitored.
If the tenant runs out of storage, SharePoint may be placed in read-only mode, preventing users from uploading files or saving changes.
Investigate before you act
When storage is running low, it is tempting to start panic-deleting content or slap on some expensive additional storage and call it a day.
Before changing anything, identify where the storage is actually going.
Start by checking:
- Which sites consume the most storage?
- How much storage is being used by version history?
- Could inactive sites or files be archived or deleted?
- Should older file versions be trimmed, future version limits changed, or the content kept as-is?
Find where the storage is going
Start with the Microsoft 365 SharePoint usage report. It helps you identify the largest sites and gives useful context such as activity, file counts, and ownership.
The following steps require the SharePoint Administrator role.
Review the SharePoint usage report
Sign in to the Microsoft 365 admin center and go to Reports → Usage → SharePoint.
Sort the report by Storage used to identify the largest sites.
Keep in mind that this report shows the total storage used by each site. It does not show how much of that storage is consumed by version history.
Check version history separately
For the sites that stand out, generate a version storage usage report with the SharePoint Online Management Shell. The report is created as a CSV file in a document library of your choice and contains file-level version data that can be analyzed in Excel or PowerShell.
Connect-SPOService -Url https://contoso-admin.sharepoint.com
New-SPOSiteFileVersionExpirationReportJob `
-Identity "https://contoso.sharepoint.com/sites/ExampleSite" `
-ReportUrl "https://contoso.sharepoint.com/sites/ExampleSite/Shared%20Documents/version-report.csv"
Report generation runs as a background job. It may take more than 24 hours even for smaller sites, while larger sites can take several days. Do not modify the CSV file while the report is still being generated.
You can check its status with:
Get-SPOSiteFileVersionExpirationReportJobProgress `
-Identity "https://contoso.sharepoint.com/sites/ExampleSite" `
-ReportUrl "https://contoso.sharepoint.com/sites/ExampleSite/Shared%20Documents/version-report.csv"
The command returns a JSON response with a status value:
| Status | Meaning |
|---|---|
completed |
The report is fully generated. |
in_progress |
The report is still being populated. |
no_report_found |
No active report job was found for the specified file. |
failed |
Report generation failed. Check error_message for details. |
What to look for in the report
Each row represents one stored file version.
For an initial review, focus on these fields:
- FileUrl.Compact identifies the file.
- MajorVersion and MinorVersion identify the version number.
- Size shows how much storage that version consumes, in bytes.
- LastModifiedDate shows when the version was last changed.
- SnapshotDate shows when it became a historical version.
- Expiration fields show the current expiration date and how automatic or simulated trimming policies would affect the version.
Columns ending in .Compact do not repeat the same value on every row. If a cell is blank, use the most recent non-empty value above it.
To find the largest storage consumers, group the rows by file and sum the values in the Size column.
Confirm what can actually be changed
Usage data can help identify inactive or rarely used sites, but it cannot determine whether they are safe to archive or delete.
Use the report to narrow down the candidates, then confirm ownership, business need, and any retention requirements before taking action.
Choose the right response
Once you know what is consuming the storage, the next step is to decide whether to reduce it, archive it, or add more capacity. The sections below cover the main options.
Trim old versions
If historical versions account for a significant share of the storage usage, trimming can reclaim capacity without removing the current files.
Trim jobs can target an entire site or a single document library. Choose one of the following trimming methods:
-Automaticapplies Microsoft’s automatic version thinning algorithm.-DeleteBeforeDaysremoves versions older than the specified number of days.-MajorVersionLimittogether with-MajorWithMinorVersionsLimitretains a fixed number of major and minor versions.
Analyze the impact first
Before you let the trim job loose, run your version storage report through Microsoft’s offline What-If analysis. It shows how many versions and how much storage each option would remove, before you have to explain to Margaret from Accounting why Tuesday’s version of her billing report is gone for good.
Queue the trim job
Once you have reviewed the impact and chosen the appropriate trimming method, queue the deletion job with PowerShell.
$siteUrl = "https://contoso.sharepoint.com/sites/ExampleSite"
$library = "Documents"
New-SPOListFileVersionBatchDeleteJob `
-Site $siteUrl `
-List $library `
-Automatic
Use only one trimming method at a time. For example, replace -Automatic with
-DeleteBeforeDays to remove versions older than a specified number of days:
New-SPOListFileVersionBatchDeleteJob `
-Site $siteUrl `
-List $library `
-DeleteBeforeDays 365
Reduce future version growth
After dealing with existing versions, review the organization-level version history settings in the SharePoint admin center.
Automatic limits are Microsoft’s recommended option for optimizing version storage. They retain recent versions more densely and gradually reduce older versions over time.
Manual limits let you define a fixed number of major versions and, optionally, an expiration period.
Apply the policy to existing libraries
Existing document libraries keep their current version history settings until they are updated separately. The following example enables automatic version history limits for both existing libraries and any new libraries created on the site:
$siteUrl = "https://contoso.sharepoint.com/sites/ExampleSite"
Set-SPOSite `
-Identity $siteUrl `
-EnableAutoExpirationVersionTrim $true `
-ApplyToExistingDocumentLibraries `
-ApplyToNewDocumentLibraries
Updating existing libraries runs as a background job. You can check its progress with:
Get-SPOSiteVersionPolicyJobProgress -Identity $siteUrl
Archive inactive content
If a site is no longer actively used but still needs to be retained, archiving may be the better fit.
Site-level archiving removes inactive sites from normal collaboration while preserving their content, permissions, and metadata.
File-level archiving may also be useful when only part of an active site contains rarely accessed data. Keep in mind that once an archived file is reactivated, it cannot be archived again for 120 days.
Confirm the business owner, retention requirements, and expected restore needs before archiving anything.
Archive a SharePoint site
Note that Microsoft 365 Archive is not available until pay-as-you-go billing has been configured and the service has been enabled for the tenant.
The setting is located in the Microsoft 365 admin center under Settings → Org settings → Pay-as-you-go services. Open the Settings tab, select Storage services → Archive, and enable the service.
After SharePoint site archiving has been enabled, sites can be archived from the SharePoint admin center:
- Open Active sites.
- Select the site.
- Choose Archive from the command bar.
- Confirm the action.
Archived sites can later be found and reactivated under Archived sites.
Add storage where it is justified
Additional storage is a valid solution when the content is active, required, and already managed appropriately.
It should not be used to postpone an obvious lifecycle problem, but trimming or archiving content simply to avoid all storage costs can also create unnecessary operational risk. Sometimes the correct decision is to keep the data available and pay for the capacity it requires.
What about backups?
Every SharePoint environment should have a separate backup strategy in place. That said, backups do not make version history redundant. If backups run only once per day, recovering a file from backup can mean losing an entire working day of changes.
Version history covers the changes between backup runs and gives users a faster recovery path without the support tickets, approvals, and administrative work that a backup restore may require.
Backup coverage should influence how much version history you retain, but it should not determine the decision on its own.
Final thoughts
Measure what is consuming the storage, decide how much version history is actually useful, and configure SharePoint accordingly.
SharePoint is not a museum. Not every edit needs to be preserved forever.
