AI DevelopmentPricing Tracker14 min readPublished August 24, 2026

Eight tokenizer families · one same-price illusion · every figure labeled measured or published

Tokenizer Variance: Why Identical Prices Cost More

Two models can publish the identical dollar-per-million-token price and still send you different bills for the same work, because each vendor’s tokenizer splits the same text into a different number of tokens. This reference assembles the measured vocabulary sizes, vendor disclosures, and verifiability tiers — with every number labeled as measured, vendor-stated, or unconfirmed.

DA
Digital Applied Team
Senior strategists · Published Aug 24, 2026
PublishedAugust 24, 2026
Read time14 min
SourcesVendor docs & configs
Claude 4.7+ tokens, same text
+30%
vs earlier Claude · Anthropic’s own figure
o200k_base vocabulary
200,019
measured from tiktoken source
tiktoken undercounts Claude
15–20%
on typical text · Anthropic’s warning
Exact pre-bill counts
6/8
families in our matrix

LLM tokenizer variance is the quietest line item in AI cost planning: two vendors can charge the identical dollar-per-million price while their tokenizers segment the same input into materially different token counts — which means the same task produces different bills. The token, not the dollar rate, is the real unit of purchase, and no two vendors sell the same one.

The stakes stopped being theoretical this year. Anthropic’s own documentation now discloses that Claude 4.7 and later models produce roughly 30 percent more tokens than earlier Claude models for the same input text — a same-priced model line that got more expensive per task through a tokenizer swap alone. Mistral’s Tekken tokenizer made the same class of move in the opposite direction. Neither event changed a headline price.

This reference assembles what is actually knowable as of August 24, 2026: measured vocabulary sizes for the tokenizers that publish them, vendor-stated multipliers for the ones that changed, an explicit “not published” row where a vendor discloses nothing, and a three-tier map of which token counts you can verify before a billed call. Every figure is labeled measured, vendor-stated, or independent-and-unconfirmed — because the entire value of a reference like this is knowing which numbers were run and which were merely read.

Key takeaways
  1. 01
    Identical $/M-token pricing is not identical cost.Each vendor’s tokenizer splits the same text into a different token count, so the same task bills differently at the same headline rate. The token is a vendor-specific unit, not a standard one.
  2. 02
    Anthropic disclosed a ~30% token increase in its own docs.Claude 4.7 and later use a newer tokenizer that produces approximately 30 percent more tokens for the same input, per Anthropic’s official token-counting documentation. Independent analyses report the penalty runs higher on code and JSON.
  3. 03
    Cross-vendor estimation produces wrong numbers — the vendor says so.Anthropic’s own skills repo warns that OpenAI’s tiktoken undercounts Claude tokens by roughly 15–20% on typical text, with much larger gaps on code and non-English input. One vendor’s tokenizer cannot price another’s bill.
  4. 04
    Only open-weight tokenizers are fully verifiable offline.Qwen3, DeepSeek-V3, Llama 4, Mistral’s Tekken, and GLM-5 all ship downloadable tokenizer files, so exact counts cost nothing. OpenAI’s encodings are exact via the public tiktoken library. Anthropic and Google require a live API call, and Anthropic calls its own count an estimate.
  5. 05
    The ‘prompt in a cheaper language’ trick can reverse on you.Academic testing found the token-efficiency advantage of Chinese prompting flips direction between models in the same study — and success rates drop, so per-token savings can be erased by retries. Language arbitrage is tokenizer-specific, not a rule.

01The MechanicThe billing unit nobody audits.

Every LLM invoice is denominated in tokens, and every vendor manufactures its own. A tokenizer is the compression scheme that turns text into the integer IDs a model actually consumes: a large, well-fitted vocabulary packs more characters into each token; a smaller or differently-trained one needs more tokens for the same string. Two vendors quoting the same dollar-per-million rate are therefore quoting prices in different currencies with no published exchange rate.

