Runyard / GPU Index / Methodology

How the index is built

Every number on these pages can be traced to a provider's own published price and a fixed calculation. This page is the whole calculation. There is no proprietary engine.

1. Sources

Prices are collected directly from each provider's public pricing — their API where one exists, their pricing page where not. We do not license, scrape or resell any aggregator's data. 52 providers are read on every run.

A pricing page is read one of two ways. Where the prices are in the page's HTML, a plain fetch is enough. Where the page builds its price table in the browser, a headless browser loads it and the rendered text is read instead — the same text a visitor sees. Either way the extraction is the same: a GPU name, the price beside it, and the GPU count if the unit is a node. Prices published in euros are converted at that run's ECB-derived rate, which is recorded with the snapshot; per-second and per-minute billing is multiplied out to the hour.

Every provider was enabled only after its extracted prices were checked by hand against its page, and each price must fall inside a plausible band for its GPU or it is discarded — a mispaired number is worse than a missing one. A provider whose page changes shape yields nothing until it is re-checked; it never yields garbage.

ProviderTypeMethod
Amazon Web ServiceshyperscalerPublic on-demand price list for Linux, us-east-1. Instance price divided by GPU count.
Microsoft AzurehyperscalerAzure Retail Prices API, Linux, eastus. Pay-as-you-go and Spot recorded separately. VM price divided by GPU count.
RunPod Secure CloudneocloudPublic GPU-type listing. Secure Cloud is RunPod's own datacentre capacity, quoted per GPU-hour.
RunPod Community CloudmarketplaceThird-party hosts renting through RunPod. Quoted per GPU-hour; a listing may have no hosts behind it.
LambdaneocloudPublic on-demand pricing page. Instance price divided by GPU count.
Vast.aimarketplacePublic offer search, verified and rentable hosts only. Each offer is one observation; on-demand rate, not interruptible bids.
Oracle CloudhyperscalerOCI's public price-list API (the cost estimator's feed), pay-as-you-go, per GPU-hour as listed. One price worldwide.
CoreWeaveneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Massed ComputeneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
CivoneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
KoyebneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
OblivusneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
DataCrunch (Verda)neocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
GPU.aimarketplacePublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
ReplicateneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Paperspace (DigitalOcean)neocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
BeamneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Latitude.shneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
SpheronmarketplacePublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
RuncrateneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
LyceumneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
fal.aineocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
EnvergeneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
HyperAIneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Packet.aineocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Cyfuture AIneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
VultrhyperscalerPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
CrusoeneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
HyperstackneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
NebiusneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Together AIneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
ModalneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
JarvislabsneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Thunder ComputeneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
GMI CloudneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
BasetenneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
DigitalOcean GPU DropletshyperscalerPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Lightning AIneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
SaladCloudmarketplacePublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
ScalewayhyperscalerPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
CerebriumneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Taiga CloudneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
NeysaneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
E2E NetworksneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
TensorDockmarketplacePublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
io.netmarketplacePublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
AkashmarketplacePublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
NorthflankneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
QubridneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
SeewebneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
OVHcloudhyperscalerPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.
Denvr DataworksneocloudPublic pricing page, parsed. Per-GPU price is the listed per-GPU rate, or the node price divided by GPU count. Prices near reserved, committed or contract terms are discarded; anything outside a plausible range for the GPU is discarded.

2. One observation per priced unit

Each config a provider sells — an instance type, a VM SKU, a marketplace offer — becomes one row: provider, GPU, GPU count, billing type, hourly price for the whole unit. Nothing is aggregated at this stage and nothing is thrown away. A marketplace with 200 listings for one GPU yields 200 rows.

Rows are only created where the GPU model and count are known with certainty from the provider's naming. SKUs we cannot map are logged and skipped, never guessed. Fractional-GPU products — a sixth of an A10, a MIG slice — are excluded: a fraction of a GPU is not a GPU price.

3. Normalise to $/GPU/hour

price per GPU-hour = unit price per hour ÷ GPUs in the unit. An 8×H100 node at $27.20/hr is recorded as $3.40 per GPU-hour. This is the only way to compare an eight-GPU hyperscaler instance with a single-card marketplace listing, and it is the convention every published index uses.

It has a known bias: a hyperscaler instance price also buys CPUs, RAM, storage and network, so hyperscaler per-GPU figures carry that overhead. We do not attempt to strip it out — there is no defensible way to — but the summary chart stacks by provider type precisely so that premium is visible rather than hidden.

