Stepwork logoStepwork logo
ProcedureDeterministic AgentsMarketplace

By department

  • ITAccounts, access, helpdesk requests
  • Security & ComplianceAccess reviews, evidence, audits
  • Finance & AccountingInvoices, billing, month-end close
  • Sales & RevOpsCRM to ERP, orders, quotes
  • OperationsOrders, deliveries, dispatch
  • HR & PeopleOnboarding and offboarding
See every use case

By industry

  • HealthcareReferrals, eligibility checks, EHR entry
  • 3PL and warehousingPDF orders, WMS entry, client billing
  • Freight and truckingRate confirmations, carrier checks, TMS
  • Fuel and convenience storesStore staff, POS IDs, back office
  • ConstructionJob setup, subcontractor insurance
  • Manufacturing and distributionPO entry, supplier dates, legacy ERPs
  • Accounting firmsMonth-end across every client file
  • Field services and tradesService calls to jobs to invoices
  • MSPsNew users and license true-ups
See every industry
Security
Log inBook a Demo
ProcedureDeterministic AgentsMarketplace

By department

  • ITAccounts, access, helpdesk requests
  • Security & ComplianceAccess reviews, evidence, audits
  • Finance & AccountingInvoices, billing, month-end close
  • Sales & RevOpsCRM to ERP, orders, quotes
  • OperationsOrders, deliveries, dispatch
  • HR & PeopleOnboarding and offboarding
See every use case

By industry

  • HealthcareReferrals, eligibility checks, EHR entry
  • 3PL and warehousingPDF orders, WMS entry, client billing
  • Freight and truckingRate confirmations, carrier checks, TMS
  • Fuel and convenience storesStore staff, POS IDs, back office
  • ConstructionJob setup, subcontractor insurance
  • Manufacturing and distributionPO entry, supplier dates, legacy ERPs
  • Accounting firmsMonth-end across every client file
  • Field services and tradesService calls to jobs to invoices
  • MSPsNew users and license true-ups
See every industry
Security
Log inBook a Demo
  1. Home
  2. Use cases
  3. SaaS license reclamation

Automate SaaS license reclamation for inactive seats

Stepwork reads each seat's last active date in every app's admin console, warns inactive users, and reclaims their seats on a schedule, with a record of every seat removed.

Book a DemoSee the procedures
  • Renewal calendar
  • Finance request
  • Leaver list
Use case
Reclaiming unused SaaS seats across admin consolesIT
Best for
IT Manager, SaaS Operations Lead, FP&A Manager
Applications used
  • Zylo
  • Zoom
  • Figma
  • Microsoft 365
  • ChatGPT Enterprise
Business outcome
Seats that go back before the renewal, not after

The problem

Every renewal starts with a guess at how many seats are used

  • Sign in to each admin console and export the user list
  • Sort by last active date and guess who still needs a seat
  • Message each inactive user and wait to hear back
  • Downgrade or remove seats one admin console at a time
  • Rebuild the seat count by hand before every renewal
  • Find leavers still holding AI tool seats months later

Triage

However reclamation starts, it runs the right procedure

Seat questions show up as renewal alerts, finance messages, leaver lists, and invoices. Stepwork reads each one and starts the procedure that answers it.

How it arrives
  • ZyloRenewal alertUpcoming renewal · Zoom Workplace Licenses: 250 · Notice by: Jan 2 Owner: ITUGoes to Pre-renewal usage
  • SlackFinance messagefigma renews in march and the quote says 140 editors. do we really have 140 people designing?UGoes to Pre-renewal usage
  • SlackChat messageare we still paying for adobe for the people who moved off the video team? nobody's opened premiere in monthsRGoes to Weekly seat reclamation
  • OktaLeaver listDeactivated this month · 9 users Includes: d.osei, k.wright, p.lambertAGoes to AI tool seats
  • OutlookInvoice emailGitHub · Receipt Copilot Business · 85 seats Period: Nov 1 – Nov 30AGoes to AI tool seats
Where it goes
  • RWeekly seat reclamationFromRuns inExcelZoomFigmaAdobe Creative CloudSlack
  • AAI tool seatsFromRuns inOktaChatGPT EnterpriseCursorGitHubSlack
  • UPre-renewal usageFromRuns inZyloZoomMicrosoft 365AtlassianSlack

Systems

Usage from the screens your integrations don't read

