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.
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.
| Provider | Type | Method |
|---|---|---|
| hyperscaler | Public on-demand price list for Linux, us-east-1. Instance price divided by GPU count. | |
| hyperscaler | Azure Retail Prices API, Linux, eastus. Pay-as-you-go and Spot recorded separately. VM price divided by GPU count. | |
| neocloud | Public GPU-type listing. Secure Cloud is RunPod's own datacentre capacity, quoted per GPU-hour. | |
| marketplace | Third-party hosts renting through RunPod. Quoted per GPU-hour; a listing may have no hosts behind it. | |
| neocloud | Public on-demand pricing page. Instance price divided by GPU count. | |
| marketplace | Public offer search, verified and rentable hosts only. Each offer is one observation; on-demand rate, not interruptible bids. | |
| hyperscaler | OCI's public price-list API (the cost estimator's feed), pay-as-you-go, per GPU-hour as listed. One price worldwide. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| marketplace | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| marketplace | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| hyperscaler | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| hyperscaler | Public 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. | |
| neocloud | Public 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. | |
| marketplace | Public 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. | |
| hyperscaler | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| marketplace | Public 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. | |
| marketplace | Public 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. | |
| marketplace | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| neocloud | Public 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. | |
| hyperscaler | Public 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. | |
| neocloud | Public 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. |
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.
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.
For each GPU, on each day:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.