# Compare software licenses with approved account purposes

Canonical page: https://agents.paretoid.com/workflows/compare-software-licenses-with-approved-account-purposes/

Category: Operations & Reporting

Practice relevance: cross-practice. A general operational method. Review the stated tool and jurisdiction limits before use.

Jurisdiction/provider scope: 

Match purchased capacity, assignments and documented account needs.

Status: Proposed / not tested. The public source describes the problem. Documentation supports only the stated method components; no result from this recipe has been verified.

Verification: Source methods and reported problems have been reviewed. We have not run the adapted workflow. The sample below describes expected behavior on synthetic data, not a customer result.

## The problem

Match purchased capacity, assignments and documented account needs.

Why it matters: Unused capacity can be intentional, and a service account may be essential. Reviewing assignments against approved purposes gives the owner a clearer list of questions before any license or access change.

## Sources and evidence

- pain: [Pain evidence: Microsoft subscriptions for a small law firm](https://www.reddit.com/r/Office365/comments/1uie17m/microsoft_subscriptions_for_a_small_law_firm/)
  Microsoft subscriptions for a small law firm, 2026-06-29, older: a six-lawyer/two-admin firm operator describes confusing subscriptions and an earlier count of 15 licenses, later 10. The account does not establish that any particular license was unnecessary.

- method: [Method: View licensed and unlicensed Microsoft 365 users](https://learn.microsoft.com/en-us/microsoft-365/enterprise/view-licensed-and-unlicensed-users-with-microsoft-365-powershell)
  View licensed and unlicensed Microsoft 365 users documents licensed-user and assigned-plan inspection. This recipe consumes an export supplied by an already-authorized administrator; it does not create credentials, grant access or run tenant changes.

Source checked: October 15, 2026. Pain accounts are self-reported. Documentation supports components; this adapted recipe and prompt have not been tested.

## Suggested approach

Start when: Monthly billing review or scheduled renewal review

1. reconcile purchased seats, assigned seats and administrator-approved account purposes

2. Keep source references and report unknowns instead of filling gaps.

3. The responsible reviewer checks the report before any separately approved action.

## What you need

- Existing Microsoft 365 admin access to subscription details and selected users’ license assignments; billing/global admin for subscription inventory.

- Actual purchase/invoice approvals and account-purpose/capability records; a snapshot does not establish purchase authorization.

- Firm-approved Excel; optional Copilot entitlement and tenant approval for the exact minimized data. Native Excel analysis can be done manually if Copilot is absent.

- Keep raw exports and identifying source pointers in a separate restricted location. The AI workbook contains only approved alias-based tables and visible policy/scope text, never raw client records on another tab.

- Use synthetic inputs first. Keep real data in firm-approved accounts and processing, with appropriate access, confidentiality and retention controls. Aliases alone do not anonymize records. Never paste credentials, API keys or unnecessary client details.

## How to use

Documentation-checked proposed route; source collection and human approval required

- This route manually reads the documented native screens. It does not invent an assignment-history CSV or assigned_at timestamp.

- Licenses are not safely removable just because an account seems unused. Shared/service accounts, legal holds, required capabilities and group-assigned licenses require IT review.

Access and setup:

- Actual account access, plan and source-data completeness have not been tested.

### 1. Read purchased subscription quantities

Tool: Microsoft 365 admin center

Location: Dashboard view: Billing > Your products; Simplified view: Subscriptions

Read product name, total licenses, assigned licenses and subscription status. Open the subscription for its actual details; check each authorized billing account separately. Read the actual invoice/order/approval record locally for approved cost, currency, period and approval reference. Do not buy, cancel or change recurring billing.

Expected output: Observed subscription inventory plus independent purchase/approval evidence.

Next step: Create a SKU/product crosswalk approved by IT; do not assume friendly names are canonical SKU codes.

Check before continuing: Quantity in the portal and approved purchased quantity are separate facts; note multiple subscriptions/billing accounts and reseller gaps.

Execution status: Official documentation checked 2026-10-15; account and workflow not personally tested

Step documentation: https://learn.microsoft.com/en-us/microsoft-365/admin/admin-overview/what-subscription-do-i-have?view=o365-worldwide

### 2. Read actual user assignments without saving

Tool: Microsoft 365 admin center

Location: Users > Active users > select user > Licenses and Apps > Licenses

For each authorized account in the defined roster, inspect currently assigned products and relevant service capabilities. Record the observation and source reference without changing checkboxes or selecting Save changes. Use actual historical audit evidence for assigned_at only if already available; otherwise unknown.

Expected output: Manual account/product assignment snapshot, with capture time and coverage.

Next step: Combine with the IT-approved purpose/owner roster in a separate alias-based workbook.

Check before continuing: Do not infer account type/purpose from a name or assume current assignment date equals capture date.

Execution status: Official documentation checked 2026-10-15; account and workflow not personally tested

Step documentation: https://learn.microsoft.com/en-us/entra/fundamentals/license-users-groups

### 3. Map the observed records to the starter input

Tool: Excel and authorized staff

Location: Separate analysis workbook > Home > Format as Table

Populate purchases.csv from actual approved orders; assignments.csv from observed account_alias/sku,assigned_at (if evidenced),source_ref; account-purposes.csv from owner-approved account_type,approved_purpose,required_capabilities,owner_alias,approval_ref. Paste scope.txt and capture time into Scope. Preserve active quantities versus historical periods and document SKU aliases. Create named tables for Purchases, Assignments and AccountPurposes. Put the policy and review scope in visible worksheets or paste them into the next prompt.

Expected output: Purchases, Assignments and AccountPurposes tables with explicit missing approvals/coverage.

Next step: Check the mapping against each original source before using AI.

Check before continuing: Aliases and missing policy fields are staff-created; do not relabel a native export as the kit schema. Unknown stays blank/unknown, not false or zero.

Execution status: Official documentation checked 2026-10-15; account and workflow not personally tested

Step documentation: https://support.microsoft.com/en-us/excel/tutorial-import-data-into-excel-and-create-a-data-model

### 4. Review the bounded evidence with Copilot

Tool: Excel Copilot, optional

Location: Approved analysis workbook > Copilot icon at lower right > Chat only

Use Chat only and submit the prompt. Without Copilot: count per-SKU assignments, compare active purchase scope and check each account against its approved capability needs.

Prompt:

```text
Reconcile Purchases, Assignments and AccountPurposes within Scope. Count observed assignments by approved SKU mapping and compare with active purchased quantities for the same period. Flag unknown SKU, missing purchase approval, missing account purpose, apparent overassignment and capability conflicts. Do not classify an account as unnecessary or recommend removing a license solely from usage/absence. Return evidence and questions for IT; no purchases, removals or account changes.
```

Expected output: License evidence exceptions and owner questions.

Next step: Copy the draft exception list to the reviewer; retain row references.

Check before continuing: Check every flagged row and the scope. A fluent answer is not evidence of completeness; no automatic workbook or source-system edits.

Execution status: Official documentation checked 2026-10-15; account and workflow not personally tested

Step documentation: https://support.microsoft.com/en-us/excel/copilot/get-started-with-copilot-in-excel https://support.microsoft.com/en-us/excel/copilot/frequently-asked-questions-about-copilot-in-excel

### 5. Approve the review result

Tool: Responsible staff reviewer

Location: Reviewed local worksheet

IT and the budget owner validate SKU mapping, group licensing, required capabilities and contractual quantities before considering a separate license change.

Expected output: Reviewed licensing exception list.

Next step: Any external message, source change, payment or deletion requires its own authorized process.

Check before continuing: No savings estimate or removal decision is valid from incomplete assignment/purpose evidence.

Execution status: Official documentation checked 2026-10-15; account and workflow not personally tested

Step documentation: https://support.microsoft.com/en-us/excel/tutorial-import-data-into-excel-and-create-a-data-model

## What you will get

license-review.csv: sku, purchased_quantity, assigned_quantity, unassigned_capacity, account_alias, approved_purpose, source_ref, missing_evidence, reviewer_question. Do not call a spare or service account waste or cancel access.

## Human review and limits

IT and billing owner check purpose, contract terms and feature requirements. Test a legitimate service account, prepaid spare capacity and a renamed SKU. No cancellation, purchase or permission change is made.

The assistant drafts or reports only. Check source records and review the output before a human performs any separately approved send or change. No automatic legal decision, money movement, account connection or publication is included.

What to measure: In a synthetic pilot, count correctly found exceptions, false alarms, and unresolved inputs. No time or cost saving is assumed.

## Original prepared-input schema

purchases.csv: purchase_id, sku, quantity, period_start, period_end, approved_cost, currency, approval_ref

assignments.csv: account_alias, sku, assigned_at, source_ref

account-purposes.csv: account_alias, account_type, approved_purpose, required_capabilities, owner_alias, approval_ref; scope.txt: export cutoff, coverage and approved SKU mappings

Synthetic example input:

```text
Synthetic inputs are included in the starter kit.
purchases.example.csv
assignments.example.csv
account-purposes.example.csv
scope.example.txt
```

Expected synthetic output:

```text
SKU-A purchased 3 and assigned 2 gives 1 unassigned capacity, documented as prepaid spare capacity.
ACC2 is an approved service account. Do not call it waste or remove its license.
ACC3 has undocumented purpose and SKU-LEGACY with no matching purchased SKU/mapping. Keep purpose and SKU evidence gaps separate.
Do not subtract unknown SKU-LEGACY from SKU-A capacity or recommend cancelling security capabilities.
```

Failure check: IT and billing owner check purpose, contract terms and feature requirements. Test a legitimate service account, prepaid spare capacity and a renamed SKU. No cancellation, purchase or permission change is made.

## Starter files

Native blank scaffolds and original synthetic examples may use different schemas. Follow NATIVE-INPUT-MAPPING where supplied. These files do not connect accounts or install automation.

- [Download starter kit](https://agents.paretoid.com/assets/starter-kits/s18-starter-kit.zip) — All inputs, synthetic examples and review notes in one ZIP. No automation is installed.

- [Start here: get the sources and prepare the review](https://agents.paretoid.com/assets/starter-kits/s18/START-HERE.txt) — Documentation-checked acquisition, explicit manual mapping, exact prompts and human review limits

- [purchases.csv](https://agents.paretoid.com/assets/starter-kits/s18/purchases.csv) — Blank input template with exact recipe headers.

- [purchases.example.csv](https://agents.paretoid.com/assets/starter-kits/s18/purchases.example.csv) — Separate synthetic fixture input. Do not mix these rows into real exports.

- [assignments.csv](https://agents.paretoid.com/assets/starter-kits/s18/assignments.csv) — Blank input template with exact recipe headers.

- [assignments.example.csv](https://agents.paretoid.com/assets/starter-kits/s18/assignments.example.csv) — Separate synthetic fixture input. Do not mix these rows into real exports.

- [account-purposes.csv](https://agents.paretoid.com/assets/starter-kits/s18/account-purposes.csv) — Blank input template with exact recipe headers.

- [account-purposes.example.csv](https://agents.paretoid.com/assets/starter-kits/s18/account-purposes.example.csv) — Separate synthetic fixture input. Do not mix these rows into real exports.

- [scope.txt](https://agents.paretoid.com/assets/starter-kits/s18/scope.txt) — Blank text input worksheet. Fill its fields with approved evidence; no default assumptions are supplied.

- [scope.example.txt](https://agents.paretoid.com/assets/starter-kits/s18/scope.example.txt) — Separate synthetic text input fixture; use with the example CSV files only.

- [Expected fixture findings](https://agents.paretoid.com/assets/starter-kits/s18/expected-fixture-result.txt) — Read-only expected output and failure conditions for the included synthetic input files.

- [Setup and review checklist](https://agents.paretoid.com/assets/starter-kits/s18/README.txt) — Recipe-specific prerequisites, file mapping, prompt, setup steps, checklist and limits.

## Optional original prepared-input prompt

Destination: Your firm-approved AI assistant · prepared files

This original prompt uses its own prepared-input schema. Do not mix it with native-step tables without the supplied mapping.

```text
Compare purchased-license quantities with assigned-license rows and the supplied account-purpose inventory. Show unassigned capacity, assignments without a documented purpose, SKU mismatches and missing evidence. Do not treat shared or service accounts as waste, infer employment status, recommend removing required security features, cancel subscriptions or change access. Present questions and reconciled counts for the administrator.

INPUTS
purchases.csv: purchase_id, sku, quantity, period_start, period_end, approved_cost, currency, approval_ref
assignments.csv: account_alias, sku, assigned_at, source_ref
account-purposes.csv: account_alias, account_type, approved_purpose, required_capabilities, owner_alias, approval_ref; scope.txt: export cutoff, coverage and approved SKU mappings

OUTPUT
license-review.csv: sku, purchased_quantity, assigned_quantity, unassigned_capacity, account_alias, approved_purpose, source_ref, missing_evidence, reviewer_question. Do not call a spare or service account waste or cancel access.

Use only these synthetic or firm-approved inputs and preserve source row/page IDs. Keep missing or conflicting evidence unresolved. Return a draft for the named reviewer. Do not send messages, connect accounts, change records or permissions, move money, or make legal decisions. Keep source files unchanged. List missing prerequisites before continuing.
```

Proposed / not tested · editorial prompt

Published by Law Firm Agents. Proposed adaptation; not tested. Not legal advice.