Your SaaS management tool knows what you pay for and when it renews. Usage only shows up where its integrations reach. Stepwork reads seat types and last active dates from each app's admin console with a login your team grants, and makes the change there too.

  • SaaS management: Zylo, Productiv, Torii
  • Admin consoles where seats come back: Zoom, Figma, Microsoft 365, Google Workspace, Adobe Creative Cloud, Miro, Atlassian, Dropbox
  • AI and developer tools: ChatGPT Enterprise, Cursor, GitHub
  • Identity and HR: Okta, Microsoft Entra ID, Workday, BambooHR
  • Where the results go: Slack, Microsoft Teams, Excel
  • Zylo
  • Productiv
  • Torii
  • Zoom
  • Zylo
  • Productiv
  • Torii
  • Zoom
  • Zylo
  • Productiv
  • Torii
  • Zoom
  • Zylo
  • Productiv
  • Torii
  • Zoom
  • Zylo
  • Productiv
  • Torii
  • Zoom
  • Zylo
  • Productiv
  • Torii
  • Zoom
  • Adobe Creative Cloud
  • Miro
  • Atlassian
  • Dropbox
  • ChatGPT Enterprise
  • Cursor
  • Adobe Creative Cloud
  • Miro
  • Atlassian
  • Dropbox
  • ChatGPT Enterprise
  • Cursor
  • Adobe Creative Cloud
  • Miro
  • Atlassian
  • Dropbox
  • ChatGPT Enterprise
  • Cursor
  • Adobe Creative Cloud
  • Miro
  • Atlassian
  • Dropbox
  • ChatGPT Enterprise
  • Cursor
  • Adobe Creative Cloud
  • Miro
  • Atlassian
  • Dropbox
  • ChatGPT Enterprise
  • Cursor
  • Adobe Creative Cloud
  • Miro
  • Atlassian
  • Dropbox
  • ChatGPT Enterprise
  • Cursor
  • Microsoft Entra ID
  • BambooHR
  • Microsoft Teams
  • Excel
  • Microsoft Entra ID
  • BambooHR
  • Microsoft Teams
  • Excel
  • Microsoft Entra ID
  • BambooHR
  • Microsoft Teams
  • Excel
  • Microsoft Entra ID
  • BambooHR
  • Microsoft Teams
  • Excel
  • Microsoft Entra ID
  • BambooHR
  • Microsoft Teams
  • Excel
  • Microsoft Entra ID
  • BambooHR
  • Microsoft Teams
  • Excel

Example procedures

Three ways seats come back, card by card

One reclaims inactive seats every week, one keeps AI tool seats matched to the people using them, and one sizes each renewal on real usage before the notice date. Swap in Teams, your identity provider, or Torii above each one and the steps stay the same.

Weekly inactive-seat reclamation across every admin console

Every Monday Stepwork works through your reclamation list, reads each seat's last active date in the app's admin console, and warns anyone past the threshold in Slack. Seats still inactive after the grace period are downgraded or removed, and the savings get added up.
  • Excel
  • Zoom
  • Figma
  • Adobe Creative Cloud
  • Slack
Swap in your systemsThe steps stay the same. Only the screens change.
Team chat
Weekly inactive-seat reclamation across every admin console
Extraction
Excel

Read the apps on the reclamation list

Scheduled · Mondays at 7:00

Extracted variables

  • app_name
  • inactive_days
  • grace_days
  • seat_cost
Extraction

Read each seat's last active date

Input variables

  • app_name

Extracted variables

  • seat_rows
Rule logic

Is any seat inactive past the threshold?

Input variables

  • seat_rows
  • inactive_days

Paths

  1. If a seat's last active date is older than the app's thresholdThen: Warn newly inactive users in Slack
  2. OtherwiseThen: Add up seats reclaimed and monthly savings
Execution
If any are inactive
Slack

Warn newly inactive users in Slack

Input variables

  • app_name
  • seat_rows

Output

  • warned_users
Execution
If any are inactive

Downgrade seats still inactive after the grace period

Input variables

  • app_name
  • seat_rows
  • grace_days

Output

  • reclaimed_seats
Summary

Add up seats reclaimed and monthly savings

Input variables

  • reclaimed_seats
  • seat_cost
  • warned_users

Output

  • savings_summary
Execution
Slack

Post the savings to IT and Finance in Slack

Input variables

  • savings_summary

Drag to explore · pinch to zoom

