Cost report

Prev Next

Overview

The Cost report shows what a tenant's licenses cost each month and how much of that money is spent on seats that nobody holds or nobody uses. It also shows the agreement type and where each price comes from. It is written for finance teams. Use it to see the cost of Microsoft 365 licenses and the part of it that you could save.

You switch the report on, schedule it, and choose who receives it the same way as the other reports. See Reports in Tenant Manager.

Business value

Finance teams get the cost of licenses and the unused part of it without opening Tenant Manager or asking IT for a spreadsheet. The report states where each price comes from, so readers know which figures are invoiced and which are estimates.

Prerequisites

Before you use the report, connect a tenant and wait for its first sync to finish. The report uses the data from the last sync.

Required permissions

You need Read on Reports to see the report and its Generation history. You need Manage on Reports to generate the report on demand or change its schedule. For details, see Roles and permissions in Tenant Manager.

Role Access
Owner, Contributor Read and Manage on Reports.
Reader Read on Reports only.
Custom role Whatever the role's Read and Manage switches for Reports allow.

Dependencies

  • Synced data: the report uses the data from the last sync. See How data sync works.
  • Prices: every figure in the report depends on prices from your Microsoft billing or from the Global price catalog. See Global price catalog.
  • Sign-in and usage data: Unused spend depends on the tenant's app registration having the AuditLog.Read.All permission and the Reports.Read.All permission, with admin consent.
  • Entra ID P1: unused spend is more reliable when the tenant has Microsoft Entra ID P1. See How it works.

How it works

The Cost report has one row for each tenant and currency. In the PDF, the rows follow a summary page. In the Excel file, the rows are the only content. The report has these columns.

Column What it shows
Tenant The tenant the row is for.
Agreement How the tenant buys the licenses in the row, as their prices show it. It reads "Not recorded" when no invoiced price was found.
Priced from Where the prices come from.
Monthly cost The purchased paid seats that have a price, multiplied by their unit price. Seats with no price are not included.
Cost of assigned seats per month The assigned seats multiplied by their unit price.
Unused spend per month What you pay for seats that nobody gets anything from: seats that are bought and assigned to nobody, plus seats assigned to users who are disabled or have had no activity in the last N days. N is the No activity for more than (days) setting of the report, and the default is 90.
Unused share of cost The unused spend as a share of the monthly cost.
Unused spend per year The unused spend per month multiplied by 12.

No activity for more than (days) is under Report settings in the Configure dialog of the report. The field tooltip says that the Cost report uses it for Unused spend. The activity window in the report file reads "Last N days".

Where prices come from

The Priced from column uses one of three values.

Value What it means
Billing (Microsoft Customer Agreement) The prices come from your Microsoft billing.
Custom price (set in the price catalog) The prices come from a custom price that you set in the Global price catalog.
Not priced Tenant Manager has no price.

The Agreement column reads Microsoft Customer Agreement, Not recorded (custom price used), or Not recorded. When prices are missing, the report adds a note that explains why, based on the agreement. Some figures use a custom price rather than an invoiced price, so they are an estimate. A tenant that has both billed and custom prices is labeled Custom price (set in the price catalog), so treat its figures as an estimate. Billed prices exist only for tenants on a Microsoft Customer Agreement. For other tenants, only custom prices are used.

Order, summary, and Entra ID P1

The report lists rows by unused spend per month, highest first.

The summary page of the PDF starts with Key facts: the scope, when the data was last synced, the activity window, the currency, and the price coverage, which is how many of the purchased seats have a price recorded. It then shows four figures: Monthly cost, Unused spend per month, Unused spend per year, and Purchased seats with no price. Every cost figure covers only the seats that have a price, so the real cost is higher when some seats have none. In Generation history, the Details column gives a one-line summary of the run.

The notes under the table split the unused spend into seats that nobody holds and seats held by someone who is disabled or inactive. They also say that trial and self-service licenses are excluded.

Amounts show the currency symbol, for example £1,234.50. A tenant's Cost report has one row per currency, so its row is the total. Amounts in different currencies are never added together.

Without Entra ID P1, unused spend is based on Microsoft 365 usage reports, which record only email, Teams, SharePoint, and OneDrive use. These reports can miss activity, so unused spend may be higher than it is. When a tenant has no Entra ID P1, the email says so.

Steps

The steps below generate the report and open the file. You start on the Reports page of the tenant. To change the schedule, format, or recipients, see Reports in Tenant Manager.

Generate and read the Cost report

This procedure creates a copy of the report on demand and opens it.

  1. Select the tenant in the tree view, expand License management, and select Reports.
  2. On the Cost report row, make sure the switch is on. Open the actions menu and select Generate now.
  3. Open the actions menu again and select Generation history.
  4. When the run shows Succeeded, select Download in the File column.
  5. Open the file. In the PDF, start with the Report summary page. In the Excel file, the figures are on the Rows sheet.

Change the activity window

This procedure sets how many days without activity make an assigned seat count as unused spend in the report.

  1. On the Cost report row, open the actions menu and select Configure.
  2. In No activity for more than (days), enter the number of days. The default is 90.
  3. Select Save.

Example scenario

The finance team at Cedar Ridge Health wants a monthly view of license spend, timed for the month-end close. Pavel Novak, a module owner, configures the Cost report for the Cedar Ridge Clinics tenant to run monthly on the Last day at 18:00, as a PDF, and sends it to finance@cedarridgehealth.com.

In the first report, Priced from reads Billing (Microsoft Customer Agreement), so finance knows the figures match the invoice. The summary page shows Unused spend per year, and finance takes it to the next licensing review.

Limitations

  • The report covers one tenant at a time. Tenant groups have no Cost report.
  • Figures that use a custom price are estimates.
  • Seats with no price are left out of every cost figure and counted in Purchased seats with no price only.
  • Trial and self-service licenses are excluded.
  • Without Entra ID P1, unused spend can be higher than it is.
  • The activity window for unused spend is the No activity for more than (days) setting of the report. The default is 90 days.
  • The report is read-only. It does not change any license.

Troubleshooting

  1. Priced from reads Custom price.
    Cause: a custom price is set for at least one of these licenses. A custom price replaces any billed price, and a tenant with both is labeled Custom.
    Fix: treat the figures as an estimate, and check the prices in the Global price catalog. See Global price catalog.

  2. The summary shows purchased seats with no price.
    Cause: Tenant Manager found no price for some licenses, and no custom price is set. Billed prices exist only for tenants on a Microsoft Customer Agreement. They are billed another way, for example as partner benefits or through a partner.
    Fix: set a custom price in the Global price catalog, and then generate the report again.

  3. Unused spend looks higher than expected.
    Cause: the tenant has no Entra ID P1, so unused spend is based on Microsoft 365 usage reports that can miss activity. A low No activity for more than (days) value also raises it.
    Fix: check the users in Explore users before you act on the figure, and check the No activity for more than (days) value.

FAQs

  1. Why does the Agreement column say Not recorded?
    Tenant Manager found no invoiced price for the licenses in that row. It reads Not recorded (custom price used) when a custom price covers the figures.

  2. Are the figures in the Cost report invoiced amounts?
    Only when Priced from reads Billing (Microsoft Customer Agreement). Figures that use a custom price are estimates.

  3. Why is there no total in the report?
    A tenant's Cost report has one row per currency, so its row is the total. Amounts in different currencies are never added together.

Related articles