Cost trackers — including our own LLM API pricing index — compare headline $/M-token rates because those are what vendors publish. That comparison is necessary but incomplete: it prices the unit without asking how many units your text becomes. A model that looks 20 percent cheaper on the rate card can cost more per task if its tokenizer needs 30 percent more tokens for your content mix.

One method rule governs everything below, because it is what makes a tokenizer reference citable at all: every count must name the exact tokenizer or encoding and the exact text it was run on, and measured numbers must be separated from published ones. This post contains no invented side-by-side sample counts. Where a vendor publishes a vocabulary size in its own config file or library, we report it as measured and name the file. Where a vendor asserts a multiplier in its own docs, we report it as vendor-stated. Where a vendor publishes nothing, the row says not published — never an estimate from a characters-per-token rule of thumb, and never an inference from another vendor’s tokenizer.

Why this matters now
Tokenizer changes are a recurring, cross-vendor event class, not a one-off migration footnote. In recent generations Anthropic swapped tokenizers and disclosed a ~30 percent token increase; Mistral swapped tokenizers and claimed double-digit efficiency gains; OpenAI moved from cl100k_base to o200k_base with a roughly doubled vocabulary. Same headline prices, different real costs — in both directions.

02The Anchor FactAnthropic’s ~30% disclosure, hiding in plain sight.

The clearest documented instance of tokenizer-driven cost variance sits in Anthropic’s own token-counting documentation: “Claude 4.7 and later models and Claude Mythos Preview use a newer tokenizer. The same input text produces approximately 30 percent more tokens than on earlier models. The exact increase depends on the content and workload shape.” That is a vendor stating, in official docs, that a same-priced model line became measurably more expensive per task purely through a tokenizer swap — at unchanged $/M-token pricing.

The same page instructs developers not to reuse token counts measured against earlier models, and to recount every prompt against the specific model they intend to bill — because the counting endpoint returns counts under the tokenizer of whichever model is passed. Most coverage treated this as a Claude-specific migration footnote. It is better read as the cleanest public evidence of a structural pattern: the billing unit itself can be redefined underneath a stable price.

Independent analyses put the penalty higher for structured content. Trade write-ups reported increases as high as roughly 35 percent on code and JSON payloads specifically — against Anthropic’s blanket ~30 percent figure for general text. Notably, the independent write-ups do not agree with each other: one headline analysis framed the bill impact at 12–27 percent while another put code-heavy workloads at up to 35 percent. That disagreement is itself the finding — there is no single clean multiplier, because the increase depends on content shape. Keep the vendor’s ~30 percent and the independent 35 percent clearly separated; they are different numbers from different sources.

The vendor’s own warning
Anthropic’s public skills repository explicitly warns developers not to estimate Claude token counts with OpenAI’s tiktoken: it “undercounts Claude tokens” by roughly 15–20 percent on typical text, with much larger undercounts on code or non-English input, and cross-vendor estimates “are incorrect for Claude.” That is the unit trap in one sentence: one vendor’s tokenizer cannot price another vendor’s bill.

What about Claude’s actual vocabulary? Anthropic has never publicly released its tokenizer — it is exposed only through the counting API, not as a downloadable vocabulary or merge file. The most careful independent reverse-engineering, published July 29, 2026 by researcher Sander Land, estimates roughly 49,000–55,000 tokens (most likely 49,152) for the v3–v4.6 generation and roughly 16,000–20,000 (most likely 16,384) for v4.7 and later. Those figures are explicitly speculative — the author says so himself — and we report them only as unconfirmed third-party estimates, never as Anthropic’s real numbers.

“All of the above is somewhat speculative, and none of it is from official sources.”— Sander Land, independent tokenizer researcher, Token Contributions, July 2026

One analytical connection is worth drawing, clearly labeled as our framing rather than a sourced number: a smaller vocabulary is structurally consistent with producing more tokens for the same text, because each merge step compresses less. Anthropic’s vendor-stated ~30-percent-more-tokens change and the independent, unconfirmed estimate of a roughly three-times-smaller vocabulary point in the same direction. That coherence makes the estimate more interesting — it does not make it confirmed.

