What your AI tools cost you, team by team.
See what Claude, Claude Code, Cursor and Copilot cost each team, matched to your actual invoice to the cent.
Self-hosted. The Admin key stays on your server; the browser only ever talks to Splitmeter.
How it works.
Run one read-only check
A single file reads your last 35 days of Anthropic billing. About ten minutes, nothing installed, nothing changed in your account.
See spend by team
Claude API keys, Claude Code seats, Cursor and Copilot, split by team and matched to your invoice to the cent.
Catch it before the bill
Budget alerts and a runaway-loop guard flag it the same day, not at month end. Alerts only, unless you choose otherwise.
Four jobs, and it's honest about each one.
Attribution that survives finance
The cost report can't group by API key, so Splitmeter splits every billed line across the keys that used it, by their share of tokens. The split uses exact decimal arithmetic and largest remainder, so each past day adds up to the invoice to the cent. Anything that can't be tied to a key — code execution, agent session runtime — lands in an Unattributed row instead of being quietly dropped.
Waste you can prove you fixed
Findings come from the token columns the API actually returns: caching barely used, cache writes never read back, one model doing everything, a day that looks like a loop. Each carries the numbers behind it and a rough monthly figure. Mark one acted on and Splitmeter records that engineer's daily spend as a baseline, then measures what happened next — so the ledger shows measured change, not just estimates.
“Prompt caching barely used — Alex Kim. Acted on by Jamie, 4 Sep. $61.20 → $38.90 a day over 14 days.”
Budgets with a ladder, not a cliff
A monthly budget per engineer — a cap has to live where a key does — reported against their team. Alerts fire at your warn threshold and again at 100%. Out of the box that is all it does: Splitmeter ships alert-only, with no code path that reaches the key-disable endpoint at all. Turning a key off is a line in your config away — ENFORCEMENT_MODE=dry_run, then live — and then keys go off at 100, 120, 150 or 200%, your call.
Turning a key off stops all that engineer's work, so nothing is ever turned back on automatically — a person decides.
The runaway guard
A budget catches the month. A stuck agent can burn a month in an afternoon. The guard watches hourly buckets and trips when someone's last two complete hours each run above ten times their normal rate. Usage data lags about five minutes, so it fires five to ten minutes in — not instant, and the page says so rather than pretending otherwise.
A key in Agents at $38.40/hour — 33× its normal $1.16/hour, two hours running.
Caught 15 minutes in: 5 min data delay + 5 min to confirm + the next check. Without it, that loop ran 10 hours and cost $386.
Nobody's name is next to a number.
The fastest way to kill a cost tool is to make it feel like a performance review. So the default unit is the team, and the per-person view isn't a tab you forgot to hide — it's off, server-side, until somebody deliberately turns it on.
Prompts, code, files
Not a policy — there is no endpoint in Splitmeter that returns them. It reads token counts, dollars, key ids and Claude Code activity counts. It makes no requests on your behalf, so your traffic never touches it.
Individual spend
Teams on the dashboard, the CSV, the Claude Code panel and every API response. Ask the API for a person and it answers 403 until the operator sets PERSON_VIEW=1. There is no switch in the UI, because the people being measured can't see what you chose.
Anywhere but Anthropic
Self-hosted: a SQLite file next to the app, an Admin key in your .env, and no telemetry home. We can't see your numbers, which also means we can't leak them.
| The engineer's question | The honest answer |
|---|---|
| Can my manager see what I personally spent? | Not by default, and not without changing a setting on the server and restarting it. Out of the box the smallest thing on the screen is your team. |
| Can anyone read what I asked Claude? | No. Not through Splitmeter, at any setting. The data it reads doesn't contain it. |
| Will a key get cut off mid-task without warning? | Enforcement ships off. Alerts come first, at 80% and at 100%; turning keys off is opt-in, and when it happens the log says who, which key and why — because somebody has to be told their key is off. Nothing re-enables itself behind your back either. |
| Is “by team” the same as anonymous? | No, and we won't pretend otherwise. A team of two is two people with a label on top, and whoever runs the server can read the database. Team reporting takes the per-person number off the screen everyone looks at. It doesn't make attribution unavailable to an administrator — the keys are still mapped, because enforcement needs it. |
Why this is the default and not a checkbox: a dollar figure next to a person's name changes behaviour — people route around the thing measuring them, and then the number in your account is wrong as well as resented. Teams keep the number useful. If your organisation has decided per-engineer figures are fine, one environment variable gets you there, and we'd suggest telling the engineers first.
Claude, Cursor and Copilot, on one page.
Splitmeter also reads the Claude Code Analytics API: sessions, lines of code, commits, pull requests and tool-acceptance rates, grouped by team like everything else. Seat spend is real money that appears in no other report, so it's shown separately — and Claude Code usage that ran on an API key is marked as already counted, because double counting your own bill is worse than not showing it.
$164 / month
Pro and Team seats, extra spend, nowhere else in the bill.
$121 / month
Claude Code on API keys, shown for context, never added twice.
1 person
A seat holder nobody owns, surfaced instead of ignored.
Per person, per day
From Cursor's Admin API in cents, and checked against Cursor's own spend figure. Agent usage you paid for with your own Anthropic key is shown but never counted twice.
Seats, honestly labelled
GitHub's Copilot endpoints return no money, so this is the seat price spread over the days held — a floor, and the page says so rather than quietly under-reporting.
One number, kept separate
Other tools sit next to the Claude figures, never mixed in. Only the Anthropic numbers are reconciled to an invoice, and a borrowed total would cost you that.
The other way to do this is a proxy. Here's the trade.
Gateway tools — Spendline.ai is the clearest example — put themselves between your apps and the model providers. That buys real things we can't match, and costs things we think most teams won't want to pay.
| Splitmeter (read-only) | A gateway / proxy | |
|---|---|---|
| Where it sits | Beside your account, reading the Admin API every five minutes. | In the request path. Every call goes through it before it reaches the provider. |
| If it goes down | You lose a dashboard. | You lose the feature it fronts, until you change a base URL back. |
| Your prompts | Never leave your account. We only ever see token counts and dollars. | Pass through a third party by definition — including your engineers' code, if you route dev tools through it. |
| Subscription seats Claude Code, Cursor, Copilot | Counted. Seat spend isn't API traffic, so we read it from the analytics API instead. | Invisible. Seat usage never passes through a gateway, at any price. |
| Per-request detail | No Aggregated per key, per day and per hour. Retry loops and tool bloat only show up as shape. | Yes Per request, per customer, per feature. Genuinely better, and the reason to choose one. |
| Stopping spend | About five minutes after the fact, by turning a key off. | Before the call Block or require approval. Faster than anything read-only can be. |
| Install | An Admin key and a JSON file. Ten minutes, no code change, nothing to roll back. | A base-URL change in every service, plus a security review of a new production dependency. |
Said plainly: if your bill is dominated by product inference and you need per-customer margin, a gateway is the better tool and you should buy one. If your bill is dominated by what your own engineers spend — API keys, coding agents, seats — a gateway can't see half of it and asks you to put a vendor in your critical path to see the rest. That is the case we're built for.
Check it against your own bill before you install anything.
One read-only command. It reads your last 35 days, checks every day adds up to your invoice to the cent, and tells you what share of your spend nobody can attribute and how much is Claude Code seats. It can't change anything in your account, contacts no other vendor, and writes a report with no names or key ids — safe to forward.
python3 splitmeter-check.pyz # one file, nothing to install; paste your Admin key when asked
Splitmeter isn't open source: email luke@splitmeter.com and I'll send you the file, usually the same day. Your key isn't shown, isn't saved, and is gone when the run ends. Needs Python 3.11+, a Claude Console organization and an org admin to create the Admin key. Reviewing it first? The code ships with a security packet (docs/security.md) that points at the exact lines making each claim true.
The only team-by-team view of AI spend, seats included, that proves itself against the invoice — and the only one that never touches your request path.
Four claims, each checkable on the demo: every key and seat attributed to the team that used it, to the cent; every past day reconciled to the cent against Anthropic's cost report; budgets that alert, and that can turn keys off only if you switch that on yourself; and an install that reads your account and changes nothing in it.
Three ways to run it.
Start with the free read-only check. If it finds something worth watching, run Splitmeter every day for one flat price, however many engineers you have.
Read-only check
For anyone who wants to see their own numbers before committing to anything.
- ✓Your last 35 days, reconciled to the invoice to the cent
- ✓How much of your spend nobody can attribute
- ✓How much is Claude Code seats
- ✓A report with no names or key ids, safe to forward
Run it every day
For a team that wants spend by team, budgets and alerts running on its own server.
- ✓Spend by team, reconciled to the invoice
- ✓Budgets and alerts; hard caps when you turn them on
- ✓Cursor and GitHub Copilot beside Claude
- ✓Waste findings and the savings ledger
- ✓Runaway guard
- ✓Claude Code seats and sessions
- ✓CSV export, Slack alerts and a weekly digest
Support and fitting
For an organisation where this number goes into budgets, chargeback or a security review.
- ✓Everything in Team
- ✓Named support with a response time
- ✓Security packet for your review
- ✓Fitted to your team structure, Slack routing and reports
- ○Hosted for you, with sign-in
- ○SSO, monthly close and chargeback export
Splitmeter runs on your own server. Planned items are marked as planned, and this page gets updated when they ship rather than before.
The detail, if you want it.
Evidence, the business case, the maths and the limits. Open whichever matters to you.
This already happens, and it's documented.
Read more +
Not hypotheticals. Five published sources: two incidents that cost real organisations real money, two industry surveys, and the vendor's own documentation. In both incidents the money was gone before anyone noticed.
A stolen Google Cloud key was used against Gemini models over 11–12 February 2026. The three-person startup in Mexico found out afterwards, from the bill. Google pointed to the shared-responsibility model and indicated it would still charge for the usage; the developer said a third of that amount would bankrupt the company. Security researchers separately found thousands of live Google API keys exposed across the web.
The Register, 3 March 2026 — “Gemini API key runs up $82,314 charge”
An attacker found a researcher's exposed instance at the AI-evaluation non-profit METR, prompted the agent running on it to reveal its API key, and used it for three weeks. METR's own account of why nobody spotted it: large token volumes are normal there, and there were no caps on token spend. Their fixes afterwards were better monitoring and spend alerts.
METR disclosure, 31 August 2026 — reported by The Hacker News and ITPro
The FinOps Foundation surveyed 1,192 practitioners representing more than $83 billion in annual cloud spend. Managing AI cost went from a third of teams to nearly all of them in two years, and “AI cost management” is the skill teams most want to add next. The demand arrived faster than the tooling.
FinOps Foundation / Linux Foundation, 19 February 2026 — State of FinOps 2026
From card and bill-pay data across more than 70,000 US businesses: as of August 2026, 43.8% paid for Anthropic subscriptions or tokens and 39.8% paid OpenAI. Spend is wildly uneven — the heaviest 1% run thousands per employee per month, which is exactly the range where a single unattributed month hurts.
Ramp AI Index, September 2026 — data as of August 2026
Anthropic's own documentation: usage data typically appears within five minutes of a request finishing; native spend limits are set per workspace, in the Console, with no API; and the cost report cannot be grouped by API key. That combination is the structural reason a loop can run unnoticed and a bill can't be split by person without doing the work yourself.
Anthropic docs — Usage and Cost API and Workspaces
Read these honestly: the two incidents are individual published cases, not a measured failure rate, and both involved stolen keys rather than a team's own agent looping. What they establish is narrower and enough — token spend can reach five and six figures in days, and the gap is detection, not intent. The surveys establish the rest: nearly every finance team is now asked to manage this, and the money involved is no longer small.
AI is becoming a line item nobody owns.
Read more +
Three things are true at once in most engineering organisations right now, and together they make a gap.
From seats to consumption
A seat licence is predictable. Agents and coding tools bill by token, so the same team's cost can double in a week without anyone changing headcount, and nobody notices until the invoice.
One bill per vendor
Claude API keys, Claude Code seats, Cursor, Copilot. Each bills separately, each has its own console, and none of them knows who the person is on the other side.
Per workspace, not per person
Anthropic's own spend limits work per workspace, in the Console, capped at 100 workspaces. That's a fine backstop for an org. It can't tell you that one engineer's agent looped overnight.
The documented cases show what that costs when it goes wrong. The gap isn't reporting — plenty of platforms report cloud and AI spend. It's attribution fine enough to act on, with something attached to it: a budget that does something, waste that gets fixed and measured, and a guard that stops a loop at 3am.
Who feels this first.
Read more +
20–200 engineers using Claude, coding agents and whatever else they signed up for. They approved the spend, they own the number, and today they can only see it in aggregate. The month-end question — “why was it $40k?” — has no answer beyond a workspace chart.
Job: explain and control the numberThey need AI spend allocated to teams and cost centres like every other vendor, reconciled to the invoice, with an export that survives an audit. A dashboard whose totals don't match the bill is worse than a spreadsheet.
Job: chargeback that ties outCoding agents and background jobs moved from "a few dollars of experiments" to a line item nobody budgeted. The spend is uneven, it arrives key by key, and one stuck loop overnight can cost more than the month it sits in.
Job: see where it goes, stop the loopThey spend on behalf of clients and rebill it. Attribution isn't a nice-to-have, it's the invoice — and it has to be defensible per client, per project, per month.
Job: bill it back accuratelyThe first buyer is the person who gets asked about the invoice. The daily user is whoever fixes the waste. Note who isn't on this list: if your spend is mostly product inference billed to end customers, a gateway serves you better — we say so above.
Put your own numbers in.
Read more +
No industry averages here — nobody's are worth much. These are your assumptions; the arithmetic is the only thing we're providing.
Splitmeter doesn't remove waste by existing — someone has to act. What it does is name the waste, in dollars, next to the person who can fix it, and then measure whether the fix worked.
A thin layer that sits where the money is.
Read more +
Self-hosted, one process
Python, SQLite, one HTML page. The Admin key never leaves your machine, no data goes anywhere else, and the whole thing runs on a laptop or a small VM. That removes the security review that usually kills a spend tool at procurement.
Coverage, then the gateway
Claude API, Claude Code, Cursor and Copilot are covered today. The natural next steps are the cloud marketplaces — Bedrock, Vertex — and an optional gateway for per-request data, which is what turns “spend went up” into “this agent re-sends 40k tokens every turn”.
The limits, up front.
Read more +
Every one of these was checked against Anthropic's docs while building. A dashboard that hides its limits is how you end up trusting a wrong number.
| Claim | Verdict | Why |
|---|---|---|
| Request counts per engineer | Can't | The usage report has no request-count field. Counting requests needs a proxy in front of the API, so Splitmeter doesn't show them at all. |
| Instant hard stop | Partly | Usage appears about five minutes after requests finish, and the only lever is turning a whole key off. Five to ten minutes, not instant — and in the default alert-only build, not at all: you get the alert and decide. |
| Dollars per key | Allocated | The cost report can't group by key. Splitmeter splits each billed line by token share and reconciles to the cent, which is exact at the day level, not per request. |
| Priority and Flex tiers | No price | Those tiers have no published rates. That usage is counted in tokens, shown as “price missing”, and kept out of cost totals rather than silently valued at $0. |
| Tool bloat, re-sent history, retry loops | Can't | The usage report is aggregated per hour, not per request. These show up only as high input or a spike — anything more needs a gateway. |
| Anonymity | Not claimed | Teams are the reporting unit, not a privacy guarantee. Small teams identify a person, and an administrator with the server can read the mapping. We say this out loud rather than selling it as anonymous. |
| Cursor | Covered | Real cost per person per day from Cursor's Admin API, in cents, reconciled against Cursor's own spend figure. Usage you paid for with your own provider key is shown but never added twice. |
| GitHub Copilot | Seats only | GitHub's Copilot endpoints return no money at all. Splitmeter spreads the published seat price over the days each seat was held and says it is an estimate. Premium-request overage is billed elsewhere and isn't read yet, so Copilot is a floor, not a total. |
| Bedrock, Vertex, Foundry | Not yet | Those bills come from the cloud provider, not from Anthropic, and each needs its own integration. |
The things worth asking first.
Can you see our prompts or our code?
No, and not by policy — by architecture. Splitmeter reads four aggregate endpoints: usage, cost, API keys and Claude Code analytics. Those return token counts, dollars and key ids. There is no endpoint in it that returns prompt or completion text, and nothing you send to Anthropic passes through us.
Is this going to feel like surveillance to my engineers?
That's the main thing we designed against. Splitmeter reports teams by default — no individual's spend appears anywhere in the product, and the per-person view returns a 403 until whoever runs the server sets PERSON_VIEW=1 and restarts. Enforcement ships off, alerts come before anything is turned off, and the tool cannot see prompts, code or what anyone was working on. What it can't do is make the underlying attribution vanish: keys map to people because enforcement needs it, so an administrator can always look. The full answer, including where it stops, is here.
Can we report per engineer if we want to?
Yes — PERSON_VIEW=1 on the server. It's an environment variable rather than a UI toggle on purpose: the people being measured can't see which way a browser switch was flipped, and a setting that quietly changes who is visible is worse than one you have to restart for. Budgets and enforcement work per engineer either way, because an API key belongs to one person.
What access does it need?
One Admin API key, created by an org admin. Everything it does is read-only except a single endpoint — setting a key's status to inactive — and in the shipped build no code path reaches it: the client refuses the call, the option isn't offered, key schedules do nothing. Enabling it is a deliberate line in your config. To be straight with you, that is a guarantee about Splitmeter, not about the credential: the Admin key you create still carries the permission at Anthropic, and only Anthropic can take that away. The key lives in a .env file on your machine and never reaches the browser.
How long does it take to install?
About ten minutes: create the key, map engineers to key ids in a JSON file, start the server. Python 3.11+ and SQLite, no build step, no external services. You can try the whole thing on fake data first with MOCK=1 and no key at all.
Could it turn off a key by mistake?
It can't, unless you turn that on: the shipped build is alert-only and never calls the endpoint. The next step up is dry run, where it writes down what it would have done and still makes no API call. In live mode it will only ever touch keys that are listed for that engineer in your own config, returned by the keys endpoint in the latest sync, and currently active. It won't act on a sync that was partial or on data older than fifteen minutes, it never turns anything back on by itself, every action is logged with a reason, and there's a pause switch that stops all enforcement for up to three days.
Does it cover Bedrock, Vertex or Microsoft Foundry?
No. Anthropic's usage and cost endpoints don't cover those platforms, and the Claude Code analytics API excludes them too. If your Claude traffic runs through a cloud marketplace, those bills come from the cloud provider and Splitmeter can't see them.
What happens when Anthropic's API is slow or rate-limits you?
Retries with backoff, then the run is marked partial and the page says "data may be incomplete, retrying". The data already stored is kept, and enforcement is suspended until a complete sync — a half-finished picture is never allowed to turn off someone's key.
Does it work for Claude Code on Pro or Team seats?
Yes. Seat usage isn't API traffic, so it comes from the Claude Code Analytics API instead: sessions, lines of code, commits, pull requests and estimated cost per person. Seat cost is shown separately from API spend, because Claude Code that ran on an API key is already in your API bill and counting it twice would be wrong.
Where does our data live?
In a SQLite file next to the app, on your machine. Nothing is sent anywhere except the requests to Anthropic's own API, and an optional Slack webhook if you configure one.
What does it cost?
The read-only check is free. Running Splitmeter every day is $249 a month, flat, however many engineers you have, and the first five design partners get it free until 31 March 2027. The plans are here.
Four steps, on your own machine.
Ask for the app
Splitmeter isn't open source. Email luke@splitmeter.com and I'll send you the app, the setup guide and the security packet.
Create an Admin API key
In the Claude Console, as an org admin: Settings → Admin keys. Regular API keys can't read usage or cost. Put it in .env; it never leaves your server.
Say who owns which key
One small JSON file maps engineers to key ids — several keys per person is normal, and old or revoked keys stay listed so their history keeps counting. Anything unmapped shows up as “Unassigned” rather than disappearing.
Start it
cp .env.example .env uvicorn app.main:app --reload # or try it with fake data first: MOCK=1 uvicorn app.main:app --reload
Python 3.11+, FastAPI and SQLite. No build step, no external services, no telemetry. Alert-only until you say otherwise.
The bill is going to keep growing. The question is whether anyone owns it.
Every team adopting Claude eventually hits the same three questions: who spent this, was any of it wasted, and what stops it happening again at 3am. The data to answer them already exists in your account — it just isn't shaped like people.
Splitmeter is that shape, and it's deliberately small: read the Admin API, allocate honestly, act carefully, say plainly what it can't do. It runs on your own machine today, on real data, alert-only, in about ten minutes.
The whole thing runs in your browser.
A frozen sample of invented data, no server and no API key — every screen, every button, including the budget editor and the enforcement log.
Open the live demoFour colorways, keyboard-driven, and it says “sample data” on every screen.
Talk to Luke.
I'm the founder, and I answer every message myself. Ask for the read-only check, ask a question, or tell me what Splitmeter gets wrong.