Step by step

  1. 1
    The reclamation list comes in
    Stepwork reads the list IT and Finance keep in Excel: each app, how many days without activity counts as inactive, how long the grace period is, and what a seat costs a month. Each row is one pass through the loop.
  2. 2
    Each admin console gets read
    Inside the solid frame, Stepwork signs in to the app's admin console and reads every paid seat with its type and last active date, including apps your SaaS management tool has no integration for.
    Repeats: For each app on the list · 15 apps
  3. 3
    The rule checks the threshold
    If any seat's last activity is older than the app's threshold, the run takes the top path. If every seat is active, every seat is kept and nothing changes in the app.
    • If any are inactiveWarn newly inactive users in Slack
    • If every seat is activeAdd up seats reclaimed and monthly savings
    Repeats: For each app on the list · 15 apps
  4. 4
    Inactive users hear first
    Only on the top path: each user who just went past the threshold gets a message in Slack saying the seat goes back after the grace period unless they use it.
    Only on this path: If any are inactiveRepeats: For each app on the list · 15 apps
  5. 5
    Seats past the grace period go back
    Seats warned in an earlier run that are still inactive get downgraded or removed with the flow recorded for that app, like a Zoom license to Basic or a Figma editor to viewer. Anyone who came back keeps their seat.
    Only on this path: If any are inactiveRepeats: For each app on the list · 15 apps
  6. 6
    The savings get added up
    Both paths meet here. After the last app, the Summary card counts the seats reclaimed in each app and multiplies them by that app's monthly seat cost.
  7. 7
    IT and Finance see it
    The totals go to the IT and Finance channel in Slack, with each seat listed, so the savings match what changed in each app.

Field map

FromTo
ZoomUsers: licensed, last sign-inSlackWarning to the userOnly past the app's threshold
FigmaMembers: editor seat, last activeFigmaSeat changed to viewerStill inactive after the grace period
ExcelReclamation list: monthly seat costSlackSavings summary: monthly savings

AI tool seat governance across ChatGPT Enterprise, Cursor, and GitHub Copilot

On the 1st of the month Stepwork reads who is active in Okta, then reads every seat in ChatGPT Enterprise, Cursor, and GitHub Copilot. Seats held by leavers or unused for 30 days are removed, and the list goes to IT and Finance in Slack.
  • Okta
  • ChatGPT Enterprise
  • Cursor
  • GitHub
  • Slack
Swap in your systemsThe steps stay the same. Only the screens change.
Identity provider
Team chat

Step by step

  1. 1
    Stepwork reads who is active
    It reads every active user from Okta once, so each AI tool's seats are matched against the same list.
  2. 2
    Each AI tool gets read
    Inside the solid frame, Stepwork signs in to the tool's admin settings and reads every seat with its last active date. In Cursor it reads each member's spend too, and for Copilot it reads the seats in GitHub's billing settings.
    Repeats: For each AI tool · 3 tools
  3. 3
    The rule matches seats to people
    If any seat belongs to someone who isn't active in Okta, or hasn't been used in 30 days, the run takes the top path. If every seat is in use, they all stay.
    • If any left or went idleRemove those seats in the tool's admin settings
    • If every seat is in useList each seat removed and why
    Repeats: For each AI tool · 3 tools
  4. 4
    Idle seats come back
    Only on the top path: the recorded flow removes those seats in the tool's admin settings, the same way an admin would, so each one is free for the next person who needs it.
    Only on this path: If any left or went idleRepeats: For each AI tool · 3 tools
  5. 5
    The month gets listed
    Both paths meet here. After the last tool, the Summary card lists each seat removed, by tool and person, and whether it was a leaver or an idle seat.
  6. 6
    IT and Finance see it
    The list goes to IT and Finance in Slack, so a team lead who needs a seat back can say so in the thread.

Field map

FromTo
OktaUsers: email, statusChatGPT EnterpriseMembers: emailMatched once per tool
CursorMembers: last active, spendSlackMonthly seat list
GitHubCopilot seats: last activityGitHubCopilot seat removedLeavers and seats idle for 30 days

Pre-renewal usage evidence for every renewal coming up in Zylo

Every Monday Stepwork reads the renewals coming up in Zylo, reads real usage from each app's admin console, works out how many seats the team needs, and sends that number to the renewal owner in Slack before the notice date.
  • Zylo
  • Zoom
  • Microsoft 365
  • Atlassian
  • Slack
Swap in your systemsThe steps stay the same. Only the screens change.
SaaS management
Team chat