03The LedgerThe same-price illusion, vendor by vendor.

Anthropic is not an outlier — it is one entry in a ledger. Mistral’s own launch post for Mistral NeMo states that its Tekken tokenizer is approximately 30 percent more efficient at compressing source code than the SentencePiece tokenizers it replaced, with similar gains claimed for Chinese, Italian, French, German, Spanish, and Russian text, and 2x and 3x efficiency gains for Korean and Arabic respectively. Same magnitude as Anthropic’s change, opposite direction, different vendor. Tokenizer swaps routinely move real cost by double-digit percentages while the rate card holds still.

The ledger below collects every multiplier a vendor or named analyst has published for these events. No row is a number this post computed from a fresh tokenizer run; the derived column applies one stated formula, shown beneath the table, and only where a source states a direct token-count change.

Vendor-published and independently-reported token-count multipliers from tokenizer changes, with the effective same-text bill multiplier derived only where a direct token-count change is stated.
Tokenizer changeContent shapeStated effect on token countSame-text bill multiplier*Claim type
More tokens at the same price
Claude pre-4.7 → 4.7+ / Fable 5 / MythosGeneral text~30% more tokens for the same input~1.30×Vendor-stated — Anthropic token-counting docs
Claude pre-4.7 → 4.7+, structured payloadsCode and JSONUp to ~35% more tokens; a separate analysis frames the bill impact at 12–27% — the write-ups disagree~1.35×Independent analyses — not Anthropic’s figure
Fewer tokens at the same price
Mistral SentencePiece → TekkenSource code“~30% more efficient” at compression (methodology not published)— not derivableVendor-stated — Mistral NeMo launch post
Mistral SentencePiece → TekkenKorean text2x more efficient compression, per Mistral (methodology not published)— not derivableVendor-stated — Mistral NeMo launch post
Mistral SentencePiece → TekkenArabic text3x more efficient compression, per Mistral (methodology not published)— not derivableVendor-stated — Mistral NeMo launch post

*Bill multiplier = 1 + the stated token-count increase, at an unchanged per-token price. It is computed only for rows where a source states a direct token-count change (1 + 0.30 = 1.30; 1 + 0.35 = 1.35). The 12–27% figure in the second row is stated by its source as a bill impact rather than a token-count change, so it is not converted here. Mistral’s efficiency claims are left underived because the launch post does not publish the token counts or sample corpus behind them — converting “efficiency” into a bill multiplier would require assuming a formula the vendor never stated.

OpenAI’s own generational change belongs in the fewer-tokens column too, though it published no blanket multiplier: the move from cl100k_base to o200k_base roughly doubled the vocabulary, and one independent blogger’s own multilingual tests reported dramatic compression gains for non-Latin scripts — his Gujarati sample reportedly dropped from 145 tokens under the old encoding to 33 under the new one. Those are the author’s own measurements of his own sample strings, cited here as an external finding — not counts this post reproduced.

04The Reference TableThe tokenizer transparency matrix.

This is the table we could not find anywhere else: all three closed frontier vendors and five open-weight families side by side, each vocabulary figure traced to the actual config file, library source, or paper that publishes it — with an explicit transparency axis. “Measured” means the number was read directly from the vendor’s own published artifact, and that artifact is named in the row. Where a vendor publishes nothing, the cell says so.

