GraphPaaS vs admin centers
17 Aug 2026
GraphPaaS vs exporting from the Microsoft admin centers
Everything below is available for free in a Microsoft portal. That is not the argument. The argument is what each export costs you once you have it: how far back it reaches, whose names it hides, which permission tier it demands, and how many other exports you need before it answers the question you were actually asked. This is the side-by-side, per question.
180
Days — the longest window a usage report offers
7
Days of sign-in logs without Entra ID P1
13 mo
Azure cost backfill in the portal, one month per run
0
Read-only scopes that can create an Intune report export
Five questions, five different portals
None of these are exotic. They are the questions that arrive by email on a Monday, and each one lands in a different console with a different export button behind it.
| The question | Where it lives | What the export costs |
|---|---|---|
| Who pays for a licence they don't use? | Microsoft 365 admin center — Reports > Usage, plus Billing > Licenses | Two exports that don't share a key, and the user column is concealed by default. |
| Who hasn't signed in for 90 days? | Microsoft Entra admin center — Sign-in logs | 30 days of retention with P1, seven without. The window is shorter than the question. |
| Which devices are non-compliant, and why? | Intune admin center — Reports | An asynchronous export job. Automating it needs a write-capable scope (below). |
| What did we spend per resource group last year? | Azure portal — Cost Management > Exports | A storage account you provision, plus 12 separate re-runs to backfill a year. |
| Who consented to that app last month? | Microsoft Purview portal — Audit | A search job you wait on, over records kept 180 days by default. |
The export hands you less than the screen did
Two properties of the Microsoft 365 usage reports catch people out, and both are documented rather than accidental. The reports are available for the last 7, 30, 90 and 180 days and nothing longer, so any question phrased as "over the past year" cannot be answered from that surface at all. And by default every report hides usernames, display names, group names and site URLs to help organisations meet local privacy law. Turning that off is a Global Administrator action in Org settings, it is itself a logged event in the Purview audit log, and it applies tenant-wide — to the Graph reports API and Power BI too, not just the page you were looking at.
The same page is unusually blunt about the shape of what you get: you can't generate a report where you enter a user's account and then get a list of which services they're using and how much. The data is per-report, not per-person. Producing the per-person view is the join you end up doing in Excel — which is where the hours go. There is also a quiet clock on it: when you delete a user account, their usage data is deleted within 30 days, so an offboarding you want to evidence has a month before the evidence goes.
How far back each surface can actually see
Retention is the difference that matters most, because it is the one you cannot fix with effort. Every bar below is a hard ceiling set by Microsoft, not by how organised you are.
The Entra numbers are the sharpest edge. Audit logs and sign-ins are held for seven days on Microsoft Entra ID Free and 30 days on P1 or P2; risky sign-ins get 90 days, but only on P2. Crucially, buying the licence does not backfill: retention changes aren't retroactive, so upgrading from Free to P1 gives you the seven days you still had and nothing more. The audit trail you didn't archive is simply gone.
Purview is the friendlier end. Audit (Standard) now defaults to 180 days — it was 90 for records generated before 17 October 2023 — and Audit (Premium) keeps Exchange, SharePoint, OneDrive and Entra records for a year, but only for users holding an E5 or Purview Suite licence. Guests and non-E5 users fall back to 180 days regardless of the policy you wrote.
The permission asymmetry nobody mentions
Here is the detail that decides whether a reporting tool can be trusted with
your tenant. Reading Intune data needs a read scope. Creating an Intune report
export does not: the
create
deviceManagementExportJob API accepts exactly three permissions —
DeviceManagementConfiguration.ReadWrite.All,
DeviceManagementApps.ReadWrite.All and
DeviceManagementManagedDevices.ReadWrite.All. There is no read-only
variant. The last of those also authorises wipe, retire and remote lock on every
managed device in the tenant.
Key takeaway
Ask any reporting vendor whether they use the Intune export jobs API. If
they do, they hold a scope that can wipe your fleet — to produce a CSV.
GraphPaaS doesn't ask for it: the compliance, readiness and enrolment numbers
are read from ordinary Graph resources under
DeviceManagementManagedDevices.Read.All, which is why that export
path stays closed for us permanently.
What actually changes
Azure is the honest illustration of the gap, because Microsoft already built
the good answer and it isn't a button.
Cost
Management exports write scheduled CSV or Parquet into a storage account you
own, partitioned into sub-1 GB chunks with a manifest.json you
must read to reassemble them — partitioning cannot be disabled, even for tiny
exports. Backfilling history through the portal tops out at 13 months and runs
one month at a time; past that you're calling the REST API. That is a data
pipeline. Microsoft ships the pieces; assembling them is a project, and Excel's
row limit is explicitly one of the reasons the files are split.
GraphPaaS is that assembly, done once and run per tenant on a schedule: one multi-tenant app consented per customer, read-only scopes, and a copy of each surface kept on our side before the seven-day and 180-day windows close. The comparison stops being five exports and a join key — unused licences, dormant accounts, device compliance, spend by resource group and consent grants become five pages that were already populated when the email arrived. The portals stay authoritative; they're where you go to change something. They are just a bad place to be asked a question about last March.
Sources
- Microsoft 365 admin center usage reports overview — the 7/30/90/180-day windows, names concealed by default and the tenant-wide toggle, no per-user cross-service report, and usage data deleted within 30 days of deleting an account.
- Microsoft Entra data retention — seven days on Free, 30 on P1/P2, 90 days of risky sign-ins on P2, and that retention changes are not retroactive.
- Manage audit log retention policies — Audit (Standard) at 180 days since 17 October 2023, the one-year default for E5 users, and the 180-day fallback for guests and non-E5 users.
- Create deviceManagementExportJob — the three
ReadWrite.Allpermissions accepted by the Intune report export API, with no read-only alternative. - Create and manage Cost Management exports — the storage-account requirement, mandatory partitioning and manifest file, and the 13-month portal backfill limit versus seven years via the REST API.
- Intune reports overview — that Intune report exports run through the asynchronous
ExportJobsAPI rather than a direct download.
GraphPaaS
Read-only, per tenant, and already populated — the five exports you were about to run, kept before the retention window closed.
See it without exporting anything →