Splitmeter
AI spend by team, across tools

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.

Read-onlyNothing in your request pathTeams, not individuals

Self-hosted. The Admin key stays on your server; the browser only ever talks to Splitmeter.

In 30 seconds

How it works.

01

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.

02

See spend by team

Claude API keys, Claude Code seats, Cursor and Copilot, split by team and matched to your invoice to the cent.

03

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.

What it does

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.

reconciled dailyrotated keys roll uprevoked keys keep their history
Cost report, Sep 21$1,204.38
maya-laptop$318.44
dana-claude-code$402.19
priya-agents$401.27
12 other keys$61.63
Unattributed · code execution$20.85
Allocated$1,204.38
difference: $0.00

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.

open estimatemeasured after actingdismissals stick
SAVINGS LEDGER
Open · 8 findings$505/mo est.
Acted on · 3−$412/mo measured
Dismissed · 1intentional

“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.

alert-only by defaultnever on stale dataonly mapped keyspause switch
ENFORCEMENT LOG
16:15 · alert80% of $400
18:40 · alert100% of $400
21:02 · keys off150% · apikey_01PrIya3k
09:14 · back onby Jamie (eng manager)

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.

alert or auto-offonce per person per daysame safety rules
RUNAWAY GUARD

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.

What we don't watch

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.

NOT COLLECTED

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.

NOT REPORTED

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.

NOT SENT

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 questionThe 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.

Coverage

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.

SEATS

$164 / month

Pro and Team seats, extra spend, nowhere else in the bill.

ALREADY COUNTED

$121 / month

Claude Code on API keys, shown for context, never added twice.

UNMAPPED

1 person

A seat holder nobody owns, surfaced instead of ignored.

CURSOR

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.

COPILOT

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.

BESIDE, NOT INSIDE

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.

Read-only vs in-path

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 sitsBeside 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 downYou lose a dashboard.You lose the feature it fronts, until you change a base URL back.
Your promptsNever 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 detailNo 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 spendAbout five minutes after the fact, by turning a key off.Before the call Block or require approval. Faster than anything read-only can be.
InstallAn 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.

Start here

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.

Unique value proposition

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.

VS. THE CONSOLENative limits are per workspace, Console-only, no API. Splitmeter follows teams and keys, with alerts and an audit trail.
VS. GATEWAYSProxy tools see every request — because every request goes through them. That is a dependency in production, your prompts on someone else's servers, and no sight of subscription seats at all.
VS. COST PLATFORMSDatadog, Vantage, CloudZero and friends report AI spend alongside cloud. They watch; they don't hold the lever that turns a key off.
VS. BUILDING ITA weekend script gets you a chart. The hard parts — allocating a cost report that can't group by key, and enforcing safely — are where the weeks go.
Plans

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.

✓ available today○ planned, not built yet
CHECK

Read-only check

For anyone who wants to see their own numbers before committing to anything.

FreeOne file, about ten minutes, nothing installed.
  • ✓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
Ask for the check
COMPANY

Support and fitting

For an organisation where this number goes into budgets, chargeback or a security review.

Talk to usScoped to your organisation.
  • ✓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
Talk to Luke
Design partners: free until 31 March 2027. The first five teams get the Team plan free until then, in exchange for a 30-minute call every couple of weeks and honest feedback. After that it's $249 a month, with plenty of notice, and you can stop any time.
Fitted to how you work, within limits. Your team structure and key mapping, which alerts go where in Slack, your report format and schedule, your budget rules: we'll adapt those for you. Bigger requests (a new AI vendor, a hosted deployment) we'll scope honestly, or say no to if we can't do them well.

Splitmeter runs on your own server. Planned items are marked as planned, and this page gets updated when they ship rather than before.

Go deeper

The detail, if you want it.

Evidence, the business case, the maths and the limits. Open whichever matters to you.

Evidence

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.

$82,314.44in 48 hours, on an account that normally spent about $180 a month

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”

$600,000of model credits, burned over three weeks, unnoticed

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

98%of FinOps practitioners now manage AI spend — it was 31% two years ago

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

$7,205per employee per month, at the businesses spending most on AI

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

~5 minutesbefore usage even appears in the API you'd monitor

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.

Business opportunity

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.

01 · SPEND IS MOVING

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.

02 · THE TOOLS ARE SPLIT

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.

03 · THE CONTROLS ARE COARSE

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.

Customer segments

Who feels this first.

Read more +
Platform and engineering leads

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 number
Finance and FinOps

They 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 out
Teams whose agents outgrew the plan

Coding 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 loop
Agencies and consultancies

They 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 accurately

The 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.

What it's worth

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.

$62,400avoidable spend per year, if you fix it
$55.56per engineer per month, at that rate
$1,600incidents avoided per year (4 × the amount above)

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.

The solution

A thin layer that sits where the money is.

Read more +
READAdmin API: usage, cost, keys, Claude Code analytics. Read-only, on a five-minute loop.
ALLOCATESplit each billed line across keys by token share. Reconcile to the cent. Unmatched cost is labelled, not hidden.
DECIDEBudgets with a ladder, waste findings with dollar figures, a guard watching the hourly rate.
ACTAlert by default; turning keys off is opt-in, every action logged, nothing reversed automatically.
DEPLOYMENT

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.

WHERE IT GOES

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”.

What it can't do

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.

ClaimVerdictWhy
Request counts per engineerCan'tThe 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 stopPartlyUsage 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 keyAllocatedThe 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 tiersNo priceThose 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 loopsCan'tThe usage report is aggregated per hour, not per request. These show up only as high input or a spike — anything more needs a gateway.
AnonymityNot claimedTeams 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.
CursorCoveredReal 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 CopilotSeats onlyGitHub'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, FoundryNot yetThose bills come from the cloud provider, not from Anthropic, and each needs its own integration.
Questions we get

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.

Run it

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.

Conclusion

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.

See it with sample data

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 demo

Four colorways, keyboard-driven, and it says “sample data” on every screen.

Contact

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.