Can you just script your own licence-waste audit? What a Graph API script finds — and what it can’t.

A PowerShell/Graph API script can flag idle licences and dead Copilot seats in an afternoon. It’s genuinely useful — and it will never recover the money that matters most. Here’s the honest line between the two.

Liliia KarpenkoJuly 22, 20266 хв читання

Every time we talk about auditing wasted AI and software spend, a capable IT person makes the same reasonable point: "I could just script that myself."

And they’re right — partly. So let’s be honest about exactly where the line is.

What a script does well

A well-written Graph API or PowerShell job can, in an afternoon, flag a lot of real waste:

  • Licences assigned to disabled or departed accounts
  • Premium SKUs on low-activity users (paying for E5 to use E3 features)
  • Copilot seats with zero adoption — assigned, never opened
  • Duplicate tooling and overlapping subscriptions

If you have the skills, build it. Genuinely. That’s the licence half of the problem, and a script handles it well. It’s the kind of housekeeping every IT team should do.

What a script cannot do

Here’s the catch. A script can find your idle licences. It cannot find your untapped people.

The dashboard tells you seat #4471 hasn’t opened Copilot in 60 days. It does not tell you _why_ — that someone in finance tried it twice, got a confident wrong answer, quietly went back to doing the reconciliation by hand, and never mentioned it. That person doesn’t show up as "waste" in Graph API. They show up as a normal, licensed, active user. And they’re the more expensive problem, because the capability you’re paying for is sitting unused behind a human who was never shown how.

That gap doesn’t live in an API. It lives in a conversation.

Two different jobs

| A licence-waste script | An adoption partner | |---|---| | Finds idle and misassigned seats | Finds untapped people behind active seats | | Cancels or reclaims licences | Recovers the capability you already pay for | | Runs once; drifts out of date | Builds the habit and the champions that keep it current | | Answers "what are we not using?" | Answers "why, and what would make them use it?" |

Both matter. The script is a good first pass on the cheap half. But the money comes back for good only when the person behind the idle seat is shown how the tool earns its keep for their actual job — and when a couple of internal champions keep it that way after we leave.

A dashboard shows you the leak. It can’t train the person causing it.

So if you’ve already scripted the licence side: good — you’re ahead of most. The next question is the one the script can’t answer: who’s closing the loop with the humans on the other end of those seats? That’s where a Tool Waste Audit starts → see what you’re wasting first, in about two minutes, with the free Self-Check.

Comparing your options? Start with your own number.

The free Tool Waste Self-Check estimates what you’re wasting on AI and tools nobody uses, in 2 minutes — the number that tells you which option actually pays back. No email to see it.

Get your waste number (free) →