Exchange Online reporting

How to check archive mailbox sizes in Exchange Online

Check each archive's size against its quota with Exchange Online PowerShell, see which mailboxes have an archive in the admin centre, or run Altivane's Archive Mailboxes report.

By the Published

To check archive mailbox sizes in Exchange Online, list the mailboxes that have an archive with Get-EXOMailbox -Archive, then read each archive's size with Get-EXOMailboxStatistics -Archive and compare it with the archive quota. Microsoft's usage reports leave archives out of their storage figures, and an archive with auto-expanding archiving on grows past its quota.

Choose the method that fits the job
MethodBest fit
PowerShellA CSV of every archive's size against its quota, largest first.
Admin centreSeeing which mailboxes have an archive, without their sizes.
AltivaneRecommended for storage reviews, with archives near or at their quota rated and a workbook to keep.

Before you start

Use an account in a role group that can read mailbox settings: Microsoft lists Organization Management and Recipient Management, and says members of View-Only Management can view the configuration.

Know the limits. Microsoft gives a new archive up to 100 GB, with the warning quota at 90 GB. With auto-expanding archiving on, it adds space as the archive fills, up to 1.5 TB including the Recoverable Items folder, or 3 TB with some E5 licences. Auto-expanding archiving needs Exchange Online Plan 2, or Plan 1 with the Exchange Online Archiving add-on. The script reads sizes as they are when it runs. The examples read and export; they turn on no archive and change no quota.

Option 1

Check archive mailbox sizes with PowerShell

Install the module once, then connect and export each archive's size, reading 1 mailbox at a time.

PowerShell
# Install once, if the module is not already installed.
Install-Module ExchangeOnlineManagement -Scope CurrentUser
PowerShell
$ErrorActionPreference = 'Stop'
Connect-ExchangeOnline -ShowBanner:$false
try {
    $properties = 'ArchiveQuota', 'ArchiveWarningQuota', 'AutoExpandingArchiveEnabled'
    $mailboxes = @(Get-EXOMailbox -Archive -ResultSize Unlimited -Properties $properties)
    $report = @(foreach ($mailbox in $mailboxes) {
        $identity = $mailbox.UserPrincipalName
        if (-not $identity) { throw "No user principal name for $($mailbox.DisplayName)." }
        $bytes = $null
        try {
            $size = "$((Get-EXOMailboxStatistics -Identity $identity -Archive).TotalItemSize)"
            if ($size -match '\(([\d,]+) bytes\)') { $bytes = [int64]($Matches[1] -replace ',') }
        } catch {
            Write-Warning "The archive of $identity couldn't be read: $($_.Exception.Message)"
        }
        [pscustomobject]@{
            Mailbox = $mailbox.DisplayName
            Address = $mailbox.PrimarySmtpAddress.ToString()
            Type = $mailbox.RecipientTypeDetails
            ArchiveGB = if ($null -ne $bytes) { [math]::Round($bytes / 1GB, 2) } else { $null }
            Quota = "$($mailbox.ArchiveQuota)"
            WarningQuota = "$($mailbox.ArchiveWarningQuota)"
            AutoExpanding = $mailbox.AutoExpandingArchiveEnabled
        }
    })
    if ($report.Count -eq 0) {
        Write-Output 'No mailbox has an archive.'
    } else {
        $report | Sort-Object ArchiveGB -Descending |
            Export-Csv -Path './archive-mailbox-sizes.csv' -NoTypeInformation -Encoding utf8
        Write-Output "$($report.Count) archive mailboxes exported."
    }
} finally {
    Disconnect-ExchangeOnline -Confirm:$false
}

The CSV has 1 row for each archive, largest first, with its quota and warning quota as Exchange writes them. The script reads the byte count Exchange gives in brackets in TotalItemSize, so the result does not depend on how the size is rounded. An archive whose size can't be read is named in a warning and left blank. To narrow it to shared mailboxes, add -RecipientTypeDetails SharedMailbox to Get-EXOMailbox.

Check 1 archive

Reconnect with Connect-ExchangeOnline, then read 1 archive with its Recoverable Items.

PowerShell
# Run while connected to Exchange Online. Replace the example mailbox.
Get-EXOMailboxStatistics -Identity 'person@example.com' -Archive |
    Select-Object DisplayName, TotalItemSize, TotalDeletedItemSize, ItemCount

Option 2

See which mailboxes have an archive in the admin centre

  1. Sign in to the Microsoft 365 admin centre for the correct tenant and go to Reports > Usage. If Reports is missing, select Show all first.
  2. Under Reports, select Exchange. On the Email activity tab, select View More, then choose Exchange > Mailbox usage from the list.
  3. Select Choose columns and add Has Archive, which shows whether each mailbox has an online archive.
  4. In the Exchange admin centre, Recipients > Mailboxes shows Active in the Archive status column for a mailbox with an archive.

This suits finding the mailboxes that have an archive. It does not suit checking sizes: Microsoft's Storage chart leaves archive mailboxes out, and the table has no column for an archive's size.

Common questions

Why is an archive over 100 GB not full?

Auto-expanding archiving is on for it. When the archive reaches its quota, Microsoft converts it and adds space, which can take up to 30 days to arrive. With a hold or retention policy, turning it on raises the quota to 110 GB first.

Why does the archive look smaller than its quota says?

TotalItemSize is the part the user sees, and Recoverable Items is counted apart, in TotalDeletedItemSize. Microsoft counts Recoverable Items towards the limit of an auto-expanding archive, so check both for an archive on hold.

How do I check the primary mailbox sizes too?

Primary mailboxes have their own quotas and appear in Microsoft's usage reports. See how to export Exchange Online mailbox sizes.

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.

Talk to us about Altivane

Questions, or pricing? Get in touch.

Contact us