business

Verdict

Submitted 5/22/2026, 1:06:54 AM · Completed 5/22/2026, 1:07:50 AM

5.5
pivot
The idea

How to actually audit Claude Teams seat usage (the dashboard, Admin API, and account team all let me down — here's the workaround

Pain point
Claude Teams admins cannot accurately identify dormant seats due to incomplete dashboard data and API limitations.
Who has this problem
Claude Teams administrators managing large organizations
Contradiction (TRIZ)
Need for detailed user activity insights vs. lack of accessible APIs and dashboard limitations
Ideal final result
A comprehensive view of user activity across all products with easy access to detailed analytics
Suggested solution
A tool that can intercept and analyze the undocumented API endpoints used by the Claude admin dashboard to gather complete user activity data, including both chat and Claude Code usage.
Show original source text →
TL;DR — If you're a Claude Teams admin trying to identify dormant seats, the dashboard won't tell you, the documented Admin API can't see your org, and the account team didn't reply to me for weeks. You can reconstruct it by replaying the admin dashboard's own internal endpoints from your browser. Code below. Important gotcha: Claude Code activity is in a completely separate namespace from chat — if you only query the chat rankings, every Claude Code user looks inactive. \--- I run admin on a \~150-seat Claude Teams org. Dashboard said \~90% MAU. Our SSO logs only saw \~60% of users. I wanted to know who the gap was — so I could reclaim or coach. Why the obvious paths don't work \- The admin dashboard has aggregate MAU/WAU/DAU and a "top 10" widget. No per-user last-active. No CSV export. \- The Anthropic Admin API (sk-ant-admin01-… keys at console.anthropic.com) sounds promising. It is not. It only sees your Console organisation (the API platform). It does not see your Claude Teams subscription. /v1/organizations/users returned exactly one user — me, the admin who minted the key. The 150-seat Teams org is invisible to it. \- The account team never responded. What does work: replay the dashboard's own API The claude.ai admin UI calls undocumented endpoints scoped to your org UUID. You can find that UUID in your browser cookies as lastActiveOrg, or in any XHR on the admin pages. Authentication is just your sessionKey cookie. The endpoints I needed: GET /api/organizations/<org-uuid>/members\_v2/offset=0&limit=100&types\[\]=member GET /api/organizations/<org-uuid>/analytics/activity/overview GET /api/organizations/<org-uuid>/analytics/users/rankings?metric=<m>&limit=100 GET /api/claude\_code/metrics\_aggs/users?organization\_uuid=<org-uuid> &start\_date=YYYY-MM-DD&end\_date=YYYY-MM-DD&granularity=daily&customer\_type=claude\_ai&subscription\_type=team&limit=200 Valid metric values on the rankings endpoint: messages, projects, artifacts, spend. The big gotcha — read this if nothing else Analytics/users/rankings does NOT include Claude Code activity. If you query metric=messages alone, every Claude Code user in your org appears completely inactive. I almost flagged myself as a dormant seat — I'm an active daily Claude Code user but never use the chat UI. Claude Code usage lives at /api/claude\_code/metrics\_aggs/users and returns per-user last\_active, total\_sessions, total\_cost, total\_lines\_accepted. Always union both lists to build a real "active in any product" view. Other quirks worth knowing \- analytics/users/rankings is hard-capped at top 100. offset, page, cursor, after, skip — all silently ignored. Sort order can't be flipped. You can see the top 100 by metric but not the tail. The endpoint still tells you total\_count, so you know how many actives exist beyond your visibility. \- members\_v2 does paginate properly. \- members\_v2 records have created\_at and updated\_at but no last\_active field. updated\_at only moves on role/seat-tier changes — don't use it as an activity proxy. \- product\_filter=claude\_code works on the timeseries endpoint; claude\_web, api, mcp, etc. don't. Minimal Python to reproduce import urllib.request, json ORG = "<your-org-uuid>" # from lastActiveOrg cookie SK = "<your sessionKey cookie>" # from claude.ai cookies — treat as secret def get(url): r = urllib.request.Request(url, headers={ "Cookie": f"sessionKey={SK}", "anthropic-client-platform": "web\_claude\_ai", "User-Agent": "Mozilla/5.0", }) return json.loads(urllib.request.urlopen(r).read()) \# 1. Member list (paginates) members, off = \[\], 0 while True: b = get(f"https://claude.ai/api/organizations/{ORG}/members\_v2" f"?offset={off}&limit=100&types%5B%5D=member") members.extend(b\["data"\]) if not b\["pagination"\]\["has\_more"\]: break off += 100 \# 2. Per-user chat rankings (top 100 by messages) chat = get(f"https://claude.ai/api/organizations/{ORG}/analytics/users/rankings" f"?metric=messages&limit=100")\["users"\] \# 3. Per-user Claude Code activity — DON'T SKIP THIS cc = get(f"https://claude.ai/api/claude\_code/metrics\_aggs/users" f"?organization\_uuid={ORG}&start\_date=2026-04-22&end\_date=2026-05-22" f"&granularity=daily&customer\_type=claude\_ai&subscription\_type=team" f"&limit=200")\["users"\] active\_emails = {u\["email\_address"\].lower() for u in chat} \\ | {u\["email"\].lower() for u in cc} dormant\_candidates = \[ m\["member"\]\["account"\]\["email\_address"\] for m in members if m\["member"\]\["account"\]\["email\_address"\].lower() not in active\_emails \] print(len(dormant\_candidates), "candidates") Caveats / honesty notes \- These are undocumented internal endpoints. Anthropic could change them at any time. Fine for a periodic audit; don't build production tooling on top. \- Your sessionKey is effectively "log in as you" until expiry. Don't paste it anywhere. Sign out after running this to invalidate. \- Because rankings cap at top 100, you can't definitively name every dormant seat from this alone. You narrow to a candidate set and then DM the candidates. If anyone from Anthropic is reading: please ship a documented per-user activity export or a last\_active field on the members API. Every Claude Teams admin needs this and is currently either flying blind or doing what I did. If you've found a better way, please share — happy to be wrong.
TRIZ inventive level: 3/5· Principles: parameter changes, mechanical interaction
Synthesis verdict
**Pivot**: The idea of building a tool to help Claude Teams admins identify dormant seats by leveraging undocumented internal API endpoints has potential, but it requires significant adjustments to mitigate the risks and limitations. The concept is feasible, and the market need is real, but the reliance on undocumented APIs and manual workarounds severely limits scalability and longevity. The solution must be reworked to address these concerns, such as exploring official API access or developing a more robust and scalable approach.

Strengths

  • Real, urgent, and unmet need among Claude Teams administrators
  • High perceived value and low friction to adopt
  • Massive upside if Anthropic eventually adopts it as a feature
  • Near-zero-cost solution with strong unit economics
  • Potential for cost savings and efficiency gains

Weaknesses

  • Reliance on undocumented, unstable APIs
  • Manual workarounds limit scalability and introduce operational overhead
  • Regulatory or platform changes could immediately render the solution obsolete
  • Niche appeal constrains the customer base and exacerbates churn risks
  • Lack of a sustainable moat and high maintenance burden reduce long-term defensibility

Best angle

The solution should focus on developing a more robust and scalable approach, such as exploring official API access or creating a polished product with a sustainable moat, to mitigate the risks and limitations of relying on undocumented internal API endpoints.

Panel verdicts

Viability

meta/llama-4-maverick-17b-128e-instruct

8.0

The tool's effectiveness relies on correctly combining data from multiple undocumented API endpoints to get a comprehensive view of user activity.

The idea is to build a tool that helps Claude Teams admins identify dormant seats by leveraging undocumented internal API endpoints. The concept is feasible for a solo or 2-person team to build in 4-12 weeks. The provided Python code serves as a good starting point, and the required technical expertise is relatively low. However, there are some caveats to consider: the undocumented endpoints may change, and the sessionKey cookie is sensitive information. Additionally, the rankings endpoint is capped at top 100, which limits the accuracy of identifying dormant seats. Despite these limitations, the tool can still provide value by narrowing down the candidate set. The biggest challenge lies in handling the quirks of the undocumented endpoints and ensuring the tool remains functional if Anthropic changes the API. Overall, the technical complexity is moderate, and the timeframe is realistic for a small team.

Competition

nvidia/nemotron-3-nano-omni-30b-a3b-reasoning

7.0

Only by scraping undocumented internal APIs can an entrant reveal true per‑user activity and differentiate from existing admin tools, but this creates a fragile, non‑scalable advantage.

The idea solves a genuine pain point for Claude Teams administrators by exposing activity data that the official UI and documented APIs deliberately hide. Existing competitors—such as generic SaaS admin consoles (e.g., Slack, Microsoft Teams) and Anthropic's own limited Admin API—do not provide per‑user last‑active or Claude Code usage metrics, leaving admins to rely on aggregate dashboards or manual outreach. By reverse‑engineering the undocumented internal endpoints, the entrant can compile a unified view of chat and code activity, identify dormant seats, and enable targeted coaching or seat reclamation. This differentiation is real because no current solution offers a comparable, out‑of‑the‑box export of granular, cross‑product activity. However, durability is weak: the reliance on undocumented, session‑based endpoints makes the approach fragile; any change to API paths, authentication, or rate limits could break the script, and Anthropic could withdraw access without notice. Moreover, the solution is a DIY script rather than a polished product, limiting its market appeal and defensibility. While the niche need is clear and the method currently works, the lack of a sustainable moat and the high maintenance burden reduce the long‑term defensibility, warranting a mid‑range score rather than a high one.

Risk

nvidia/llama-3.3-nemotron-super-49b-v1

2.0

Reliance on undocumented, unstable APIs and manual workarounds severely limits scalability and longevity.

The venture's viability is severely threatened by its reliance on undocumented, ephemeral endpoints, coupled with the lack of a scalable, authorized data access method. Regulatory or platform changes could immediately render the solution obsolete. Furthermore, the need for manual intervention (e.g., sessionKey handling, post-script investigation of 'dormant candidates') limits scalability and introduces significant operational overhead, deterring broad adoption. The niche appeal (only to Claude Teams admins with specific pain points) also constrains the customer base, exacerbating churn risks if the workaround is invalidated.

Market

qwen/qwen3-next-80b-a3b-instruct

9.0

Claude Teams admins are flying blind on seat utilization because Anthropic hides user-level activity data, forcing them to reverse-engineer internal APIs — a clear signal of an unmet enterprise need with real budget at stake.

This idea targets a real, urgent, and unmet need among Claude Teams administrators managing 50+ seats — a segment likely numbering in the tens of thousands globally, given Anthropic’s enterprise growth. These admins are financially responsible for seat utilization, yet Anthropic provides zero visibility into per-user activity beyond aggregated dashboards. The 30% gap between SSO logins and claimed MAU represents real wasted budget — seats that could be reclaimed, reassigned, or used for coaching. The fact that admins are reverse-engineering undocumented APIs proves demand is strong and underserved. The gotcha about Claude Code being siloed from chat activity is particularly valuable: it reveals a systemic blind spot that even power users miss, making this solution not just useful but necessary for accurate auditing. While the method is brittle (relying on cookies and undocumented endpoints), it’s a stopgap for a product gap that Anthropic has ignored for months. This isn’t a niche hack — it’s a critical operational tool for any org spending $10k+/year on Claude Teams. The audience is enterprise IT, procurement, and internal AI adoption leads who care deeply about ROI and compliance. They have budget (Claude Teams starts at $30/user/month), and they’re actively seeking solutions. The fact that the author had to build this themselves, and that no official API exists, confirms market failure. This idea has high perceived value, low friction to adopt (Python script), and massive upside if Anthropic eventually adopts it as a feature. The only reason it’s not a 10 is the fragility of the implementation — but that’s a product problem, not a market one.

Monetization

mistralai/mistral-medium-3.5-128b

8.0

This exploits a high-value gap in Anthropic’s admin tooling with a near-zero-cost solution that directly ties to measurable cost savings.

This idea addresses a critical, unmet need for Claude Teams admins: identifying dormant seats to reclaim costs or coach users. The revenue model is indirect but powerful—it enables cost savings (reclaiming unused seats at ~$20-30/user/month) or efficiency gains (coaching inactive users to adopt tools). The 'product' is a script/tool (or future SaaS) that automates the undocumented API workflow, with pricing potential as a one-time license ($50-200) or subscription ($10-50/month) for enterprises. Unit economics are strong: near-zero marginal cost (API calls are lightweight), and the value captured (10-30% seat reclamation) far exceeds the price. Channels include direct outreach to Anthropic admins (Slack/Discord communities, LinkedIn), GitHub for the open-source script, or a paid wrapper with UI/alerts. Gross margins would be ~90%+ for a SaaS version. The main risk is Anthropic shutting down the undocumented endpoints, but the urgency of the problem (no official solution) and the viral potential among admins mitigate this.

Synthesized by meta/llama-3.3-70b-instruct · 10.7s