4. The headline: a median of medians

For each GPU, on each day:

  1. Take every on-demand, in-stock row for that GPU.
  2. Group by provider. Reduce each provider to the median of its own per-GPU prices.
  3. The headline is the median of those provider medians.

Step 2 is what stops a provider with thirty instance sizes — or a marketplace with three hundred hosts — from dominating the figure. Every provider counts once. The result is a measure of where the market sits, not where the cheapest corner of it is.

Spot, interruptible and reserved prices never enter the median. They are recorded, and they set the “floor, any billing” figure, but a price that can be revoked or requires a commitment is not the on-demand market.

5. Cheapest, floor and monthly

Cheapest is the lowest on-demand per-GPU price seen from any provider. Floor, any billing is the lowest price across every billing type including spot. Monthly is hourly × 720, the conventional month.

6. History

Every collector run is stored as a snapshot and committed to the repository, so the history of the index is the version history of the data, and every price change is a diff anyone can inspect. Runs are at least daily. The latest snapshot is 2026-10-11; there are 84 in total.

One backfill, clearly marked. Live collection began 2026-09-11. Before that date, the only history is Lambda's, taken from the Internet Archive's dated copies of lambda.ai/pricing — 16 monthly captures from 2025-06-04. Those are real prices Lambda published on real dates; each row records the archive URL it was read from. On those dates the index is one provider, and the charts draw it as one provider's line rather than pretending to a market median. No other provider has usable archived pricing — the others render their prices in the browser, so the archive holds no numbers.

Nothing is interpolated or estimated. A run with no data for a provider is a gap in that provider's line, not a straight line across it.

7. Ranking

The summary table is ordered by provider coverage, then by price. It is deliberately not ordered by our own traffic to each GPU's page, which would make the ranking a function of the ranking.

8. Model fit

The “what fits” table on each GPU page uses the same arithmetic as the rest of Runyard: memory needed = weights (parameters × bits per weight ÷ 8) + KV cache at 8K context + about a gigabyte of runtime overhead, against 90% of the card's memory. Capacity follows total parameters even for mixture-of-experts models. Where one GPU is not enough, GPUs required = ceiling(needed ÷ usable), and the set is priced at that day's median.

9. Known limitations

  • One region per hyperscaler (us-east-1, eastus). Other regions differ.
  • Linux pricing only. Windows licensing is excluded.
  • Marketplace prices are the on-demand rate of each listing at collection time; they move continuously.
  • Fixed-price providers are assumed in stock. Only marketplaces report availability per listing.
  • The provider set is small and growing; the median moves as providers are added. A change in the median on the day a provider is added reflects coverage, not the market.

Questions

Is this data free to use?

Yes. Every snapshot is committed to a public repository as newline-delimited JSON, one row per priced configuration, with the source URL on every row. Cite the page and the date. The only thing we ask is that a reuse says where the numbers came from and does not strip the provider attribution.

Why is the index a median and not an average?

An average is pulled by the extremes — one hyperscaler at $11 or one marketplace host at $1.50 moves it. The median is the middle of the market and ignores how far the extremes sit. Taking each provider's own median first stops a provider with many sizes, or a marketplace with hundreds of hosts, from counting more than once.

Do spot or reserved prices affect the headline?

Never. They are collected and shown — the "floor, any billing" figure and the dashed lines on the charts — but a price that can be revoked or requires a commitment is not the on-demand market, so the headline median is on-demand only.

What happens when a provider's page changes?

The reader yields nothing and the run log says so; the provider drops out of that snapshot rather than contributing a wrong number. Every price must fall inside a plausible band for its GPU, and prices near words like reserved, committed or monthly are discarded. A provider comes back the run after its reader is re-checked by hand.

Is history ever backfilled or estimated?

No, with one documented exception: Lambda's pricing page before live collection began, taken from dated Internet Archive captures, each row carrying its archive URL, drawn as a single provider's line and never blended into a market median. Every other point on every chart is a price we read ourselves on that date.

How do the currency conversions work?

Rates are fetched once per run from a public ECB-derived source and stored with the snapshot, so every page converts at one dated rate and nothing calls an exchange-rate service on render. Providers that publish in euros are converted to dollars at that run's rate before they enter the index.

The data behind every page, as committed daily snapshots.
Browse snapshots →