AI agentSpend intelligence

AI unused license detection agent

An AI unused license detection agent pulls the seat roster for an application and lines it up against the activity records available for it, such as last login or last action dates.

  • People stay in control
  • Every action is logged
  • Start with a small sample
Seat roster export
Last-activity records
Inactivity window per application
Defined exceptions list
AI unused license detection agentPrepared for review
  • ✓Reclaim candidate list with evidence
  • ✓Review-only list with reasons
  • ✓Renewal-dated summary per application
Handed toApplication owner receives candidates to confirm or reject
5inputs it reads
6steps in the walkthrough
1point where a person decides
3outputs it prepares
See it run

Watch it work

Agent Record Person
Live walkthrough
  1. 1Pull seat rosterRecord
  2. 2Match activityAgent
  3. 3Apply windowAgent
  4. 4Set exceptions asideAgent
  5. 5Owner reviewsPerson
  6. 6Log decisionRecord

Reads assigned seats for one application from the admin export.

Joins each seat to its last recorded sign-in or action.

Compares the idle gap with the window set for that application.

Moves shared and leave-of-absence seats to a review-only list.

The software owner confirms which seats are safe to reclaim.

Records reclaimed and kept seats against the renewal date.

The basics

What is an AI unused license detection agent?

It applies the inactivity window and the exceptions your team has defined, for example leave of absence, shared service accounts or seats reserved for a new hire. Seats that match an exception are listed separately instead of being flagged.

Read the full explanation

It then writes a short report per application for the owner, with the seats, the evidence behind each flag and the renewal date, so the decision can be made before the next billing cycle.

Where it breaks

Why this step is hard by hand

Seat counts are billed from the vendor's roster, while activity lives in a different system, so nobody sees both side by side without a manual export.

Assignments sit in the admin console and activity sits in logs or identity records, so matching them means joining by email and handling mismatches.

A login, an API call and an opened document all count differently, and each vendor reports a different one.

Service accounts, seasonal staff and people on leave appear idle but should not always lose access.

A finding that arrives after the renewal notice window has closed can no longer change what you pay.

The path

How the agent does it

  1. 01Collect the roster

    Read the current seat list for the application from the records provided, including assignee, role and assignment date.

  2. 02Match activity

    Join each seat to the last-activity date for the same person, normalising email aliases and merged accounts.

  3. 03Apply the window

    Compare the gap since last activity with the inactivity window your policy sets for that application.

  4. 04Separate exceptions

    Move seats that fit a defined exception, such as a shared account, to a review-only list with the reason stated.

  5. 05Report to the owner

    Produce a per-application list with evidence and the nearest renewal or notice date.

Want to see this flow on your own items?

Bring a small sample and watch Flo work through it.

Book a demo
Under the hood

Inside the work

AspectBy handWith the agent
EvidenceExports from two consoles are joined by hand in a spreadsheet.Roster and activity are joined automatically, with the source of each flag kept.
ExceptionsService accounts get flagged by mistake or missed entirely.Defined exceptions are sorted out first and shown with their stated reason.
TimingReview happens when someone remembers, often after the notice period.Lists arrive ahead of each renewal with the notice date shown.
ConsistencyEach owner picks their own idle cut-off.One window per application is applied the same way every cycle.
Follow-throughReclaimed seats are rarely recorded anywhere.Each decision is logged so the next cycle starts from known facts.
People and control

Who decides, and what to watch

What stays with people

  • ✓
    Owners confirm reclaimsThe agent lists candidates, but the application owner decides which seats are taken back.
  • ✓
    Policy sets the windowPeople choose how long a seat can sit idle before it is flagged, and for which applications.
  • ✓
    Admins change accessRemoving or reassigning a seat is done by someone with admin rights, not by the agent.

Mistakes to avoid

  • ×
    Judging by login aloneSome roles work inside integrations or the API and never log in, so a single signal can mislabel active seats.
  • ×
    Ignoring contract termsReclaiming seats does not lower the bill if the contract has a fixed commitment or a minimum.
  • ×
    Running it onceUsage drifts, so a single pass goes stale before the next renewal.

Not sure where unused license detection fits in your process?

Talk it through with the team. We will map it to your steps and show where a person stays in control.

  • Works from a sample of your real items
  • Shows what Flo handles and what it hands over
  • No commitment to start
Rollout

Rolling it out

  1. 1One application

    Pick a single tool with many seats and clear activity records, and run it in report-only mode.

  2. 2Check the flags

    Owners review every flag against what they know and note where the agent was wrong.

  3. 3Add exceptions

    Write the exceptions and windows that came out of the review, then add more applications.

  4. 4Tie to renewals

    Schedule lists ahead of renewal notices and keep a person approving every reclaim.

Signs you would benefit

Renewals surprise youSeat counts at renewal are higher than anyone expected.
Admin consoles are not checkedNobody has looked at last-login columns in months.
Joiners get seats by defaultNew starters are given licences before anyone asks if they need them.
Reclaims are one-offClean-ups happen once a year and the numbers drift back.
The numbers

How to measure it

Set your own baseline first. We do not publish benchmarks without a source you can check.
Metric 1

Idle seat share

Idle seat share (%) =
idle seatstotal assigned seats× 100

Read this per application, not as a company-wide average. A high share on one tool points to a renewal conversation, while a low share across the board suggests assignments are in good order.

  • Track it at each renewal date so you see the trend.
  • Show the count of exceptions next to it so the figure is not overstated.
Questions

Frequently asked questions

Quick answers to what people ask most about unused license detection.

Book a demo
What is unused license detection?

It is the process of identifying software seats that are paid for and assigned but show no meaningful activity. The aim is to give owners evidence before a renewal so they can reclaim or reduce seats.

How long should a seat be idle before it is flagged?

There is no single answer. Many teams choose a window tied to how the tool is normally used, with longer windows for quarterly or seasonal tools. The window is a policy your team sets.

Does the agent remove access?

No. It prepares the list and the evidence. An owner decides and an admin changes access in the application.

What data does the agent need?

It needs the seat roster and some form of activity record per user, plus the renewal date and contract terms. Where activity is missing for an application, the agent says so instead of guessing.

Try unused license detection on your own data

Bring a small sample of real items. We will show what Flo handles on its own and where it hands over to your team.

  • People approve, sign and pay
  • Every action is logged
  • Start with a small sample