Step by step

  1. 1
    The renewals come in
    Stepwork reads each renewal in Zylo with a notice date in the next 90 days: the app, the seats on the contract, the notice date, and the owner. Each renewal is one pass through the loop.
  2. 2
    Usage comes from the app itself
    Inside the dashed frame, Stepwork signs in to the app's admin console and reads how many seats are assigned and how many were used in the last 90 days, even where Zylo has no usage integration for that app.
    Repeats: For each renewal before its notice date · 5 renewals
  3. 3
    The right-size number gets worked out
    The Script card compares the seats on the contract with the seats actually used and works out the count to renew, with the same math for every app.
    Repeats: For each renewal before its notice date · 5 renewals
  4. 4
    The owner gets the number
    The renewal owner gets a message in Slack with the seats paid for, the seats in use, the right-size number, and the notice date to act by.
    Repeats: For each renewal before its notice date · 5 renewals
  5. 5
    The week's renewals get listed
    After the last renewal, the Summary card lists every app sized this week and how many seats each one could drop.

Field map

FromTo
ZyloRenewal: seats on contract, notice dateSlackRight-size message: paid for, decide by
ZoomUsers: licensed, last sign-inSlackRight-size message: seats in use
Microsoft 365Licenses: purchased, assignedSlackRight-size message: seats assigned

Flows

The seat flows these procedures are built from

Each flow is one recorded check or change in one app. Procedures run them on a schedule, and any of them can also run on its own from a request.

  • Zoom
    Zoom

    Downgrade licensed user to basic

    Changes a user's Zoom license from licensed to basic, reclaiming the paid seat.

    Execution · Slack request
  • Figma
    Figma

    Downgrade editor to viewer

    Changes a member's seat from editor to viewer in Figma admin, reclaiming the paid seat.

    Execution · Slack request
  • Microsoft 365
    Microsoft 365

    Remove license and convert mailbox to shared

    Converts a departed user's mailbox to a shared mailbox and removes their paid license in the admin center.

    Execution · Slack request
  • Slack
    Slack

    Deactivate expired guest accounts

    Reviews guest accounts against their intended end dates and deactivates those past expiry.

    Execution · Scheduled
  • Zylo
    Zylo

    Extract license utilization for renewal prep

    Extracts seat assignment, active usage, and engagement for the named app ahead of its renewal negotiation.

    Extraction · Slack request
  • Productiv
    Productiv

    Extract reclaimable licenses report

    Extracts licenses with no meaningful engagement in the window, with reclaimable counts and annualized value.

    Extraction · Scheduled
  • Adobe Creative Cloud
    Adobe Creative Cloud

    Extract users with unused licenses

    Extracts license holders with no product activity in 60 days from admin reports.

    Extraction · Scheduled
  • Adobe Creative Cloud
    Adobe Creative Cloud

    Remove license from user

    Removes a Creative Cloud license assignment in the Adobe admin console, freeing the seat.

    Execution · Slack request
  • Miro
    Miro

    Downgrade member to free-restricted

    Changes a member from a full license to a free-restricted seat in Miro admin.

    Execution · Slack request
  • ChatGPT Enterprise
    ChatGPT Enterprise

    Extract seat usage

    Extracts workspace members with last-active dates from admin settings.

    Extraction · Scheduled
  • ChatGPT Enterprise
    ChatGPT Enterprise

    Remove member from workspace

    Removes a departing member from the ChatGPT Enterprise workspace, freeing the seat.

    Execution · Slack request
  • Cursor
    Cursor

    Extract seat usage with spend

    Extracts team members with usage and spend data from Cursor admin settings.

    Extraction · Scheduled
  • Cursor
    Cursor

    Remove member

    Removes a departing member from the Cursor team, freeing the seat.

    Execution · Slack request
  • GitHub
    GitHub

    Extract Copilot seat activity

    Extracts Copilot seat assignments with last-activity dates from org billing settings.

    Extraction · Scheduled
  • GitHub
    GitHub

    Remove Copilot seat

    Removes a user's GitHub Copilot seat assignment, stopping the per-seat charge.

    Execution · Slack request
  • Dropbox
    Dropbox

    Extract member activity and storage

    Extracts members with storage used and last-activity dates into a table.

    Extraction · Scheduled
See every license & seat management flow in the Marketplace

More procedures

More license procedures

