Methodology
Every number on this site is either collected from a provider source or computed by a formula we show. Nothing is typed in by hand, and nothing stale is presented as live.
Price check status (2026-10-06)
No failed public-price checks in this snapshot.
Where prices come from
Once per day we fetch each provider's own pricing source: a public API where one exists, the official pricing page otherwise. Current providers: Daytona, Lium, Impossible Cloud, Synteq, RunPod, Lambda, Hyperstack, CoreWeave, Nebius, DataCrunch, Voltage Park, Crusoe, Jarvislabs, OVHcloud, Spheron, Microsoft Azure, AWS, Together AI, fal, Modal, Vultr, Massed Compute, TensorDock, SaladCloud, Replicate, Fireworks AI, Baseten, DigitalOcean, GMI Cloud, Prime Intellect, Cerebrium, Koyeb, Thunder Compute, Latitude.sh, Hot Aisle, Scaleway, Google Cloud (expanding). AWS uses its own public on-demand and spot feeds; Azure uses its Retail Prices API. Earlier AWS observations from a third-party mirror are excluded at read time, with the original history retained. Each row stores the price, the source URL, and the exact fetch timestamp. Each offer shows its own Updated date.
Three kinds of numbers
- Sourced: a price collected from the provider, shown with its source link and verification date.
- Computed: derived values ($/hr per GB VRAM, break-even hours). The formula is printed next to the result. One provider-level case: Scaleway publishes prices only in EUR, so its rows are converted as
usd_hr = eur_hr × ECB daily EUR/USD reference rate(rate via the frankfurter.dev ECB mirror, refreshed with each scrape). Small day-to-day moves on Scaleway rows can therefore reflect the exchange rate, not a repricing. - Street (buy) prices: the buy-price tables on GPU pages come from public reseller product listings, re-checked daily; each listing carries a source and date. A current check that cannot confirm a listing removes it from the purchase table. These are retailer observations, not manufacturer suggested prices.
- Never invented: if we can't verify a number, we say "no data" or flag the last updated value. A stale price presented as live is just a hallucination with a UI.
When a fetch fails
Providers change their pages. When a fetch or parse fails, that provider's rows are carried forward and visibly flagged with the date they were last verified: they never silently pretend to be today's price. Persistent failures get fixed or the provider is dropped.
The price ledger
The GPU Rental Price Index (GRPI)
The GPU Rental Price Index turns the whole market into one number. It is chain-linked per GPU family: base 100 on the first ledger date, then each day the level is multiplied by that day's link, and the link is the equal-weight mean of per-family price ratios.
The provider intersection is taken independently for each family. A family's ratio compares its cohort median (a median of per-provider medians) across only the providers that list that family with a firm offer on both the current and the previous snapshot. A provider that is newly added, or that stays live overall but drops or re-adds a single family for a day, is simply not in that family's intersection on the affected day, so it contributes nothing to the move. This is why composition change never moves the level: the comparison is always like-for-like within each family, and a global "provider is live somewhere" test never leaks into a family whose own listing changed.
About the base. The 2026-07-05 base snapshot covered 2 providers (Lambda, RunPod) and was cleaned once (removal of a RunPod $0.50 sentinel value), so the first link (2026-07-05 to 2026-07-06, +4.27%) reflects early-capture volatility rather than a settled market, and the provider universe reached full coverage (18 providers, all live) on 2026-07-08. The base anchors only the level, never a fixed provider set: the like-for-like universe widens as the ledger accumulates.
Tiers explained
Secure / on-demand and community / spot remain separate price tiers. The tier does not prove stock or a service guarantee. Reserved commitments and serverless rates also remain separate; neither counts as a spot observation. We show both and label every row, so the billing models can be compared explicitly. Prices are per GPU per hour and exclude storage, egress and networking.
Affiliate disclosure
Provider buttons use direct URLs. No commission is currently arranged. Prices sort the tables; tracking never changes the order. Lium listing links include campaign parameters so the provider can count referrals; no commission is arranged for those links. The cheapest listed rate wins whether or not the provider pays us anything, and no program we join asks for placement.
Revisions
This is a dated changelog for anything that changes how a published number is computed or which rows count toward it. Nothing here rewrites the ledger (rule #4: it is append-only). Every change below is either a read-time exclusion or a computation fix applied going forward.
- 2026-07-18: GRPI restated to per-family provider intersections. The index now takes its like-for-like provider set independently for each GPU family, instead of one global provider set for the whole index. This removed a composition leak where a provider joining or dropping a single family (while staying live overall) could move the level. Restating the series from the 2026-07-10 link forward moved published daily levels by roughly -0.02 to -0.38 points versus the previous calculation; the current level and the shape of the trend are unchanged in direction. See "How the index is built" above for the corrected method.
- 7-day stale age-out. A provider's rows stop appearing anywhere a live price is shown (tables, hero prices, badges, GRPI, price history) once its last successful fetch is more than 7 days old. Inside that window, carried-forward rows still render but are always badged with their last-verified date (rule #2: stale is never silent); past it, they age out of live surfaces entirely rather than presenting a week-plus-old number as current.
- Errata: read-time exclusions. When a row is later found to be mislabeled or wrong (a tier mismatch, a stale price captured as fresh, and so on), we do not edit the ledger:
data/errata.jsonlists the excluded provider, GPU, kind and date range with a stated reason, and every live surface (movers, records, history, GRPI) applies that exclusion at read time. The raw snapshot file is untouched; only the derived views change.Provider GPU Dates Reason Vultr b200, h100-sxm (on-demand) 2026-07-05 to 2026-07-17 The pre-2026-07-18 Vultr pricing-page scrape could not distinguish spot from on-demand for these GPUs. The 2026-07-18 API migration revealed both deploy preemptible-only, so the earlier on-demand label was wrong. Reclassified to spot at read time so they no longer count as firm records or firm history. Vultr all GPUs 2026-07-09 to 2026-07-17 Vultr's fetch failed (HTTP 403) from 2026-07-09 through 2026-07-17, so every Vultr row in that window is last-good carry-forward, not a fresh daily observation. Excluded from firm-price surfaces, history, records, movers and the index at read time. The raw ledger rows are preserved. RunPod a40 (community) 2026-08-08 to 2026-08-08 Snapshot-scoped removal only. RunPod's official public GraphQL gpuTypes response at https://api.runpod.io/graphql, checked 2026-08-08T08:24:59Z, returned communityCloud=false while communityPrice remained 0.35 for A40. RunPod's official GraphQL guide at https://docs.runpod.io/sdks/graphql/manage-pods documents these pricing and availability fields. The adapter now requires the matching cloud flag to be true; this entry removes, and does not replace, the false tier from only the snapshot with this generated_at. RunPod rtx-3090-ti (secure) 2026-08-08 to 2026-08-08 Snapshot-scoped removal only. RunPod's official public GraphQL gpuTypes response at https://api.runpod.io/graphql, checked 2026-08-08T08:24:59Z, returned secureCloud=false while securePrice remained 0.46 for RTX 3090 Ti. RunPod's official GraphQL guide at https://docs.runpod.io/sdks/graphql/manage-pods documents these pricing and availability fields. The adapter now requires the matching cloud flag to be true; this entry removes, and does not replace, the false tier from only the snapshot with this generated_at. RunPod rtx-5080 (secure) 2026-08-08 to 2026-08-08 Snapshot-scoped removal only. RunPod's official public GraphQL gpuTypes response at https://api.runpod.io/graphql, checked 2026-08-08T08:24:59Z, returned secureCloud=false while securePrice remained 0.59 for RTX 5080. RunPod's official GraphQL guide at https://docs.runpod.io/sdks/graphql/manage-pods documents these pricing and availability fields. The adapter now requires the matching cloud flag to be true; this entry removes, and does not replace, the false tier from only the snapshot with this generated_at. RunPod l4 (community) 2026-08-08 to 2026-08-08 Snapshot-scoped removal only. RunPod's official public GraphQL gpuTypes response at https://api.runpod.io/graphql, checked 2026-08-08T08:24:59Z, returned communityCloud=false while communityPrice remained 0.44 for L4. RunPod's official GraphQL guide at https://docs.runpod.io/sdks/graphql/manage-pods documents these pricing and availability fields. The adapter now requires the matching cloud flag to be true; this entry removes, and does not replace, the false tier from only the snapshot with this generated_at. AWS all GPUs 2026-09-27 to 2026-09-27 The ec2.shop observation is a third-party compilation. AWS first-party on-demand and spot feeds replaced it on 27 September; the original ledger is retained, excluded from published statistics. AWS all GPUs 2026-07-07 to 2026-09-26 AWS observations came from ec2.shop, a third-party compilation. Excluded under the first-party source rule; original daily files remain unchanged. The replacement AWS feeds begin on 27 September. Together AI h100 (on-demand) 2026-09-03 to 2026-10-05 Together added a Preemptible column before On-Demand on its pricing page (https://www.together.ai/pricing) on or about 2026-09-03. The adapter took the first price after each GPU name as on-demand, so Together's preemptible price was recorded as on-demand from the 2026-09-03 snapshot on. The live page checked 2026-09-28 reads, per GPU per hour, Preemptible / On-Demand: H100 $1.99 / $3.99, H200 $2.99 / $5.99, B200 $4.09 / $8.19, B300 $4.99 / $9.99. Reclassified to spot at read time (exact price match, so a correctly recorded on-demand row is untouched); the adapter now reads the columns by header. The raw ledger rows are preserved. Together AI h200 (on-demand) 2026-09-03 to 2026-10-05 Together added a Preemptible column before On-Demand on its pricing page (https://www.together.ai/pricing) on or about 2026-09-03. The adapter took the first price after each GPU name as on-demand, so Together's preemptible price was recorded as on-demand from the 2026-09-03 snapshot on. The live page checked 2026-09-28 reads, per GPU per hour, Preemptible / On-Demand: H100 $1.99 / $3.99, H200 $2.99 / $5.99, B200 $4.09 / $8.19, B300 $4.99 / $9.99. Reclassified to spot at read time (exact price match, so a correctly recorded on-demand row is untouched); the adapter now reads the columns by header. The raw ledger rows are preserved. Together AI b200 (on-demand) 2026-09-03 to 2026-10-05 Together added a Preemptible column before On-Demand on its pricing page (https://www.together.ai/pricing) on or about 2026-09-03. The adapter took the first price after each GPU name as on-demand, so Together's preemptible price was recorded as on-demand from the 2026-09-03 snapshot on. The live page checked 2026-09-28 reads, per GPU per hour, Preemptible / On-Demand: H100 $1.99 / $3.99, H200 $2.99 / $5.99, B200 $4.09 / $8.19, B300 $4.99 / $9.99. Reclassified to spot at read time (exact price match, so a correctly recorded on-demand row is untouched); the adapter now reads the columns by header. The raw ledger rows are preserved. Together AI b300 (on-demand) 2026-09-25 to 2026-10-05 Together added a Preemptible column before On-Demand on its pricing page (https://www.together.ai/pricing) on or about 2026-09-03. The adapter took the first price after each GPU name as on-demand, so Together's preemptible price was recorded as on-demand from the 2026-09-03 snapshot on. The live page checked 2026-09-28 reads, per GPU per hour, Preemptible / On-Demand: H100 $1.99 / $3.99, H200 $2.99 / $5.99, B200 $4.09 / $8.19, B300 $4.99 / $9.99. Reclassified to spot at read time (exact price match, so a correctly recorded on-demand row is untouched); the adapter now reads the columns by header. The raw ledger rows are preserved. - Intra-day snapshot policy. The current UTC day's snapshot can be superseded by a same-day re-run (for example, to fix a mislabeled tier) until that UTC day closes. Once a day closes, its snapshot is permanent: every prior day in
data/snapshots/is never rewritten, full stop.
Configuration, availability and model estimates
GPU count, node totals, CPU, RAM, disk and region come from a published configuration. Missing fields say “not reported”; an absent node minimum is not treated as a confirmed single-GPU offer. A recent price does not establish available stock.
Monthly plan equivalents use 720 hours; listed annual Latitude plans use 8,760 hours. Model weights, supported KV-cache calculations, runtime headroom and training allowances are separated on each model page. They are estimates, not performance or compatibility claims.
Source observations and update dates are collected on the Sources page linked in the footer.