If you run an AI feature in more than one language, you are not paying the same price in each one. The same sentence costs a different number of tokens depending on the language it is written in.
We measured it across 14 languages. The short version: the writing system does not predict the cost. German costs more than Korean. Russian costs more than Japanese. Chinese is almost as cheap as English.
How we measured
- Encoding
o200k_baseviatiktoken 0.14.0— measured 13 October 2026 - One sentence with the same meaning in 14 languages: “Please summarize this document in three sentences and list the main points.”
- English is the baseline (13 tokens)
- Input tokens only
The results
| Language | Characters | Tokens | vs English | Tokens per character |
|---|---|---|---|---|
| English | 75 | 13 | 1.00x | 0.17 |
| Chinese | 18 | 14 | 1.08x | 0.78 |
| Spanish | 81 | 16 | 1.23x | 0.20 |
| French | 80 | 16 | 1.23x | 0.20 |
| Portuguese | 77 | 16 | 1.23x | 0.21 |
| Korean | 33 | 18 | 1.38x | 0.55 |
| Arabic | 56 | 18 | 1.38x | 0.32 |
| German | 99 | 19 | 1.46x | 0.19 |
| Italian | 80 | 19 | 1.46x | 0.24 |
| Japanese | 26 | 20 | 1.54x | 0.77 |
| Vietnamese | 69 | 21 | 1.62x | 0.30 |
| Thai | 50 | 23 | 1.77x | 0.46 |
| Russian | 93 | 24 | 1.85x | 0.26 |
| Hindi | 86 | 30 | 2.31x | 0.35 |
Three things that surprised us
1. Chinese is nearly as cheap as English (1.08x). People assume non-Latin scripts are expensive. Chinese characters are dense — the whole sentence is 18 characters — and the tokenizer handles them well. It came second cheapest out of 14.
2. German (1.46x) costs more than Korean (1.38x). A Latin-script European language is more expensive than a language with its own alphabet. German’s long compound words get split into several pieces each.
3. Russian (1.85x) costs more than Japanese (1.54x) and Korean (1.38x). Cyrillic is an alphabet much like Latin, yet it is one of the most expensive scripts here. Script family tells you very little.
| Script family | Average vs English |
|---|---|
| Latin (EN, ES, FR, DE, PT, IT, VI) | 1.32x |
| CJK (KO, JA, ZH) | 1.33x |
| Cyrillic (RU) | 1.85x |
| Arabic / Devanagari / Thai | 1.82x |
Latin and CJK come out almost identical on average (1.32x vs 1.33x), which is the opposite of what most people expect.
What this costs at scale
Per 100,000 requests, for this one sentence:
| Language | Tokens | Extra vs English |
|---|---|---|
| English | 1,300,000 | — |
| Chinese | 1,400,000 | +100,000 (+8%) |
| Spanish | 1,600,000 | +300,000 (+23%) |
| Korean | 1,800,000 | +500,000 (+38%) |
| German | 1,900,000 | +600,000 (+46%) |
| Japanese | 2,000,000 | +700,000 (+54%) |
| Russian | 2,400,000 | +1,100,000 (+85%) |
| Hindi | 3,000,000 | +1,700,000 (+131%) |
That is one short sentence. A real prompt carries a system prompt, instructions and user content — the gap scales with all of it.
What to do with this
- Do not budget one number for all languages. If you price a feature on English usage and then launch in Hindi or Russian, your input cost roughly doubles.
- Measure the languages you actually ship in — not a rule of thumb about scripts, because the script does not predict the cost.
- Do not translate to English to save money. The translation call costs tokens too, and you lose nuance. The savings here are small compared to that risk.
- Where it matters most is repeated text — a system prompt sent on every request multiplies this difference by your request count.
Try it yourself
import tiktoken
enc = tiktoken.get_encoding("o200k_base")
n = lambda t: len(enc.encode(t))
sentences = {
"English": "Please summarize this document in three sentences "
"and list the main points.",
"German": "Bitte fassen Sie dieses Dokument in drei Satzen zusammen "
"und listen Sie die wichtigsten Punkte auf.",
# ... add the languages you actually ship in
}
base = n(sentences["English"])
for lang, s in sentences.items():
print("%-12s %3d chars %3d tokens %.2fx English"
% (lang, len(s), n(s), n(s) / base))Limits of this measurement
- We wrote the translations ourselves. They are accurate in meaning but may not be the most idiomatic phrasing a native speaker would choose, and phrasing changes token counts. Treat the ordering as indicative, not exact.
- This is one sentence. A single short sentence cannot represent a whole language. Longer text, technical vocabulary and names would all shift the numbers.
- One tokenizer only (
o200k_base). Models using a different tokenizer will split these languages differently — sometimes very differently. - Input tokens only. Output is often priced higher, and output length also varies by language, which we did not measure.
- We measured cost, not quality. How well a model answers in each language is a separate question and is not addressed here.
Measured 13 October 2026 · tiktoken 0.14.0 · o200k_base · input tokens