Methodology
Every number on this site is either fetched from a provider source or computed by a formula we show. Nothing is typed in by hand, and nothing stale is presented as live.
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: 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, SF Compute, Scaleway, Google Cloud (expanding). Two exceptions to "provider's own source": AWS prices come from ec2.shop, a public mirror of AWS's on-demand and spot feeds (AWS's own bulk file is impractical to fetch daily), and Azure prices come from Azure's public Retail Prices API. Both are labeled with those sources on each row. Each row stores the price, the source URL, and the exact fetch timestamp. The Verified badge on every table shows that timestamp.
Three kinds of numbers
- Sourced: a price fetched 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 row links its source with a verification date and ages out after 30 days without re-verification. Reseller spread commonly runs 10-30%, so the median is the headline number. These are street prices for new units, not MSRP.
- Never invented: if we can't verify a number, we say "no data" or flag the last verified 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
Every daily snapshot is kept forever (49 so far, since 2026-07-05). That append-only ledger powers the per-GPU history charts and the downloadable dataset. History cannot be backfilled: which is exactly why we record it.
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 capacity runs in datacenters with availability guarantees. Community / spot capacity is cheaper and interruptible. We show both and label every row, because the cheapest number without its tier is a trap. Prices are per GPU per hour and exclude storage, egress and networking.
Affiliate disclosure
Provider buttons currently use each provider's plain URL, without our referral or affiliate tracking. If an approved referral link is added later, the link will be marked sponsored and this disclosure will be updated. Link status never influences ordering: tables sort by price, and the cheapest verified rate wins whether or not the provider pays us anything.
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. - 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.
Cite this data
Referencing the index in research or writing? Cite the snapshot you retrieved. The data page has the same formats plus the CSV and JSON downloads.
APA
GPU Rental Prices. (2026). GPU rental price index [Data set]. gpurentalprices.com. https://doi.org/10.5281/zenodo.21435394 (Retrieved 2026-08-22)BibTeX
@misc{gpurentalprices_2026,
title = {GPU Rental Price Index},
author = {{GPU Rental Prices}},
year = {2026},
doi = {10.5281/zenodo.21435394},
howpublished = {\url{https://gpurentalprices.com/data}},
note = {Accessed 2026-08-22}
}HTML
<a href="https://gpurentalprices.com/data">GPU Rental Price Index</a>. GPU Rental Prices, 2026. DOI: <a href="https://doi.org/10.5281/zenodo.21435394">10.5281/zenodo.21435394</a>. Accessed 2026-08-22.