Methodology

What the numbers on this site mean, where they come from, and what they do not claim.

The unit

Every price is in US dollars per one million tokens. Providers quote input and output tokens separately, and many also quote cached-input, batch and regional rates. We store all of them. The single number shown by default is the blended price:

Blended price = (3 × input price + 1 × output price) ÷ 4, per million tokens. It approximates a typical chat or agent workload, where prompts are about three times longer than completions.

A model whose provider bills on input only (embeddings, rerankers) has no blended price rather than a half-computed one. Batch tiers and regional prices are kept as separate series and shown separately; the headline “cheapest” is always the non-batch, non-regional listing.

Canonical models

The same model is sold as llama-3.3-70b-instruct, Llama 3.3 70B and meta-llama/Llama-3.3-70B-Instruct-Turbo. A registry of canonical models with an alias table maps every provider’s spelling to one slug, which is what makes a cross-provider comparison possible at all. Names the registry cannot resolve are held back, not guessed. Where a provider lists several variants of one model (quantisations, context tiers), the cheapest is the one that counts and the number of variants folded is recorded.

Live collection

A scraper runs every day. Its first tier is OpenRouter’s public endpoints API, which lists per-provider pricing for hundreds of models in one call; direct adapters then cover the providers OpenRouter does not carry, including the frontier labs’ own rate cards and the major Chinese platforms. Every observation is validated before it is published: plausibility floors and ceilings by model class, a check that one number has not been applied to every model (the signature of a parse failure), input-versus-output ordering, and the size of the move against yesterday. Observations that fail are quarantined and never shown. A provider that does not report on a given day keeps yesterday’s price, labelled with its age.

What “current” means

Prices are stored as change points: a new row is written when a price moves, and a daily confirmation is written for providers the live scraper covers. A model’s current price at a provider is the newest row for that series. For a live-scraped provider that row is from today. For a provider known only from the historical backfill it can be older, and the provider table shows the date it was last confirmed instead of “Today”. A series whose newest row is a withdrawal is not shown at all.

Three years of history

History before the live scraper began was reconstructed from three archival sources: a widely used open-source price file with daily snapshots, a continuous-integration archive of OpenRouter’s own API, and Internet Archive captures of the same endpoint. Each source was collapsed to its change points independently, then cross-checked: for closed-weights labs the two main sources agree on roughly 95% of daily comparisons. They are deliberately not merged on open-weights models, where a rate card and a served price are different things.

Every backfilled change point carries its source, a one-sided date uncertainty (a third-party source records a change on or after the day it happened, never before) and a confidence grade. High is a daily, complete, API-derived capture. Medium is a sparse archive, a handover between sources, or a vendor rate card for a live model. Low is a rate card nothing else corroborates, a series whose start is not observed, or a suspected blip. Low does not mean probably wrong; it means do not assert the exact date without opening the source. A price that went A → B → A within a short window is flagged as a suspected blip and kept, because a correction and a short promotion look identical from outside.

What the history shows, and why we split it by source

The most-quoted finding from the backfill is that only a minority of (provider, model) pairs ever change price. That turns out to depend heavily on what the source measures. Series built from daily API captures of served prices repriced about four times as often as series built from published rate cards. Posted list prices really do sit still; the price you are actually charged by an inference host moves far more. Charts on this site say which they are drawing.

The price-move feed

A move is a change in the blended price of a (provider, model) series. Aggregators are excluded from the feed by default: OpenRouter’s listed price is the cheapest of whichever endpoints are routed that day, so most of its day-to-day changes are routing, not repricing. A day on which one provider lands four or more models on the identical new price is also hidden, because that is the signature of a rate-card parse error rather than a market event.

The research charts and the class index

The research page treats the price of a token as a set of stacked questions. Its construction rules: every cross-section is the state of each on-demand, default-region, text series at a month-end, expanded from the change-point table; aggregators are excluded from the class index, the dispersion series, the vintage curve and the monthly move counts, because a routed price is not a rate card; a month enters a published series only once it has 50 or more live series. TDX-Frontier, TDX-Mid and TDX-Floor are the 90th, 50th and 10th percentiles of the blended price with equal weight per series. The constant basket follows the series listed in a stated base month and reports the geometric mean of each survivor’s price relative to its own baseline; the ratio of the class index to the basket over the same window is the replacement effect. The vintage curve is price relative to launch price by months since launch, over series whose launch was observed (not left-censored).

