Your team's real Claude Code dollar burn lives in one field ccusage can't read
If everyone on the team is on their own Pro or Max plan, the dollar number people quote from ccusage is a fiction. You do not pay per token on a plan. The only real dollars are the flat subscription plus metered extra-usage once a seat blows past its quota. That second number lives in exactly one place per seat, and it is not in the local logs.
On Pro and Max plans there are only two real dollar figures: the flat subscription, and metered extra-usage (billed at standard pay-as-you-go API rates once a seat exhausts its plan quota). The live extra-usage dollars sit per seat at claude.ai/settings/usage. claude-meter reads that exact balance and prints it as Extra usage $4.20 / $50.00 (8%); run claude-meter --json on each seat and sum the values to get the true team total. ccusage's cost column estimates token list price, which is not what Anthropic invoices a plan user.
Source for the billing mechanics: Anthropic, Usage Credits for Pro and Max Plans.
There are two "dollar" numbers, and people quote the wrong one
When a teammate says "we burned $900 on Claude Code last month," ask where that came from. If it came from ccusage or a similar local-log tool, it is the published API list price of every token your sessions processed. On a plan you did not pay that. You paid your $20, $100, or $200 subscription, full stop, until the quota ran out. After that, and only after that, real metered dollars start accruing at API rates. The two numbers can be off by an order of magnitude in either direction: a heavy week that stays inside quota costs $0 extra while the token estimate reads in the hundreds; a single seat that spills into overage can quietly rack up real dollars the token table never flags as "new spend" because, to the local log, a token is a token.
For a team this matters because the question you are actually trying to answer is "what will the invoice say," and the only honest input to that is the metered extra-usage figure, summed across seats.
| Feature | ccusage (local token estimate) | claude-meter (server-truth dollars) |
|---|---|---|
| What the number means | Estimated list price of tokens your sessions used | Dollars of metered extra-usage Anthropic will invoice |
| Source of truth | Local ~/.claude/projects/**/*.jsonl session logs | claude.ai /organizations/{org}/overage_spend_limit |
| Matches your Anthropic bill | No (plan users do not pay per token) | Yes (it is the same field settings/usage renders) |
| Sees extra-usage spend | No (not in the local log) | Yes (used_credits, monthly_credit_limit, out_of_credits) |
| Knows the monthly cap and BLOCKED state | No | Yes (prints BLOCKED when out_of_credits flips true) |
| Aggregates across seats | Per-machine token tables only | --json per seat, sum with one jq line |
The exact line claude-meter prints
The brew cask ships a CLI next to the menu-bar app. Run it and you get a one-shot snapshot of the same numbers claude.ai/settings/usage renders, including the metered dollars. The extra-usage line is the one that answers the burn question.
That $4.20 / $50.00 (8%) comes from the overage_spend_limit endpoint. The credit fields arrive in cents, so the formatter divides by 100 before printing dollars (claude-meter/src/format.rs, lines 24-39). When a seat hits its cap the same endpoint returns out_of_credits: true and the line gains a BLOCKED suffix. That is the moment a developer silently loses Claude Code, not from the rolling window, but from the dollar cap.
The field, in JSON
The CLI also speaks JSON, which is what makes a team total possible. The shape mirrors the Rust structs in claude-meter/src/models.rs (OverageResponse and ExtraUsage):
Summing it across the team
claude-meter has no central server and no team dashboard, on purpose. Each seat reads only its own session and nothing leaves the machine. So the team total is something you assemble. If your developers' machines are reachable (a shared dev box, a fleet you manage, or each person just pasting their --json into a channel), the sum is one jq line:
The result is the real metered spend Anthropic will invoice, in dollars, with no token-price estimation in the path. Add your fixed subscription cost per seat on top and you have the full picture: flat plan dollars plus actual overage dollars. That is the team burn number, and it is the only one that reconciles against the bill.
When the token estimate is still the right tool
ccusage is not wrong, it answers a different question. If you want to know which sessions, projects, or models are token-heavy so you can cut waste, the local JSONL breakdown is exactly what you want, and claude-meter does not replace it. They read different data sources: ccusage reads your local Claude Code logs, claude-meter reads the server-truth quota and dollar fields. Use the local estimate to find where the tokens go; use the extra-usage dollars to know what the invoice will say. For a team that has both questions, run both.
Want a real burn number for your team, not a token estimate?
Fifteen minutes on how to wire claude-meter --json into a team total that reconciles against your Anthropic bill.
Questions teams actually ask
Frequently asked questions
How do I track my team's real dollar burn on Claude Code?
On Pro and Max plans the only real dollars are two things: the flat monthly subscription, and metered extra-usage. Once a seat exhausts its plan quota, additional usage is billed at standard pay-as-you-go API rates if that seat enabled extra-usage, otherwise it just stops. The live dollar figure for the metered part lives per seat at claude.ai/settings/usage. claude-meter reads that exact balance and prints it as a line like 'Extra usage $4.20 / $50.00 (8%)'. Run 'claude-meter --json' on each machine and sum the overage.used_credits values to get the real team total. There is no per-token charge to track on a plan, so a token-cost estimate is the wrong number.
Why can ccusage not tell me my team's dollar burn?
ccusage reads ~/.claude/projects/**/*.jsonl and multiplies token counts by published API list prices. That produces a 'cost' column, but on a Pro or Max plan you are not billed per token. You paid a flat subscription, and beyond the included quota you are billed metered extra-usage at API rates only for the overflow. So ccusage's dollar figure is an estimate of what the same tokens would cost on the raw API, which is not what Anthropic invoices a plan user. It is genuinely useful for spotting which sessions are token-heavy, it just answers a different question than 'how many dollars did we burn'.
Where exactly does claude-meter get the dollar number?
It calls claude.ai/api/organizations/{org_uuid}/overage_spend_limit (see claude-meter/src/api.rs), which returns used_credits, monthly_credit_limit, currency, and out_of_credits. Those credit fields are in cents, so the formatter divides by 100 (claude-meter/src/format.rs lines 24-39) and prints 'Extra usage $4.20 / $50.00 (8%)'. If that dedicated endpoint is not available, it falls back to the extra_usage block embedded in the usage response (is_enabled, monthly_limit, used_credits). Either way the dollars match what Settings > Usage shows you, because it is the same data.
Does claude-meter give me one combined team dashboard?
No, and I want to be honest about that. claude-meter is a per-seat tool: one menu-bar app (and CLI) per developer, each reading that developer's own claude.ai session. There is no central server that aggregates everyone. The team total is something you assemble yourself: run 'claude-meter --json' on each seat and sum overage.used_credits with jq or a tiny script. That is deliberate. There is no telemetry and no central collector, so nothing about your team's usage leaves each machine unless you choose to collect it.
We are a team on individual Pro/Max plans, not Team or Enterprise. Does the Console help?
The claude.com Console shows team-level aggregates only on Team and Enterprise plans. A lot of small teams and startups run on individual Pro and Max subscriptions instead, where there is no shared admin view of spend. That is exactly the gap this page is about: each person sees their own Settings > Usage, nobody sees the sum. claude-meter reads each seat's real extra-usage dollars and the --json output makes summing them a one-liner, without anyone upgrading to a Console plan.
What does the BLOCKED flag mean and why does it matter for a team?
When a seat hits its extra-usage cap, the overage_spend_limit endpoint returns out_of_credits: true, and claude-meter appends 'BLOCKED' to the extra-usage line. For a team that matters because a blocked seat is a developer who has silently stopped being able to run Claude Code mid-task, not because of the rolling 5-hour or weekly quota, but because their dollar cap is spent. Watching the dollar line lets you spot it before someone pings you confused about why their agent stopped.
Is this safe to run, and what does it actually touch?
It is MIT-licensed and open source, macOS 12+ only. With the browser extension it uses your existing claude.ai cookies to make one HTTPS request per minute to claude.ai and posts the snapshot to a localhost bridge on 127.0.0.1:63762. No telemetry, no analytics, nothing leaves your machine except the request to claude.ai itself. The --json output is read-only: it prints, it does not change anything on your account.
Keep reading
Claude weekly limit and extra usage: when the meter starts charging dollars
The moment plan quota runs out and metered extra-usage begins. Where the dollar handoff happens and how to see it coming.
Claude Code cost per landed PR: the yield-adjusted formula
If you want dollars per shipped unit of work, this joins ClaudeMeter utilization samples to git log --merges.
ClaudeMeter vs ccusage
The full breakdown of why local JSONL token estimates and server-truth dollars are two different numbers.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.