Price per token is only half the bill
See how many tokens each model bills for the same text and why the counts differ, then measure your own text in a free calculator that counts it with each model's own tokenizer.
Price per token is only half the bill. To know what a model costs, you need two numbers: its price per token, and how many tokens it bills for your text, fixed request tokens included. The second number can change the final cost far more than the first. Four models listed at the same input price billed between 59 and 1,300 tokens for the same English paragraph, sent once: a 22-fold spread in tokens.

The price page lists a rate per million input tokens, and the lowest looks cheapest, as if a token were the same size everywhere. Each model counts your text with its own tokenizer, and each request carries fixed tokens of its own, from one to more than a thousand. Not every token bills at the full rate either: xAI billed most of Grok 4.7’s fixed tokens at its cached rate, so the 22-fold token spread was about 7.4-fold in cost.
As a formula:
cost per request = (text tokens counted by that model + fixed request tokens) × price
Two of the three factors belong to the model. So compare cost per text: what one piece of text costs when you send it once to one model.
Same price, different bill
Four models listed at 2.0 per million input tokens billed between 59 and 1,300 tokens for the same English paragraph. Each counted the English sample with its own counter:
| Model | Text tokens | Fixed request tokens | Billed per request |
|---|---|---|---|
| Claude Sonnet 5.5 | 87 | 8 | 95 |
| GPT-6.1 Sol | 58 | 6 | 64 |
| Gemini 3.1 Pro Preview | 58 | 1 | 59 |
| Grok 4.7 | 58 | 1,242 | 1,300 |
With price equal, the token count sets the cost for the first three. Grok 4.7 is the exception: on every call we made, xAI billed at least 1,152 of its 1,242 fixed tokens at its cached rate, so it bills 22 times Gemini’s tokens but about 7.4 times the cost. The requests behind these numbers are on the measurements page.
Sonnet 5.5 against GPT-6.1 Sol is a tokenizer gap. Their fixed tokens are close (8 and 6), but Claude’s tokenizer splits the paragraph into 87 tokens where OpenAI’s splits it into 58, so the same request bills about 1.5 times as much.
Grok 4.7 against Gemini 3.1 Pro Preview is a fixed-token gap. Both count the text at 58 tokens. Grok 4.7 then bills 1,242 tokens on every request, whatever it contains, against Gemini’s one.
First half: the tokenizer decides the count
The tokenizer gap between two model families moves with the content. Claude counts 1.50 times OpenAI’s tokens on the English paragraph, 1.44 times on the code and 1.26 times on the JSON.
Each model family splits text with its own tokenizer, and a 2026 study of tokenizers by Roberts, Han and Albanie found that tokenization “varies significantly across models and domains of text, making naive interpretation of token counts problematic.” The calculator’s three samples, counted by each family:
| Tokenizer family (models in the catalog) | English | Code | JSON |
|---|---|---|---|
| Claude (Haiku 5.5, Sonnet 5.5, Opus 5.5, Fable 5.1) | 87 | 148 | 151 |
| OpenAI o200k_base (GPT-5 mini, GPT-6 Luna, GPT-6.1 Sol, GPT-6 Astra) | 58 | 103 | 120 |
| Gemini (3.5 Flash Lite, 3.5 Flash, 3.1 Pro Preview, 4 Argon) | 58 | 118 | 142 |
| DeepSeek (Flash, V4 Pro) | 58 | 108 | 124 |
| Grok 4.3, Grok Build 0.1 | 58 | 103 | 120 |
| Grok 4.7 | 58 | 113 | 128 |
Gemini’s gap moves the other way: it matches OpenAI on English, then counts 15% more on the code and 18% more on the JSON.
Other sources agree, including Anthropic, which says the
tokenizer used by Claude 4.7 and later
“produces approximately 30% more tokens for the same text. The exact increase
depends on the content and workload shape.” PlayCode
found Claude counting
1.36 to 1.73 times GPT’s tokens on the same files, and ellamind’s
Tokenization Tax Report 2026
found Claude 4.7 and later counting 101% more than o200k_base on German
text, with 16 of 20 tokenizers changing rank between English and German.
Second half: fixed tokens per request
A short call bills more than its text because every request also bills fixed request tokens: tokens beyond the text, the same number whatever the text’s length, from 1 on most Gemini models to 1,242 on Grok 4.7. We measured them as billed input minus the counted text, over texts of different lengths; a difference that stays the same at every length belongs to the request. We found 6 for OpenAI models, 30 for DeepSeek Flash and 83 for DeepSeek V4 Pro, and for OpenAI and DeepSeek it held across thirteen texts from one token to about three thousand.
For Google, xAI and Anthropic we sent each text again at six lengths, and the difference never moved:
| Billed minus counted, by text length (tokens) | 1 | 58 | 163 | 661 | ≈2,900 prose | ≈2,500 code | Reported as cached |
|---|---|---|---|---|---|---|---|
| Gemini 3.5 Flash Lite, 3.5 Flash, 3.1 Pro Preview | 1 | 1 | 1 | 1 | 1 | 1 | — |
| Grok Build 0.1 | 186 | 186 | 186 | 186 | 186 | 186 | 128 |
| Grok 4.3 | 192 | 192 | 192 | 192 | 192 | 192 | 128 |
| Grok 4.7 | 1,242 | 1,242 | 1,242 | 1,242 | 1,242 | 1,242 | 1,152 |
| Claude Haiku 5.5, Sonnet 5.5 (counter includes the fixed tokens) | 0 | 0 | 0 | 0 | 0 | 0 | — |
| Gemini 4 Argon (counter includes the fixed tokens) | 0 | 0 | 0 | 0 | 0 | 0 | — |
Every request we sent, the script that sent it and the raw results are on the fixed-token measurements page.
Three caveats apply.
- Claude’s 8. Anthropic’s counter returns text and fixed tokens together. A one-word message counted 9, and the 8 + 1 split assumes the word is one token; if it is two, the fixed tokens are 7 and each Claude text count here is one higher. Per-request totals, such as 95 for the English sample, do not depend on the split.
- Gemini 4 Argon’s 31. Argon’s
countTokensalso returns text and fixed tokens together, and matched billed input on every request. A one-word message counted 32, so the same one-token assumption puts its fixed tokens at 31, where the other Gemini models add 1. Its text counts match Gemini 3.5 Flash’s on the samples but not on every text: on the long code file it counted fewer. - xAI’s values. Billed
prompt_tokensminus thetokenize-textcount, over six texts from one token to about 2,900, identical per model and different between models. That behaves like a system prompt xAI adds to each request, and xAI reported most of it as cached on every call, the first included. This is our reading, not something xAI states, and the values will change if that prompt does.
Treat them as dated measurements, not published constants; the calculator shows the current values.
Fixed tokens matter most on short requests. Grok 4.7’s 1,242 fixed tokens are about 21 times the 58-token English sample. Send that paragraph 1,000 times and Grok 4.7 bills 58,000 tokens of text and 1,242,000 fixed; Gemini 3.1 Pro Preview bills the same 58,000 of text and 1,000 fixed. Even with at least 1,152 of each request’s 1,242 fixed tokens at the cached rate, the fixed tokens are about seven-eighths of Grok 4.7’s input cost for that paragraph. Classification, routing, extraction and other short-call workloads pay it on every call, so packing several items into one request, or choosing a model with few fixed tokens, can matter more than a lower price per token.
Fixed tokens can also turn the listed-price order around on tokens. Grok 4.3 was listed at 1.25 per million input tokens and Claude Sonnet 5.5 at 2.0. For the English sample Grok 4.3 bills 58 text tokens plus 192 fixed, 250 in all, against Sonnet 5.5’s 95: 2.6 times the tokens on the lower-priced model. At the full rate that would cost about 1.6 times as much, but xAI billed 128 of those fixed tokens at its cached rate, which brings the two requests to about the same cost.
On long text the fixed tokens fade. On an English text of about 2,900 tokens the same four models billed between 2,870 and 4,110 tokens, a 1.43-fold spread, and on a code file of about 2,500 tokens 1.60-fold. Grok 4.7’s fixed tokens were still 1,242 at both lengths, spread over more text. At that length the tokenizer gap does most of the work: Claude Sonnet 5.5 counted the English text at 4,020 tokens to GPT-6.1 Sol’s 2,864, and with xAI’s cached share counted, Sonnet 5.5 rather than Grok 4.7 was the costliest of the four.
The usual estimate, one tiktoken count times each model’s price, misses on
both halves. o200k_base counted a third below
Claude’s counter on the English sample, 30% below on the code and 21%
below on the JSON. And none of the ten public calculators we checked on 13
October 2026 showed fixed tokens,1 so a
count from any of them stops at the text: 58 tokens for the English sample on
Grok 4.7, where the request billed 1,300. Both errors point the same way, so a
forecast built on them carries the
shortfall in full.
Measure your own text: a token calculator for Claude, GPT, Gemini, DeepSeek and Grok
To get cost per text for your own text, paste it into the CostCompass token cost calculator, which measures one text at a time. It is free and needs no account.
Counted, not estimated. Claude, Gemini and Grok text goes to Anthropic’s, Google’s and xAI’s counting endpoints, so text you paste leaves CostCompass to be counted there. OpenAI and DeepSeek text is counted on CostCompass’s server with their published tokenizers. Use the three built-in samples quoted in this guide, or paste up to 50,000 characters of your own.
Four ways to price it. The default is “Text you send, no caching”, the full input price. Two modes price the text as a cache write and a cache read (see prompt caching explained). The fourth, “Text the model writes”, prices it at the output rate.
The result, under the heading “Cost of this text, sent 1,000 times”, names the lowest-cost model, then lists every model in order of cost. Each row shows the text’s token count with that model’s fixed tokens beside it, such as “+1,242 fixed” on Grok 4.7, and then its cost.

