Azure resource management

How to export Advisor recommendations in Azure

Export active Advisor recommendations with Azure PowerShell and Resource Graph, download them as CSV from Advisor in the Azure portal, or run Altivane's Azure Advisor Recommendations report.

By the Published

To export Advisor recommendations in Azure, query the advisorresources table in Azure Resource Graph for recommendations whose status is New or InProgress, and save each with its category, impact and saving. Advisor can take up to 24 hours to assess a new resource, and up to a day to notice that you acted on a recommendation.

Choose the method that fits the job
MethodBest fit
PowerShellA CSV of active recommendations across your enabled subscriptions, with savings.
Admin centreA quick CSV or PDF of what Advisor shows, filtered as you choose.
AltivaneRecommended for monthly reviews, high impact first, with counts by category in the same workbook.

Before you start

Use an account that is Owner, Contributor or Reader of the subscriptions, resource groups or resources you want to see: any of them can read Advisor recommendations. Microsoft lists no separate licence for it. Advisor also carries recommendations from Microsoft Defender for Cloud, so security rows can appear beside cost and reliability ones.

Know what the status means. Microsoft names properties.recommendationStatus as the field to trust, with the values New, InProgress, Completed, Postponed and Dismissed, and warns that a completed security recommendation in Resource Graph may not match its status in Defender for Cloud. The examples read and export; they don't postpone, dismiss or act on anything. The script's finally block disconnects the account and clears its saved Azure contexts.

Option 1

Export Advisor recommendations with PowerShell

Install the modules once. The script queries Resource Graph across the enabled subscriptions, follows every page of results, and saves 1 row for each active recommendation.

PowerShell
Install-Module -Name Az.Accounts, Az.ResourceGraph -Repository PSGallery -Scope CurrentUser
PowerShell
$ErrorActionPreference = 'Stop'
Connect-AzAccount -ErrorAction Stop
try {
    $subscriptionIds = @(
        Get-AzSubscription | Where-Object State -eq 'Enabled' | Select-Object -ExpandProperty Id
    )
    if ($subscriptionIds.Count -eq 0) {
        Write-Output 'No enabled subscriptions are available to this account.'
        return
    }
    $query = @(
        'advisorresources'
        '| where type =~ "microsoft.advisor/recommendations"'
        '| where tostring(properties.recommendationStatus) in ("New", "InProgress")'
        '| project id, subscriptionId, resourceGroup,'
        'category = tostring(properties.category), impact = tostring(properties.impact),'
        'problem = tostring(properties.shortDescription.problem),'
        'solution = tostring(properties.shortDescription.solution),'
        'impacted = tostring(properties.impactedValue),'
        'monthlySaving = todouble(properties.extendedProperties.savingsAmount),'
        'currency = tostring(properties.extendedProperties.savingsCurrency),'
        'lastUpdated = todatetime(properties.lastUpdated),'
        'resourceId = tostring(properties.resourceMetadata.resourceId)'
        '| order by id asc'
    ) -join ' '
    $rows = [System.Collections.Generic.List[object]]::new()
    $skipToken = $null
    do {
        $arguments = @{ Query = $query; Subscription = $subscriptionIds; First = 1000 }
        if ($skipToken) { $arguments.SkipToken = $skipToken }
        $page = Search-AzGraph @arguments
        foreach ($record in $page.Data) { $rows.Add($record) }
        $skipToken = $page.SkipToken
    } while ($skipToken)
    if ($rows.Count -eq 0) {
        Write-Output 'No active Advisor recommendations were found.'
    } else {
        $rows | Select-Object category, impact, problem, solution, impacted, resourceGroup,
            subscriptionId, monthlySaving, currency, lastUpdated, resourceId |
            Export-Csv -Path './advisor-recommendations.csv' -NoTypeInformation -Encoding utf8
        Write-Output "$($rows.Count) recommendations saved to advisor-recommendations.csv."
    }
} finally {
    Disconnect-AzAccount | Out-Null
}

The CSV holds the category, impact, problem and solution, the resource it is about, its resource group and subscription, the monthly saving and currency where Advisor gives one, when it last changed and the resource ID. To keep 1 category, add '| where tostring(properties.category) == "Cost"' before the project line. Resource Graph paging needs id in the results, so keep it if you edit the query.

Option 2

Download recommendations from Advisor in the Azure portal

  1. Sign in to the Azure portal with an account that can read the subscriptions.
  2. Search for Advisor and open it. The Overview page opens.
  3. Set Subscription to All or the ones you want, and keep Recommendation Status on Active.
  4. Choose Download as CSV for every category, or open a category, such as Cost, and download from there for that category alone.

The download follows the filters you set, so check them before you download. It suits a quick file for 1 review; for a list in the same shape every month, use PowerShell or Altivane.

Common questions

I acted on a recommendation. Why is it still listed?

Advisor can take up to a day to recognise the action. Check again the next day before marking it completed manually.

Why are some recommendations missing from the download?

The portal's download follows the filters you set, and its default status is Active, so postponed and dismissed recommendations are left out. Subscriptions excluded in Advisor's configuration don't get recommendations at all.

Where can I see what each service costs?

Advisor shows possible savings, not what you spend. See how to export cost by service and resource group in Azure.

Microsoft references

Technical references checked on 6 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