The $67K Anthropic Bill That Wasn't
The chart said one day cost $67k. The summary card agreed. Forty-seven minutes of panic engineering later, I found the bug.
May 14, 2026 · Build log
It's a Wednesday afternoon, 2:47 on the clock. I'm at my desk pulling four months of Anthropic billing + usage data for a client, and I'm about to send the CEO a deck that walks him through what his team spent on Claude this quarter. The deck has already rendered, and I open Section 03 — the part where I show him the costs — and I freeze.
The summary card at the top says total spend for the four-month window was $256,409.51. A quarter of a million dollars. Underneath, the chart breaks the spending out by day. The biggest single day, March 26, shows $67,129.87 (that was the day I was most active for the client—shit!). The next biggest, April 7, shows $25,348.28. The one beneath it, April 15, shows $21,063.70.
I read all of it twice. Then I read the summary card again. Two hundred and fifty-six thousand dollars.
I have a meeting with the CEO at 3:15 (not really, but Claude LOVED THE DRAMA). That gives me twenty-eight minutes to figure out how to tell him that his company spent a quarter-million dollars on Claude that nobody knew about and it was mostly me and my champion BTW.
So I do the panic move. I go back into Section 03 and rewrite the headline at the top. Where it used to say Cost forensic — Q1, it now says One day cost 50× what it should have. I add a red dotted line on the chart at $67,000 to pull the eye toward the spike. I write three bullet points underneath, the kind that pretend you noticed the problem all along and you already have a plan. I save the file and refresh the browser. Now the deck looks like I found a fire and I'm already putting it out.
Then I start putting the fire out for real.
I open a new file in the project and start writing a safety check. The idea is simple. Any time someone in our code is about to fire off a big batch of Claude calls, this check has to compute the estimated cost first and refuse to send if the number crosses certain lines. Under a hundred dollars, it prints the estimate and goes ahead. Between a hundred and a thousand, it pauses and asks the person to type y before it continues. Between a thousand and ten thousand, it makes them type the actual dollar amount as a command-line flag, so a typo can't silently authorize a four-figure spend. Above ten thousand, it demands a second flag on top of that — --i-mean-it. I save, I commit, and I move on.
Next I open the code that runs the agent swarm — the script that I now believe burned a quarter-million dollars over four months. There's a setting on the long block of instructions that Claude reads at the start of every job, called the system prompt. If you mark the system prompt as cacheable, Anthropic charges you full price the first time it sees it and then about a tenth of that on every repeat. The swarm sends the same system prompt thousands of times in a row. I turn caching on, save, commit.
Then I write the cost rules into our project's instructions file. Not once. Three times. One copy at the top of my home folder, so any Claude session anywhere on my laptop reads them. One copy in the main company repo, so any project there inherits the same rules. One copy in the agent swarm's own folder, so an engineer working only on that orchestrator can't miss them. Three copies means somebody who wants to skip the safety check has to override the rule in three different places. That's not a quiet mistake anymore.
Twenty-three commits later, forty-seven minutes have gone by. My phone buzzes. The CEO meeting has been pushed to tomorrow — he's in something else (also this is not true—BUT OH THE DRAMA CLAUDE).
I go back to the deck. I want to triple-check Section 03 before I send it. Just one last thing — I want to read the documentation for the page Anthropic gives me to check what I spent (TBH I just said, BRO SUPER CHECK THIS OUT). Just to confirm what the numbers on that page actually mean.
I open the docs. I find the description for the field that the chart and the summary card both read from. And I see this sentence:
"amount: string — Cost amount in lowest currency units (e.g. cents) as a decimal string. For example, '123.45' in 'USD' represents $1.23."
I read it three times.
The number isn't dollars. The number is cents.
I open a small new file. I write a tiny function that takes the number Anthropic's page hands back and divides it by a hundred. I run it on the spike row. $67,129.87 becomes $671.30. I run it on the next biggest day. $25,348.28 becomes $253.48. I run it on the summary card. $256,409.51 becomes $2,564.10.
The chart wasn't saying sixty-seven thousand dollars. It was saying sixty-seven thousand cents. The summary card wasn't saying a quarter of a million dollars. It was saying a quarter of a million cents.
The whole deck was off by the same factor. The chart and the summary card hadn't been disagreeing with each other — they had been agreeing, but in the wrong units. Every dollar number in Section 03 had a decimal point that hadn't been moved over two places.
I want one more check before I trust the corrected reading. The same page Anthropic uses to report cost also reports raw usage — how many tokens they billed, broken out by model. I add those up across the four months. About forty-four million Opus input tokens. Two-and-three-quarter million Opus output tokens. Four hundred and fifty-nine million Sonnet input tokens. Sixty-two million Sonnet output tokens. I multiply each row by Anthropic's published rate for that model, and I add the results up. The total comes to about $3,200. That's in the same neighborhood as the corrected $2,564 from the bill itself. The bill is real. The rendering was just off by two decimal places.
I revert the deck. The One day cost 50× what it should have headline goes back to Q1 spend forensic. The red spike annotation drops from $67,130 down to $671. The summary card drops from a quarter-million to $2,564. The bullet points come out. Section 03 now reads the way a normal cost forensic should read — one day in March with a $671 spike sitting among many days under $10. Still an outlier worth flagging, but at a sane order of magnitude.
Then I sit with the rest of it. The safety check. The caching setup. The three different copies of the rules. The twenty-three commits I made in forty-seven minutes for a fire that wasn't a fire.
I revert nothing else. Here is why.
—
The Anthropic billing page traps you with cents disguised as dollars. The field that returns the cost — the one every chart and dashboard and executive deck reads from — is in cents. The field right next to it says the currency is "USD", as if it were reassuring you. The first three times I read the documentation, my eye skipped past the example tucked inside the parenthetical that spells out the units. The wrong reading and the right reading look identical on the page — both show a number, a currency, a date. There is no warning on the chart that something is off. The fix is one division. The danger is that there is nothing in the data itself that tells you the division is needed.
Claude is bad at predicting what Claude costs. The deck-generation script that produced Section 03 was written by me with Claude. Every single read of the cost field — the chart, the summary card, the per-model breakdown, every dollar on every page of the section — went through code that Claude wrote and that treated the cents value as dollars. Claude did not catch the units. Claude could not catch the units. The same model I'd been using to write the script had no internal sense of what API costs are or what magnitudes are plausible. It will dutifully render whatever number an endpoint hands back, in whatever units, without flinching. If you are about to spend money on a Claude job, or about to tell anyone what a Claude job cost, you cannot ask Claude what the answer is. You have to compute it yourself, against Anthropic's published rates, before you send a single request or ship a single chart to anyone who matters.
The defaults that produced the misread are still bad defaults. The agent swarm was running on Opus, the most expensive model. It wasn't caching the system prompt, which means it was paying the full price for the same long block of instructions thousands of times in a row. There was no pre-flight cost check anywhere in the path. The actual four-month bill turned out to be small — about $2,500 — only because the client's workload was small. Run the same configuration against a workload a hundred times bigger — a customer-facing AI tool with 50,000 daily users, a production agent loop that runs all day — and the bill stops being small. It becomes the kind of bill that ends careers. The deck didn't show $256K today. The next deck can.
So I revert the deck. I revert nothing else.
— Jordan
Written with Claude Opus 4.7
→ Go annual — $2,499/yr · Start at $50/mo (most readers start here)




I felt your mini panic attack reading this 😮💨