Tokenizer transparency matrix: vocabulary size, disclosure status, downloadability, and pre-bill verifiability for eight tokenizer families as of August 24, 2026.
FamilyTokenizer / algorithmVocabulary sizeStatus & sourceDownloadable?Exact count before a billed call?
Closed frontier vendors
OpenAI — current (GPT-5, GPT-4.1, GPT-4o, o-series)o200k_base — BPE, via tiktoken200,019 incl. special tokensMeasured — tiktoken source, special-token offsets (ENDOFTEXT id 199999)Yes — open-source libraryYes — a local tiktoken count uses the same BPE merge tables OpenAI bills against
OpenAI — legacy (GPT-4, GPT-3.5-turbo)cl100k_base — BPE, via tiktoken~100,256–100,257Measured — tiktoken source, same fileYes — open-source libraryYes — same mechanism
Anthropic — ClaudeNever publicly released; exposed only via the count_tokens APINot published. Independent reverse-engineering estimates exist but are self-described as speculativeUnpublished — confirmed by independent reconstruction projectsNoEstimate only — the free count_tokens endpoint, which Anthropic’s docs themselves call an estimate
Google — Gemini APINot disclosed — official docs name no algorithm for the production endpointsNot published. A third-party teardown claims Gemma-3 SentencePiece lineage at 262,144 pieces — unconfirmed by GoogleUnpublished — confirmed by direct review of ai.google.devNoVia the live countTokens API only; no offline path
Open-weight families
Qwen3 (dense sizes, e.g. Qwen3-8B)Tokenizer files shipped with weights151,936Measured — vocab_size field in Qwen’s own config.json on Hugging FaceYes — with the weightsYes — exact, offline, zero cost
DeepSeek-V3Byte-level BPE — per the technical report129,280 config field; paper states “~128K” (gap is standard embedding padding)Measured — config.json; vendor-stated in arXiv:2412.19437Yes — with the weightsYes — exact, offline, zero cost
Llama 4 (Maverick, Scout)Byte-level BPE, tiktoken-style — the lineage Meta adopted from Llama 3 onward202,048Measured — Meta’s model configuration via the Hugging Face transformers docsYes — with the weightsYes — exact, offline, zero cost
Mistral — Tekken (NeMo and later)tiktoken-based BPE — replacing SentencePiece v1/v2131,072Measured — params.json in Mistral’s own Hugging Face repoYes — with the weightsYes — exact, offline, zero cost
GLM-5 (zai-org: GLM-5 / 5.1 / 5.2)Tokenizer files shipped with weights154,880Measured — vocab_size field in zai-org’s own config.jsonYes — with the weightsYes — exact, offline, zero cost

Three footnotes the table cannot carry. First, OpenAI’s gpt-oss models use a third, distinct encoding — o200k_harmony — per the model-to-encoding mapping in tiktoken’s own source; its vocabulary size is not separately confirmed here, and it should not be assumed to equal o200k_base’s count. Second, Meta moved from SentencePiece to tiktoken-style byte-level BPE starting with Llama 3, but we publish no Llama 3 vocabulary figure — it could not be verified against an accessible primary source during this research pass, so only Llama 4’s 202,048 appears above. Third, the Gemini row’s 262,144 figure is an inference from the openly released Gemma weights that Google has never made about the Gemini API — it stays labeled unconfirmed.

Measured tokenizer vocabulary sizes · published artifacts only

Published vocabulary sizes only, as of Aug 24, 2026 — Anthropic and Google publish none, so they cannot appear on this chart. Bars scaled to Llama 4’s 202,048.
Llama 4202,048 · measured, Meta config via HF
202,048
OpenAI o200k_base200,019 · measured, tiktoken source
200,019
GLM-5154,880 · measured, config.json
154,880
Qwen3151,936 · measured, config.json
151,936
Mistral Tekken131,072 · measured, params.json
131,072
DeepSeek-V3129,280 · measured, config.json
129,280
OpenAI cl100k_base~100,256 · measured, tiktoken source
~100,256

Even among published vocabularies the spread is roughly twofold — about 100 thousand to about 202 thousand entries. Vocabulary size alone does not determine token counts for your content mix (the training corpus and merge strategy matter as much), which is exactly why the method rule exists: the only trustworthy comparison for your workload is running your own corpus through each tokenizer you can actually obtain, and using each vendor’s own counting surface where you cannot.

05VerifiabilityThree tiers of trust before the bill arrives.

The matrix’s most consequential column is the last one: whether you can know your token count before a billed call. The industry splits into three tiers, and the tier a vendor sits in determines how much of your cost model rests on trust.

