Eight tokenizers agree exactly on English. On Hindi they differ by 3.3x
The same paragraph is 92 tokens on GPT-4o, Qwen3, DeepSeek, Mistral, Phi-4, Falcon3, OLMo-2 and GPT-4 alike. Translate it and the agreement collapses: Hindi ranges from 154 tokens to 504, and Spanish costs Claude Opus 5 nearly twice what it costs GPT-4o.
Everyone prices models in dollars per million tokens, which only means something if a token is the same size everywhere. For English, remarkably, it very nearly is. For anything else it is not, and the gap is wide enough to reverse which model is cheaper for your text.
I wrote one paragraph, translated it into nine more languages so the meaning is held constant, and counted the tokens each model’s tokenizer produces. The full corpus is published so every number here can be reproduced exactly.
The whole table
Tokens for the same paragraph. Lower is cheaper.
| Tokenizer | English | Spanish | Russian | Arabic | Hindi | Chinese |
|---|---|---|---|---|---|---|
| GPT-4o (o200k) | 92 | 103 | 122 | 113 | 154 | 105 |
| GPT-4 (cl100k) | 92 | 119 | 210 | 286 | 492 | 169 |
| Qwen3 | 92 | 118 | 145 | 136 | 468 | 89 |
| DeepSeek-V3 | 92 | 114 | 135 | 132 | 283 | 87 |
| Mistral-Nemo | 92 | 105 | 137 | 106 | 186 | 138 |
| Phi-4 | 92 | 119 | 210 | 286 | 492 | 169 |
| Falcon3 | 92 | 107 | 452 | 307 | 504 | 176 |
| OLMo-2 | 92 | 119 | 210 | 286 | 492 | 169 |
| Claude Opus 5 | 121 | 201 | 183 | 264 | 355 | 154 |
| Claude Sonnet 5 | 120 | 200 | 186 | 259 | — | — |
| Claude Haiku 4.5 | 93 | 128 | 186 | 261 | 355 | 155 |
| Language | Cheapest | Dearest | Spread |
|---|---|---|---|
| English | 92 | 121 | 1.32x |
| Spanish | 103 | 201 | 1.95x |
| Chinese | 87 | 176 | 2.02x |
| Arabic | 106 | 307 | 2.90x |
| Hindi | 154 | 504 | 3.27x |
| Russian | 122 | 452 | 3.70x |
Eight tokenizers agree on English to the token
Every one of the eight open and OpenAI tokenizers returned exactly 92 tokens. Not close: identical. I checked it was not a fluke of one paragraph by running a second, unrelated English text through all eight, and they returned exactly 87 apiece.
That unanimity is specifically an English phenomenon, not a “clean text” phenomenon. The same eight tokenizers disagree on a TypeScript snippet (110 to 150), on a JSON payload (76 to 102) and on a markdown table (66 to 98). English prose is the one input on which the industry has converged.
The exceptions are Claude Opus 5 and Sonnet 5 at 120-121, about 30% above the consensus.
Three of these are literally the same tokenizer
Phi-4, OLMo-2 and GPT-4’s cl100k_base do not merely produce equal counts. They produce identical token ID sequences on every one of five test inputs. That is shared vocabulary, not coincidence, and it is why those three rows are the same across the entire table.
Worth knowing before you treat a benchmark of “three different models” as three independent data points about tokenization.
Non-Latin scripts are where the money is
Russian is the widest gap: 122 tokens on GPT-4o against 452 on Falcon3, for the same sentence. Hindi runs 154 to 504.
Measured against each tokenizer’s own English baseline, this is the tax a non-English user pays:
| Spanish | Russian | Arabic | Hindi | Chinese | |
|---|---|---|---|---|---|
| GPT-4o | 1.12x | 1.33x | 1.23x | 1.67x | 1.14x |
| GPT-4 / Phi-4 / OLMo-2 | 1.29x | 2.28x | 3.11x | 5.35x | 1.84x |
| Falcon3 | 1.16x | 4.91x | 3.34x | 5.48x | 1.91x |
| Qwen3 | 1.28x | 1.58x | 1.48x | 5.09x | 0.97x |
| DeepSeek-V3 | 1.24x | 1.47x | 1.43x | 3.08x | 0.95x |
Two things fall out of that.
GPT-4o’s tokenizer is the single biggest upgrade in this table. Against the older cl100k_base it cuts Hindi from 492 tokens to 154 and Arabic from 286 to 113. Same vendor, same sentence, a third of the tokens.
Chinese-developed models are the only ones where Chinese is cheaper than English. Qwen3 at 0.97x and DeepSeek-V3 at 0.95x both encode the Chinese paragraph in fewer tokens than the English one. Every other tokenizer charges a premium of 1.14x to 1.91x.
Claude’s models disagree with each other, but only on Latin script
This was the surprise, and it sharpens an earlier finding here that Haiku 4.5 counted the same file more cheaply than Opus 5. That is true, but it is not a general discount. It is confined to one script:
| Script | Opus 5 | Sonnet 5 | Haiku 4.5 | Haiku ÷ Opus |
|---|---|---|---|---|
| Latin (English) | 121 | 120 | 93 | 0.77 |
| Latin (Spanish) | 201 | 200 | 128 | 0.64 |
| Cyrillic (Russian) | 183 | 186 | 186 | 1.02 |
| Arabic | 264 | 259 | 261 | 0.99 |
| Devanagari (Hindi) | 355 | — | 355 | 1.00 |
| Han (Chinese) | 154 | — | 155 | 1.01 |
On Latin-script text Haiku needs 23% to 36% fewer tokens than Opus. On every non-Latin script tested the three models agree within 2%.
That is why the earlier per-file ratios moved around between 0.66 and 0.90 depending on content: every one of those files was ASCII, and the gap tracks how compressible the Latin text is.
Spanish is the sharpest case. It is only 10% more bytes than the English paragraph, and GPT-4o charges 12% more for it. Claude Opus charges 66% more, ending at 201 tokens against GPT-4o’s 103. For Spanish text, Opus needs nearly double the tokens.
I am reporting where the divergence lies, not why. A difference confined to one script is a real pattern and the measurement is clean, but I have no visibility into the vocabularies and I am not going to invent a mechanism for it.
What this actually changes
Compare price lists only after converting to your text. The published rate is dollars per million tokens; what you care about is dollars per million bytes of the thing you actually send, and the conversion factor is different for every model and every language.
For an English-only workload the tokenizers are close enough that the price list is roughly the truth. For Hindi, Russian or Arabic it is not: a model advertised 30% cheaper per token can be more expensive per document, because it turns that document into three times as many tokens.
Method
The eight open and OpenAI tokenizers were run locally and offline, so those figures are exact counts rather than estimates: tiktoken for o200k_base and cl100k_base, and the published tokenizer.json for each open-weight model. Llama and Gemma are omitted because their tokenizers sit behind gated repositories.
Claude has no public tokenizer, so those three rows are measured empirically instead, by loading the text as a CLAUDE.md and reading reported prompt tokens. Each was measured at two sizes, twenty copies and forty, and the slope taken: subtracting cancels the fixed per-file overhead exactly, leaving pure content cost. Each Claude figure therefore includes one paragraph separator, worth about one token. Opus and Haiku figures reproduced across two rounds within one token.
All Claude measurements on Claude Code 2.1.226, headless, totals from modelUsage. The corpus is published in full; the numbers hold for that exact text, and a different translation would shift them without changing the picture.