Model attributes behind the newer research charts

Several charts added in September 2026 depend on attributes of the model rather than of the price, and the registry did not hold them until then. Parameter counts (total and active per token) are a seed taken from each model’s Hugging Face card or release note for the open-weight families the site prices; a source URL is recorded against every seeded row, the seed never overwrites a hand edit, and closed models have no count. Mixture-of-experts models are placed by active parameters, because that is what a forward pass costs. Open weights is true when the seed says so or when one of the open-weight inference clouds (Together, Fireworks, Groq, Cerebras, SambaNova, Nebius, Novita and their peers) lists the model; resellers that also carry closed models (Bedrock, Azure, OCI, Replicate, DeepInfra) do not count as evidence, and API-only names from open labs (qwen-plus, qwen-max) are excluded by pattern. Reasoning is a naming test: the model is sold as a reasoning model (R1, the o-series, -thinking, -reasoner). Hybrid models that reason on request are not flagged, so the reasoning premium is the premium on the reasoning-first SKU, not on reasoning itself. Age is the published release date where the seed has one and otherwise the first day the model appeared on any rate card we hold; the commoditization curve uses first appearance throughout and excludes models present at the start of the backfill, whose launch was not observed. The frontier ceiling is the dearest tiered model on a lab’s own rate card among those that first appeared within the trailing twelve months, ultra tier excluded, so legacy SKUs that were never withdrawn do not define it. Every one of these attributes is a column on the model registry and is meant to be corrected by hand where it is wrong.

Why increases look more common than they are

Most “increases” in the raw history belong to OpenRouter, whose listed price is the cheapest routed host: when a cheap host drops a model or fills up, the routed price rises, and half of those increases land within two weeks of the cut they reverse. That is market volatility on open-weights models, not a lab repricing, which is why aggregators are excluded from every count on this site by default. The increases that survive that filter are real and fall into three kinds: a preview going GA at a higher rate, a launch discount ending, and a new model shipped under a reused name. A separate effect is that the newest model in a tier is often priced above its predecessor even though the predecessor’s price never moved; the Frontier Lab Monitor labels its ladders “newest model in tier” for that reason.

Workload profiles

The stored 3:1 blend is the canonical index basis and does not change. Where a page shows a workload profile selector (model pages, the Frontier Lab Monitor), the blended figure is recomputed at render time from the input, cached-input and output legs with the profile’s token mix; a missing cached price is billed as input. The output-to-input price ratio has risen from parity in 2023 to several times, which is why the choice of mix now matters more than it did.

The Frontier Lab Monitor

Eight labs, first-party rate cards only: OpenAI, Anthropic, Google, xAI, DeepSeek, Alibaba (Qwen), Moonshot (Kimi) and Zhipu (GLM). Each model carries a registry tier (ultra, flagship, mid, small), seeded by rule from the model name and hand-corrected. A lab’s ladder shows the price of its most recently launched model in each tier; the list-price index is a mix-weighted mean of those on a stated mix; the China discount is the median newest-model price across the Chinese labs over the same across the US labs, published only where each side has two or more labs in the tier. The revenue bridge and margin proxy contain no disclosure or cost data of ours; they are calculators whose inputs are shown in blue and left for the reader to fill from filings.

What this site does not do

It does not yet measure latency or throughput, so it cannot tell you the cost of a useful token, and it does not measure quality at all. It does not account for volume discounts, enterprise contracts or free tiers. It does not convert prices quoted in currencies other than dollars unless the source itself did. Prices are what a provider publishes; the only authority on what you will be charged is the provider.

Corrections

If a price here is wrong, tell us at info@tokendynamo.com with a link to the source. We would rather show nothing than show a placeholder, and we would rather fix a number than defend it.