Ready-made procedures in the Marketplace for utilization reports, reclamation drives, and seat reviews by team.

  • ZyloProductivSlack
    Zylo · Productiv · Slack

    Quarterly license reclamation drive

    Quarterly, extracts underutilized licenses from Zylo and reclaimable seats from Productiv, sends each app owner their reclamation candidates with usage evidence, and compiles confirmed reclamations into a savings report for the renewal file.
  • Google WorkspaceMicrosoft 365Atlassian2 more
    Google Workspace · Microsoft 365 · Atlassian + 2 more

    Monthly license utilization report

    Extracts license usage from Google Workspace, Microsoft 365, Atlassian, Zoom, and Adobe on the first of the month, consolidates seats-owned versus seats-active per platform, and posts the utilization table with waste estimates to the IT leadership channel.
  • FigmaMiroSlack
    Figma · Miro · Slack

    Design tool seat optimization

    Quarterly, extracts Figma editor usage and Miro member activity, confirms downgrades with design leads, and converts inactive editors to viewers and dormant members to free-restricted with savings totals.
  • GitHubSlack
    GitHub · Slack

    Copilot seat optimization cycle

    Extracts Copilot seat activity monthly, confirms dormant seats with engineering leads in Slack, and removes approved unused seats with the savings noted.

Why Stepwork

Every seat it removes traces back to a run

SaaS management tools see usage where their integrations reach. Stepwork is a deterministic agent platform: it signs in to each admin console, reads last active dates from the screens, and runs the steps you recorded the same way every week. Every run records which seats were read, who was warned, which seats were removed, and when. Credentials stay in your vault, and a seat only changes when a procedure's rule says it should.

Deterministic agentsProceduresCredentials
Book a Demo

Related use cases

More use cases

  • Vendor renewal managementStepwork reads renewal dates, notice periods, and usage from your tools each week, gets owners to decide before the deadline, and runs every new vendor through the same checks.Learn more
  • Month-end close and collections automationStepwork reads your AR aging, sends each overdue invoice the right notice, chases missing receipts before close, and checks bills against POs, in any accounting system.Learn more
  • Data warehouse extractionStepwork pulls reports from admin consoles, ERPs, and vendor portals that have no API or connector, on a schedule, and loads the rows into Snowflake, Databricks, or S3.Learn more
See every use case

FAQ

Common questions

  • Compare each seat's last active date with a threshold you set, app by app. Stepwork reads that date from each admin console on a schedule, including apps your SaaS management tool has no integration for, and lists every seat past the threshold.
  • No. Zylo, Productiv, and Torii stay where your app list, contracts, and renewals live. Stepwork reads usage from the admin consoles their integrations don't reach and makes the seat changes in those apps, so the numbers in your SaaS management tool cover more of what you pay for.
  • Each app gets the gentlest step it offers. A Zoom user moves to Basic and keeps their account, and a Figma editor becomes a viewer who can still open their files. Every user is warned in Slack or Teams first and keeps the seat if they use it during the grace period.
  • It depends on how many seats sit unused and what each one costs. The weekly procedure on this page works it out from your own numbers: each seat reclaimed times its monthly price, posted to IT and Finance after every run.
  • Yes. It signs in to each admin console the way an admin does, with a login read from your vault, and makes the change on screen. It doesn't need SCIM, an API, or a connector.
    Credentials
  • If you want it to. The weekly procedure warns each inactive user in Slack or Teams and waits out the grace period you set. A seat only goes back if the user stays inactive, and every change is in the run record.

The math

What manual license reclamation costs IT and Finance

Example volumes for a team reviewing seats in 15 paid apps. Swap in yours.

Illustrative estimate, not a quote. These are example volumes and typical hand times, not a customer's results. Your numbers will differ, and we can work them out with you.
The manual taskTimes a weekMinutes eachHours a week
Export seats and last active dates from an app4151
Message an inactive user and track the reply1541
Downgrade or remove a seat in an admin console1251
Build a usage count for an upcoming renewal11202
Hours a week
5
Hours a year
250
Of one full-time person
13%
Example volumes, not a customer's numbers. Minutes are the typical time to do each task by hand. Hours a year assume 50 working weeks.

See it run on a process you already repeat

Bring one. We will show you what it looks like as a flow and what each run records.

Book a Demo
Stepwork

Deterministic agents for work that must run the same way every time.

ProcedureContainersDeterministic AgentsMarketplaceUse CasesIndustriesSecurityClaude Co-Work AlternativeStepwork MCPAngelList Case StudyFAQ
Terms and ConditionsPrivacy PolicyData Processing AgreementSubprocessors

2261 Market Street #4481, San Francisco, CA 94114, USA

Loot Discount inc dba Stepwork

© 2026 Stepwork. All rights reserved.