Tier 1
Fully offline
Qwen3 · DeepSeek-V3 · Llama 4 · Tekken · GLM-5

The tokenizer ships as a downloadable artifact alongside the weights — a tokenizer.json or merge file plus config. Any developer can compute an exact, offline, zero-cost count with no API call and no trust required.

Exact · offline · free
Tier 2
Open library
OpenAI — tiktoken

The encoding is open-sourced even though the weights are not. Because tiktoken uses the exact BPE merge tables production bills against, a local count for OpenAI models is exact, not an estimate — OpenAI’s documented pre-flight method is precisely this library, run locally.

Exact · local · free
Tier 3
API-only estimates
Anthropic · Google Gemini

No downloadable tokenizer. Counting requires a live endpoint call, and Anthropic’s docs explicitly call the returned figure an estimate that may differ slightly from the billed count. You budget against a number you cannot independently reproduce.

Live call · trust required

The Tier 3 surfaces are still worth using well. Anthropic’s count_tokens endpoint accepts the identical payload shape as the Messages API — system prompt, messages, tools, images, PDFs, thinking blocks — and is free to call, with its own rate limits separate from message creation: 2,000 requests per minute on the Start tier, 4,000 on Build, 8,000 on Scale. Two caveats from the same official page: the count may include tokens Anthropic adds for system optimizations that are not billed, and the endpoint does not apply prompt-caching logic even when cache_control blocks are present — so a pre-flight count cannot estimate a cache-discounted bill.

Google documents a countTokens API that returns a breakdown including input, output, thought, cached, and tool-use token totals, and its Gemini API token docs offer the informal rule of thumb that a token is equivalent to about 4 characters of English text. The media rates published alongside that countTokens reference are concrete where text is not: images at or under 384px cost 258 tokens, larger images 258 tokens per 768×768 tile, video 263 tokens per second, audio 32 tokens per second. Whether the countTokens call itself is billed is a detail we could not confirm from a primary source for this reference, so we make no claim either way — check the current pricing page before wiring it into a high-frequency preflight loop.

The forward projection writes itself: as agentic workloads push token volumes up and routing layers arbitrage between vendors per request, the verifiability gap becomes an operational risk, not a curiosity. A router that compares vendors on $/M-token without normalizing for tokenizer variance is optimizing the wrong number — and for two of the three closed vendors, the normalization factor cannot be computed offline at all.

06The Language TrapThe cross-lingual trap: cheaper languages that aren’t.

Tokenizer variance is steepest across languages. A June 2026 academic study of multilingual tokenization put the structural problem plainly: state-of-the-art multilingual LLMs often use byte-level BPE tokenizers that structurally favor high-resource languages and Latin scripts — inflating inference costs for speakers of underrepresented languages as a property of tokenizer design, not of any one vendor’s pricing.

Vendors are narrowing the gap generation over generation — that is what Mistral’s Korean and Arabic claims describe, and what the independent o200k_base analysis observed for Indic scripts. But the popular inversion of this fact — “prompt in a cheaper-to-tokenize language and save money” — does not survive testing. An April 2026 paper running SWE-bench Lite tasks found the token-efficiency advantage of Chinese prompting is not observed uniformly: MiniMax-2.7 needed 1.28x more tokens for Chinese prompts while GLM-5 needed fewer — the same trick flipping sign between two models in the same study. The paper also found success rates for Chinese prompting generally lower than English across all models tested, meaning a genuine per-token saving can be erased by retries.

The interpretation matters more than any single figure: language arbitrage is tokenizer-specific, direction included. Whether a given language is cheap or expensive is an empirical property of one vendor’s vocabulary, measurable only against that vendor’s tokenizer — one more reason the “name the tokenizer, name the sample” discipline is not pedantry but the difference between a citable number and a folk claim.

07The PlaybookBudgeting for a unit that moves.

Everything above reduces to four operating rules for anyone running LLM spend at meaningful volume.

Rule 1
Count with the vendor’s own tokenizer, always

