Strategist · Designer · Operator

Launch
with Ben



Claude Code

The Same Job Prices Out at $452 and $47

What it costs to run Claude over a real job. One 2,399-page site audit, priced four ways from its own measured token counts, with the method to price your own before you run it.

The short version

One 2,399-page site audit priced at $452 with raw HTML on the standard API and $47 with extracted text on batch. These are measured token counts times published rates, not invoices.

What you will learn

  • Why sending extracted text instead of raw HTML cut tokens about 7.5x
  • How a script can answer roughly two thirds of a checklist for $0 in API spend
  • What the Batch API discount costs you in order, time and size limits
  • A six-step method to price your own job before you run it

Who it is for

Someone about to run Claude over a large batch of pages or tickets who needs a cost number to approve.

Skip it if

You are on a Pro or Max subscription: this is the API bill, not plan limits. You need a long agentic loop figure, which this does not measure.

You leave with

A way to count tokens for one unit of work and turn it into a dated, defensible cost estimate.


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.

$452raw HTML, standard API
$47extracted text, batch API
9.5xthe spread, on two decisions

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 formatStandardBatch 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 itGenuinely needs Claude
200 codes, visit times, load timingWhich other languages appear on the page, and where
Every link, reference URL, downstream URL languageThe language of the sticky footer, toast, exit pop
<html lang> on the page and its downstream pagesPricing verified against source of truth
Broken HTML and broken divs (html-validate)Which call to action is primary when several compete
Lighthouse and CrUXAdjudicating 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:

Model10 pagesPer pageFindings
Haiku 4.5$0.168$0.016851
Sonnet 5$0.739$0.0739133

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:

1
Count input tokens for one unit, in the exact format you would really send
2
Run one unit for real, and record the output tokens the response reports
3
Multiply by how many units you have, then by the current published rate
4
Add 10 to 15% for retries and failed fetches
5
Halve it if the work can wait 24 hours, and check your batch fits under 256 MB
6
Before any of that, cross off every item a script can answer

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:

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_tokens endpoint 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.json in this site’s repository, with the token counts, the reconciliation check, and the two corrections made before publishing.
Ben Peetermans

Ben Peetermans

I build MVPs and run ad campaigns with AI, and I write these notes from real projects. Twenty years shipping for the web. If you want someone who works with these tools every day to build yours, that is what I do.