The calculator applies the formula above to each model, as the note under the list says: “Each cost includes the fixed tokens a request bills on top of the text, at the full input price.” Where a provider bills part of them as cached, it prices that share at the model’s cache read price, so its Grok costs sit below what the plain formula gives. The token count beside each cost is still the text’s own. For what your workload will bill, add the two things the calculator leaves to you:
- Output, priced with “Text the model writes”, which adds no fixed tokens, and scaled to your real output length.
- Reasoning, billed on top and not included in any mode.
What to do differently when you compare on cost per text
Comparing on cost per text changes which model you pick and how you budget.
- Choose on cost per text. Count your own prose, code, structured output or non-English text on each candidate; the LLM cost management guide covers what comes next.
- Budget short calls by request count. The calculator’s cost for 1,000 sends already includes each model’s fixed tokens, so scale it to your volume. Agent workloads are the opposite case, where long requests make the fixed tokens negligible, as why cutting generated code barely lowers the bill explains.
- Re-measure after a model upgrade. Anthropic lists Opus 4.6 and 4.7 at one input price, yet 4.7 brought the tokenizer that counts about 30% more, and Grok 4.7 counts the code sample at 113 tokens where Grok 4.3 counts 103. Re-run your sample on the new version before you switch.
Next step: check both numbers on your own text
Open the token cost calculator and paste a representative piece of the text you send most. For each model you are considering, read two numbers: the price per token, and the token count for your text with the “+N fixed” beside it. The cost of 1,000 sends combines them, fixed tokens included. A lower price only saves money when the token count does not climb faster than the price drops, so check both before you switch model.
All calculations and lookups in this guide were performed in October 2026.
Footnotes
-
LLM Gateway, Trevor Fox, Price Per Token, Rows, iToolVerse, Vantaige, Framer Token Cost, AI Pricing Guru, CloudZero and Jotform. ↩
Frequently asked questions
- Why does the same prompt use more tokens on Claude than on GPT?
- Each model family splits text with its own tokenizer, and a token is whatever that tokenizer says it is. Measured on 2026-10-12 with each provider's own counter, an English paragraph came to 87 tokens on current Claude models and 58 with OpenAI's o200k_base encoding. A Python function was 148 against 103, and a JSON object 151 against 120. Anthropic says its newer tokenizer for Claude 4.7 and later produces about 30% more tokens for the same text, and that the exact increase depends on the content.
- How do I count tokens for Claude?
- Use Anthropic's own counter. We found no published tokenizer for current Claude models, so a calculator that runs tiktoken and scales the result is estimating Claude, not counting it. Anthropic's token counting endpoint returns the count for the model you name, and it includes the tokens each request adds on top of your text. Anthropic describes that count as an estimate that can differ from the billed input by a small amount. On every request we sent to Claude Haiku 5.5 and Sonnet 5.5, at six text lengths, it matched the billed input. A one-word message counted 9. The token cost calculator sends your text there and shows the Claude count beside every other model's.
- What does Claude cost per token?
- Claude Sonnet 5.5 is listed at 2.0 per million input tokens, the same as GPT-6.1 Sol and Gemini 3.1 Pro Preview. Claude's tokenizer counts more tokens for the same text, though. One English paragraph billed 95 tokens on Sonnet 5.5 and 64 on GPT-6.1 Sol, so at the same price per token the Claude request cost about 1.5 times as much. For current rates see Anthropic's pricing page.
- Why is my billed prompt token count higher than the text I sent?
- Part of the gap is a fixed number of tokens each request bills on top of the text, whatever its length. CostCompass measured it as billed input minus the counted text and found it constant per model (every request we sent), from 1 token on most Gemini models to 1,242 on Grok 4.7. System prompts, conversation history and tool definitions add more on top; the post why "hello" can cost thousands of tokens walks through them.
- Can I use tiktoken to estimate Claude or Gemini costs?
- Only as a rough floor. tiktoken runs OpenAI's encodings, so it counts the way OpenAI's models count. On the English sample it gave 58 tokens where Anthropic's token counter gave 87, a third too low. Gemini matched it on English but counted 15% more on code and 18% more on JSON through its countTokens method. For these models the error runs the same way on every request, so a budget built on it is low by the same proportion.
- How do I compare LLM costs for my own prompts?
- Paste a representative piece of your own text into the token cost calculator. It counts the text with each provider's own counter or published tokenizer and shows the cost of 1,000 sends on every model, ordered by cost. That cost already includes each model's fixed request tokens. Add your expected output and any reasoning tokens yourself.
- Why track spend in CostCompass instead of each provider's billing page?
- The calculator tells you what a text should cost before you choose a model. The bill tells you what it did cost, and each provider shows its own in its own console. CostCompass pulls every connected provider's usage into one month-to-date total with a per-model breakdown where the provider reports one, plus a forecast for next month, the moment you click Refresh. That is where you check that the model you chose on cost per text behaves the same way in production.
About the author
Joubert Berger builds CostCompass, a spend-intelligence dashboard that pulls usage from AI and compute providers into one month-to-date total, a forecast, and a per-provider breakdown. This guide reflects how CostCompass reads each provider's own usage API — see the security model for how your keys are handled.
Once you've picked a model, see what it really bills
The calculator measures one text. CostCompass reads what every provider charged, per model where the provider reports it, and adds it into one month-to-date total and a forecast each time you click Refresh. Nothing to wire into your code.