Find the Bitwarden seats nobody uses and stop paying for them

By General Input

Once a month we check every password manager account for real activity, then hand you a costed list of the seats you can safely stop paying for.

Integrations

  • Bitwarden
  • Linear
  • Gmail

Type

Agentic Task

Categories

  • Finance
  • Operations

Once a month, on the first Monday at 9am, find the Bitwarden seats we are paying for but nobody is actually using, and turn that into a reclamation proposal I can approve. You never make the change yourself.

Start with Bitwarden's Retrieve Organization Subscription to read how many Password Manager seats we actually purchased, along with the autoscale ceiling. That purchased seat count is the denominator for the whole report, so read it rather than asking me to hard-code it.

Then call List Members to capture every account with its name, email, role, status and two-factor state. Member roles and statuses come back as integers, so resolve them against the enum table documented on the List Members operation instead of assuming which number means Invited, Accepted, Confirmed or Revoked.

Next work out who has actually done anything, using List Events across the previous 90 days. The event log pages with a continuation token, so keep following it until the token comes back null. A single query can only span 367 days, so a 90 day window is safe. If the organization is small, query per member using the actor filter; if it is large, make one date-ranged pass and group events by acting member, using the actor filter only to spot-check anyone whose result looks ambiguous. Count only events where the member is the acting user, and ignore events that merely reference them as the target, such as an administrator editing their membership. Otherwise someone who was recently edited by IT but never logged in will look active when they are not. Remember that client-side events flush to the server roughly every 60 seconds, so treat the last minute or two as incomplete.

Sort the waste into three buckets, placing each account in at most one. First, members sitting in Revoked status who are still holding a paid seat. Second, invitations sent more than 30 days ago that were never accepted. Third, confirmed members with zero qualifying events in the last 90 days.

Then do the seat math. Reconcile occupied seats against the purchased seat count from the subscription rather than assuming the two agree, and state plainly how many seats are reclaimable. Multiply that by our per seat rate, which I will supply, and show the value both per month and per year. If the reconciliation does not add up, say so in the report rather than quietly rounding.

File the result as a Linear issue using Create Issue. Title it with the month and the headline number, for example "Bitwarden seat reclamation, March 2026: 11 seats, $792 per year". In the body give me a section per bucket with a named line item per account showing the person, their role, their status, when they were last active, and a recommended action of Remove Member, Revoke Member Access, or leave alone. Prefer Remove Member for revoked seats and for stale unaccepted invitations, and prefer the reversible Revoke Member Access for merely dormant confirmed members. Open the issue with a clear note that nothing has been changed and every line needs a human decision.

Any dormant account holding an Owner or Admin role should be recommended as leave alone with a short reason, because break glass administrator logins and executive accounts are quiet by design and removing one is exactly the mistake this report exists to prevent.

Finally, send the same summary to the IT owner with Gmail's Send a Message, putting the reclaimable seat count and the dollar figure in the subject line and a link to the Linear issue in the body.

You must never call Remove Member, Revoke Member Access, or Update Organization Subscription. This workflow only reads and reports. A dormant account can belong to an executive or a break glass admin, so every line stays a recommendation until a human approves it.

Related prompts

Explore more prompts
Win back LiveChat visitors whose chats went unansweredChase the paperwork every new client and vendor still owesFile Gmail attachments into storage with names you can findCatch feature flags that never got switched on in productionCandidate rediscovery desk for your archived Lever applicantsLaytime and demurrage claim workspace for chartering opsKajabi customer support console for member access fixesRun your application review round on Jotform submissionsWeekly alert noise review board for incident.io on-callMorning triage board for your Kernel browser agent runs