# Manage every Clerk customer workspace from one console

> See every customer account, spot the ones with no admin or stale invites, and fix roles and membership without leaving one screen.

- Workflow type: app
- Services: Clerk, Google Sheets
- Categories: Operations
- Published: 2026-08-16

## What it does

- Lists every customer workspace in one sortable table with member counts, who holds admin, and how many invitations are still waiting to be accepted.
- Flags the accounts that need attention first: workspaces where nobody has admin rights, workspaces down to a single member, and invitations nobody has responded to.
- Opens any workspace to see its members, their roles, and when each person last signed in, written in plain language instead of raw timestamps.
- Lets your ops team invite people, change roles, remove members, and clear out stale invitations, then export a dated roster to a spreadsheet for quarterly access reviews.

## What you'll need

- A Clerk account where each of your customers is set up as an organization
- A Google account with a spreadsheet you want member rosters exported to
- Someone on your team who is allowed to change customer account access

## Prompt

Build me a workspace admin console my ops team can run our B2B customer accounts from, instead of clicking through the Clerk dashboard one organization at a time. Every customer of ours is a Clerk organization. The app has two surfaces: a landing view listing every customer workspace, and a detail page for a single workspace. Scope this to membership and invitation administration only. Do not pull in billing or subscription data.

The landing view is a table of every customer workspace, loaded with the Clerk operation Get a list of organizations for an instance. Enrich each row with membership data from Get a list of all organization memberships within an instance, grouped by organization, so one instance wide read gives me a member count and a role breakdown (how many admins, how many other members) for every workspace without making one call per workspace. Pending invite counts come from Get a list of organization invitations for the current instance, counting only invitations still in a pending state. All three of these are offset paginated and return a data array alongside total_count, with limit defaulting to 10 and capping at 500, so page through with a high limit until total_count is covered rather than showing me only the first page.

Table columns: workspace name, member count, admin count, other roles, pending invitations, age of the oldest pending invitation, and when the workspace was created. Every column sortable. Give me three filters I can toggle on and off: workspaces with no admin, workspaces with only one member, and workspaces with invitations that have been sitting unaccepted.

Bake in this rule above everything else: any workspace with zero admins is a red state and pins to the top of the list regardless of the current sort, with a short line explaining that nobody in that workspace can manage the account. That is the single most valuable thing this view surfaces. Workspaces with only one member deserve a softer warning treatment, since they are one departure away from the same problem.

Clicking a workspace row opens its detail page. Show the member list with name, email, role, and last activity. Name, email identifier, and role all come off the membership records, which you can read for a single workspace with Get a list of all members of an organization. Last activity needs the underlying user record, so call Retrieve a user for each member of that one workspace and read the last sign in timestamp. Only do this on the detail page, one workspace at a time, because there is no bulk user list operation to lean on and doing it across the whole instance would be far too many calls.

Below the members list, a pending invitations panel for that workspace showing the invited email, the role they were invited as, who sent it, and how long it has been waiting. From the detail page the ops person can invite a new member with Create and send an organization invitation (let them pick the role at invite time), change someone's role with Update an organization membership, remove a member with Remove a member from an organization, and cancel an invitation with Revoke a pending organization invitation. After any of these succeed, refresh the affected data so the page reflects the change immediately, and show a clear confirmation of what happened.

Two safety rules matter. Treat any invitation older than 14 days as stale, mark it visually in both the panel and the landing table, and give it a one click revoke button so clearing them out is quick. And before removing a member who is the last remaining admin of their workspace, interrupt with an explicit warning that this leaves nobody able to manage the account, and make the person confirm deliberately rather than letting it slip through a normal confirm dialog. The same warning applies to demoting the last admin down to a regular member role.

Clerk returns every timestamp as Unix epoch milliseconds, which is unreadable to an ops person, so convert them everywhere. Show sign in recency in plain language like "Active 3 days ago", "Active 2 months ago", or "Never signed in" for someone who has an account but has never logged in, and expose the exact date on hover for anyone who needs it. Invitation ages read the same way.

Both views get an "Export roster" button that pushes the member list currently on screen to a spreadsheet using the Google Sheets Append Values operation, so we build up a dated record for quarterly access reviews. From the landing view export every workspace's members; from a detail page export just that workspace. Each appended row should carry the export date, workspace name, member name, email, role, and last activity, so a quarter of exports stacks up in one tab as a history rather than overwriting. Ask me once for the spreadsheet and tab to append to and remember it for later exports.

## How to customize

- Change the stale invitation cutoff from 14 days to whatever your team treats as overdue.
- Adjust which column the workspace table sorts by first, or add filters for the accounts you watch most closely.
- Point the roster export at a different spreadsheet or tab, for example a fresh tab each quarter.

## FAQ

### Do I need to be a developer to use this?

No. Once your Clerk account and Google account are connected, the console is a normal web page: you browse a table of customer workspaces, click one to see its members, and use buttons to invite, change a role, or remove someone.

### Does this actually change my customer accounts, or is it just a report?

It makes real changes. Invitations are genuinely sent, role changes and removals take effect immediately, and revoking an invitation cancels it for good. Browsing and sorting the table is read only, so you can look around safely before you touch anything.

### What counts as a stale invitation?

By default any invitation that has been sitting unaccepted for more than 14 days is marked stale and gets a one click revoke button. You can raise or lower that cutoff to match how your team works.

### Can it stop us from locking a customer out by mistake?

Yes. Removing the last admin of a workspace triggers a warning before anything happens, and any workspace that already has zero admins is pinned to the top of the list in red so you can fix it.

### Does this cover billing or subscriptions?

No. This console is only about membership, roles, and invitations. Seat counts versus what customers pay for is a separate job, so nothing here touches your billing system.

Use this prompt in General Input: https://www.generalinput.com/prompts/manage-every-clerk-customer-workspace-from-one-console