Rack Rates

Methodology

Rack Rates is a dated record of the published list prices of compute: VPS plans, GPU instances, LLM tokens, inference hosts and media models. For every priced item it keeps the raw source, the price read from it, the time it was last verified and every change since the ledger started watching. Nothing here is ranked, filtered or coloured by a commercial relationship.

List prices, not transacted prices

List prices, not transacted prices: every number is what a provider publishes on its own price page or API, excluding discounts, credits, negotiated contracts and spot deals. It is a dated record of the asking price, not of what anyone paid. Discounts, committed-use and reserved pricing, credits, enterprise contracts and marketplace or spot deals are not in any list-price series; where a provider's page shows a commitment or promo price, the SKU says so. Treat every series as the published price level, not as a traded or settlement price.

The ten rules

  1. The provider is the truth. A price comes from the provider's own page or API. Community datasets (LiteLLM, OpenRouter, models.dev, gpuhunt) are cross-checks and are labelled as such wherever they appear. When they disagree with the provider, or with each other, the page shows both numbers and the difference instead of quietly choosing.
  2. Raw first, and immutable. Every observation starts as an unmodified, content-addressed copy of the source (URL, time, HTTP status, hash). Fields are derived from it and can be recomputed; the history is never rewritten. A correction is a new, dated fact.
  3. Gaps are shown. If a source fails, is blocked or looks wrong, its items say "not verified since <date>" and show no price. Nothing is interpolated. A change counts only once it is seen between two good runs. Copies from Wayback or Common Crawl are never treated as an observation of today.
  4. Nothing is for sale in the ranking. No affiliate links, no sponsored rows, no paid placement that touches order. Lists are sorted by provider and plan; "cheapest" queries sort by price alone and nothing else enters the sort key. If sponsorship ever exists it will be labelled, separate, and outside every table.
  5. Marketplaces are their own series. Asking prices and spot prices (for example Vast.ai) are not list prices and are never mixed into list-price series or indices.
  6. No language model in the measurement chain. Fetching, parsing, validation, diffing and index calculation are deterministic code. AI tools are used to repair parsers and add sources, but a model never produces a number that is published.
  7. Every number carries its evidence. Each price shows when it was last verified and links to its source. Each index value lists its constituents, each with its own verification time and source link.
  8. Free for today, paid for the past. Current prices and 90 days of history are free under CC BY 4.0. The full archive, alerts and bulk export are planned as a paid tier. That is the business model; it never touches the order of any table.
  9. Methodology is public, including what we do not know (next sections).
  10. Errors are corrected in the open. A contact address is published here when the public domain is live; until then use the contact in the project repository with the SKU or series, the value you expect and a link to the provider's page. A correction is a new dated entry; the original snapshot and record stay visible.

How a price gets here

  1. A scheduler fetches each source once a day and archives the body unchanged before anything is parsed.
  2. A deterministic normalizer reads the archived fields into SKUs (category/provider/plan) with a primary price, secondary prices (output tokens, hourly rate, batch, cache) and spec. Units are converted in code (MB to GB, per-token to per 1M tokens, micro-cents to EUR).
  3. Quality gates mark an unreadable, empty or suspiciously jumping snapshot as suspect. A suspect snapshot does not verify anything and its changes wait for the next good run.
  4. The price history stores one row per change point. Each change is dated "between the previous good snapshot and the one that showed it". The first snapshot of a source is a baseline: it creates SKUs but no change events.
  5. Index series are computed from the SKU state at the end of each UTC day; today's value is recomputed until the day ends and past days are frozen.

What "verified" means

The last verified time of a price is the time of the last good snapshot in which that SKU was present. A SKU is shown as not verified since (with no price) when its source's latest fetch failed, or when no good snapshot has verified it within 72 hours. A SKU that disappears from its source is marked delisted and keeps its history. The price history on each SKU page keeps the dated observations of earlier periods.

Sources and disagreement

The table is generated from the live source list, so it is always what the ledger reads today.

SourceKindStatusSKUs
anthropic-pricingfirst-partyok7
assemblyai-pricingfirst-partyok7
aws-bedrock-offers-us-east-1first-partyok134
aws-bedrock-pricelistfirst-partyok0
azure-retail-openaifirst-partyok125
azure-retail-vm-westeuropefirst-partyok3565
baseten-pricingfirst-partyok15
cerebras-modelsfirst-partyok2
coreweave-pricingfirst-partyok9
crusoe-cloud-pricingfirst-partyverdacht:ok6
datacrunch-instancesfirst-partyok52
deepgram-pricingfirst-partyok20
deepinfra-modelsfirst-partyok101
deepseek-pricingfirst-partyok2
digitalocean-dropletsfirst-partyok10
digitalocean-gpu-dropletsfirst-partyok16
elevenlabs-pricingfirst-partyverdacht:ok3
exoscale-opencomputefirst-partyok26
fal-pricingfirst-partyverdacht:ok21
fireworks-pricingfirst-partyok5
google-pricingfirst-partyok8
groq-modelsfirst-partyok10
hf-inference-providerscommunity cross-checkok175
hostinger-vpsfirst-partyok4
hostwinds-vpsfirst-partyok7
hyperstack-gpu-pricingfirst-partyok13
ionos-cloud-pricesfirst-partyok9
ionos-vpsfirst-partyok5
kamatera-pricingfirst-partyok3
kling-pricingfirst-partyok33
lambda-instancesfirst-partyok14
leaseweb-public-cloudfirst-partyok10
leaseweb-vpsfirst-partyok6
linodefirst-partyok45
litellmcommunity cross-checkok3253
luma-pricingfirst-partyok73
mistral-pricingfirst-partyok1
modelsdevcommunity cross-checkok8488
nebius-pricesfirst-partyok7
netcup-vpsfirst-partyok5
oci-pricelistfirst-partyok12
openai-pricingfirst-partyok3
openroutercommunity cross-checkok469
openrouter-endpointscommunity cross-checkok1143
ovh-catalog-cloudfirst-partyok72
ovh-catalog-vpsfirst-partyok44
paperspace-pricingfirst-partyok13
replicate-pricingfirst-partyok17
runpod-gpu-typesfirst-partyok47
runpod-pricingfirst-partyok19
runway-pricingfirst-partyok4
sambanova-modelsfirst-partyok6
scaleway-gpufirst-partyok11
scaleway-instancesfirst-partyok124
scaleway-instances-nl-ams-1first-partyok115
scaleway-instances-pl-waw-1first-partyok40
stability-pricingfirst-partyok6
together-gpu-clustersfirst-partyok7
together-pricingfirst-partyok16
transip-vpsfirst-partyok5
upcloud-pricingfirst-partyok9
vast-asksmarketplace asks, not list pricesok9
vultrfirst-partyok139
vultr-metalfirst-partyok23
xai-modelsfirst-partyok1

When two sources list the same model, the SKU page shows both side by side with "agrees" or "differs" and the percentage difference. The provider's own listing is first-party; a community source is labelled as a cross-check even when it is the only source for an item. OpenRouter rows are the price OpenRouter charges, which is a cross-check of the model vendor's list price rather than the vendor's own price.

Normalisation

What we do not have

Independence

No affiliate links, no sponsored rows, no paid placement, no accounts, no paywall on current data. Outbound links go to the provider's own page and nowhere else.

Licence

Today's snapshot and 90 days of history are published under CC BY 4.0 at /data. Attribute "Rack Rates" with a link. Code is MIT.

Charter last reviewed 20 October 2026.