tiktoken for OpenAI, count_tokens for Claude, countTokens for Gemini, the shipped tokenizer files for open-weight models. Anthropic’s own repo says cross-vendor estimates are simply wrong for Claude — undercounting by roughly 15–20% on typical text, worse on code.

Never cross-estimate
Rule 2
Recount on every model migration

Anthropic’s docs instruct exactly this: don’t reuse token counts measured against earlier models. A tokenizer swap inside a same-priced model line moved real costs ~30% — treat every generation change as a repricing event until your own corpus says otherwise.

Migration = repricing
Rule 3
Benchmark on your corpus, not samples

The penalty is content-shape-dependent — general text, code, JSON, and each language tokenize differently, and the independent Claude analyses could not even agree on one multiplier. Run a representative slice of your real prompts through each candidate’s counting surface.

Your text is the benchmark
Rule 4
Gate agent-reported numbers

If agents write your cost reports, tokenizer variance is exactly the class of derived number that silently goes wrong — a count from the wrong tokenizer looks plausible. The same discipline that catches a bad derived number in agent-written content applies to token math.

Verify derived cells

Rule 4 deserves its own reference: the derived-numbers QA pattern covers gating tables that contradict their own formulas — the failure class a misattributed token count belongs to. On the spend side, tokenizer variance is one input among several; our AI inference FinOps playbook covers the full stack, and anyone running an agentic content operation can see token cost per shipped unit tracked honestly in our agentic pipeline yield ledger. For teams that want the comparative eval run against their own corpus and workload shape rather than a rate card, that measurement discipline is where our AI transformation engagements start.

08ConclusionThe token is not a standard unit.

The reference, in three sentences

Price the unit, not just the rate — and verify the unit where you can.

The dollar-per-million-token rate is the price of a unit each vendor manufactures differently and can redefine at will. Anthropic’s ~30 percent disclosure and Mistral’s Tekken claims are the same event class in opposite directions — double-digit real-cost swings at unchanged headline prices — and nothing suggests either was the last such event.

The verifiability map is the durable takeaway. Five open-weight families let you compute exact counts offline for free; OpenAI’s open-sourced encodings make local counts exact too; Anthropic and Google ask you to trust a live endpoint, and Anthropic’s own docs call its answer an estimate. Six of the eight families in our matrix offer an exact pre-bill count — the two that do not are among the largest AI bills in most companies’ ledgers.

Expect this table to age. Tokenizers change between model generations, the multipliers are content-shape-dependent, and the only numbers that survive contact with your invoice are the ones counted with the billing vendor’s own tokenizer against your own text. That is the whole method — name the tokenizer, name the sample, separate what you measured from what you read — and it is the reason every figure on this page carries a label.

Measure real cost per task, not sticker price

Identical prices, different bills — until you measure with the right unit.

Our team benchmarks models against your real corpus and workload shape — tokenizer variance included — so routing and budget decisions rest on measured cost per task, not rate-card arithmetic.

Free consultationExpert guidanceTailored solutions
What we work on

AI cost engineering engagements

  • Corpus-level token benchmarking across vendors
  • Model routing with tokenizer-normalized cost inputs
  • Migration repricing when tokenizers change
  • Agent-written reporting with derived-number gates
  • FinOps programs for token-denominated spend
FAQ · Tokenizer cost variance

The questions we get every week.

Because the token is not a standard unit. Each vendor trains its own tokenizer — the compression scheme that converts text into the integer IDs a model consumes — and different tokenizers split the same text into different numbers of tokens. A vendor with a larger, better-fitted vocabulary packs more characters into each token; one with a smaller or differently-trained vocabulary needs more tokens for the same string. Since bills are computed as token count times the per-token rate, identical rates applied to different counts produce different invoices for identical work. The effect is content-shape-dependent: code, JSON, and non-Latin scripts show the largest gaps between vendors, which is why the only reliable comparison is counting your own representative corpus with each vendor’s own tokenizer rather than trusting the rate card.
Related dispatches

Continue exploring AI economics.