A client asked what it would cost to have Claude audit every page of a live site. Not a guess. A number he could approve.
So I measured it. 2,399 public URLs across 17 languages, token counts from the API’s own count_tokens endpoint rather than a rule of thumb, page inventory from the live sitemap. The answer was $452. It was also $47. Same checklist, same site, same model, two ways of feeding it.
That gap is the entire post. The plan tiers everyone reprints will not tell you which side of it you are on.
What the plan tiers don’t tell you
Search claude code pricing and you get eight blogs reprinting the same table: Superblocks, CloudZero, Finout, and five more. Every one of them lists the per-token rates. Not one of them shows a job.
Rates are not costs. A rate becomes a cost only when you multiply it by how many tokens your work actually is, and that number is the one nobody publishes, because it requires having run something.
Here is one.
What one real job prices out at, four ways
The job: a QA checklist over every public page. Does another language leak onto this page and where, is the sticky footer in the right language, which call to action is primary when several compete, is the pricing correct against source of truth, is this validator complaint real breakage or noise.
| Input format | Standard | Batch API |
|---|---|---|
| Raw HTML, 1 page | $0.19 | $0.10 |
| Raw HTML, all English (143 pages) | $27.76 | $13.88 |
| Raw HTML, all 2,399 pages, 17 languages | $452 | $226 |
| Extracted text, all 2,399 pages | $95 | $47 |
Priced at Claude Sonnet 5, $2 per million input tokens and $10 per million output, Anthropic’s published rate checked on 2026-08-20.
Add 10 to 15% to any of these. Every figure assumes one clean pass with no retries and no failed fetches, which is not a thing that happens.
The number I was about to publish was already wrong
The measurement was taken on 2026-08-19 and priced at $3 per million in, $15 out, because that was the rate scheduled to take over when Sonnet 5’s introductory pricing expired on 2026-08-31. At those rates the same table reads $678 and $71.
I checked Anthropic’s pricing page before publishing, out of habit rather than suspicion. The scheduled increase was cancelled. The introductory $2/$10 is now the standard price. Every figure I had was 1.5x too high, in a post whose entire value is that its numbers are real.
The lesson is not that I got lucky. It is that a cost figure has a shelf life measured in weeks, and the failure mode is silent: nothing about a stale number looks stale. This is the same trap as trusting a document that was accurate when it was written, except the document is a price list and the author is a company that can change it on a Tuesday.
Every figure here is dated. Check the page before you spend anything.
The 7.5x lever: stop sending HTML
The single biggest number in that table is not a price. It is 78,000.
That is roughly how many tokens one page of this site’s raw HTML costs: 79,769 on an English page, 77,028 on a translated one, measured with count_tokens rather than estimated. The same page as extracted text and structured facts is 10,600.
Raw HTML: ~78,000 tokens per page. You are paying full rate to send the model your class attributes, your inline SVGs, and your analytics snippets.
Extracted text: 10,600 tokens per page. Roughly 7.5x less, for the same checks.
The objection is obvious: surely something is lost. For this checklist, no, and the reason matters more than the saving. The checks that genuinely need markup are checks a parser does better anyway. Whether a div is broken is a question for html-validate, which answers it exactly, for free, in milliseconds. Asking a language model to eyeball markup is paying a premium for a worse answer.
Two-thirds of it shouldn’t touch the API at all
This is the part none of those eight posts makes, and it is worth more than the batch discount.
I went through the checklist line by line and asked one question of each item: does this need judgment, or does it need a lookup? Roughly two thirds needed a lookup. Those cost $0 in API spend.
| Free, a script does it | Genuinely needs Claude |
|---|---|
| 200 codes, visit times, load timing | Which other languages appear on the page, and where |
| Every link, reference URL, downstream URL language | The language of the sticky footer, toast, exit pop |
<html lang> on the page and its downstream pages | Pricing verified against source of truth |
Broken HTML and broken divs (html-validate) | Which call to action is primary when several compete |
| Lighthouse and CrUX | Adjudicating validator noise against real breakage |
| Whether the footer, toast and exit pop fire (Playwright) |
There is a real cost to this and I should name it. Lighthouse across 2,399 pages runs about 13 hours single-threaded, or 2 hours across 8 workers. Free of API spend is not free of time.
What Batch API actually costs you
Batch is 50% off input and output, keeps tools, caching and structured outputs, and I confirmed it live on the account (GET /v1/messages/batches returns 200). The documented discount is exactly half.
What the discount costs you, which the competing posts do not mention:
Four constraints, confirmed against a real run
Do
- Results come back in any order. Key by
custom_id, never by position - No streaming. You get the whole thing or you wait
- 24 hours is a hard ceiling. Unfinished requests expire, they do not queue
- 256 MB per batch, against a 472 MB full run, so this job needs about 3 concurrent batches of 800 pages
The 143-page English run is about 28 MB and fits in one batch with room to spare. The full multilingual run does not, and finding that out after writing the submission code is an afternoon.
My own read, stated as opinion rather than a finding: I would run English monthly on the standard API where the turnaround is minutes, and keep batch for the full multilingual sweep where nobody is waiting on the result. That is a workflow preference, not a benchmark.
A smaller model is not automatically cheaper
I also ran the same spec on two models over 10 pages, against an answer key of known defects, with 5-page clean controls.
The controls are the result I trust most: both models returned zero findings on clean pages. No false positives, in either direction. That is the check most model comparisons skip.
The cost comparison needed a correction before I could publish it. The original numbers priced both models at Sonnet’s rate. Haiku 4.5 is $1 per million in and $5 out, half of Sonnet 5’s $2/$10, so its bill was overstated by 2x. At each model’s own rate:
| Model | 10 pages | Per page | Findings |
|---|---|---|---|
| Haiku 4.5 | $0.168 | $0.0168 | 51 |
| Sonnet 5 | $0.739 | $0.0739 | 133 |
Sonnet is 4.4x the cost per page and returned 2.6x the findings. I am not going to turn that into a cost per finding, which is what I originally intended to do, because a finding is not a verified defect. The same run produced 606 distinct surplus strings across 11,495 instances that appear nowhere in the answer key and that nobody has adjudicated. Until someone reads them, a count of findings is a count of output, and dividing money by output is a number that looks like a metric and is not one.
Recall was proven on that run. Precision was not. Those are different claims and averaging them into a grade would be the kind of thing this post exists to argue against.
How to price your own job
Your workload is nothing like mine, so the useful thing here is not my number. It is the method, which took about twenty minutes.
The token counts from this job are also wired into a free cost calculator that asks how many pages or tickets or agent-hours you have rather than how many tokens, because nobody knows what a token is worth until they have counted one.
Count the tokens of one representative unit of work before you commit to anything:
curl https://api.anthropic.com/v1/messages/count_tokens \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "<one page of exactly what you would send>"}]
}'Receipt How I got this post's cost estimate. About twenty minutes for one representative job.
Then:
Step 6 is the one that pays. Steps 1 through 5 give you a number; step 6 changes it.
Two traps worth knowing. Different model families tokenise differently, so a count taken on one model does not transfer to another. And costs do not scale the way intuition says: on this job, checking the language of every downstream link costs $0 extra across the whole site, because those pages are already being audited and you just join the results. Run it on a single page and the same check costs $13.63, because chasing 85 links means auditing 86 pages. The economics invert with scale, in both directions.
What this doesn’t cover
One task type, one site, one point in time, one model. Site QA over static marketing pages is a nearly ideal case for the extracted-text trick, because almost nothing in the markup mattered. A job that genuinely reads code, or images, or needs the DOM structure itself, will not see a 7.5x saving and might see none.
I have not measured a long agentic loop, where the cost driver is conversation history resent on every turn rather than one large input. That is a different shape of bill and the lever there is caching, not extraction. The per-consult figures in the Fable orchestration post are closer to that shape.
And none of this touches the subscription question, which is what most people typing “claude code cost” actually want. I went looking for that data and it does not exist in a form anyone can publish, which turned out to be the finding rather than the obstacle: a capped plan has no cost curve, so there is no arithmetic to show.
Related:
- Fable 5 as the Driver: When to Let One AI Instruct Another: what a single consult costs, and why slow models do not belong in a loop
- AI Trusts Your Docs. That’s the Problem.: the failure mode that nearly shipped a cancelled price as a current one
- Claude Code Worktrees: 4 Gaps in the Default Setup: running the agents that spend this money
Sources
- Anthropic, Pricing: the model rate table, the Batch API table, and the note confirming Sonnet 5’s introductory $2/$10 is now the standard price and the increase to $3/$15 will not occur. Read 2026-08-20.
- Anthropic, Batch processing: the 50% discount, and the ordering and expiry behaviour.
- Anthropic, Token counting: the
count_tokensendpoint every figure here rests on. - The competing SERP, for what is already covered: Superblocks, CloudZero, Finout.
- Measurements:
docs/content/seeds/cost-receipts-2026-08-19.jsonin this site’s repository, with the token counts, the reconciliation check, and the two corrections made before publishing.