How the tape is made
Methodology
This print was captured 17 Oct 2026, 00:18 UTC. The site is a static build. Numbers change when the build-time fetcher runs again, not when you refresh the page.
What a row is
A row is one published USD price for one GPU for one hour. When a provider only sells an 8-GPU node, the node price is divided by the GPU count and the row says so. You still have to rent the whole node.
Firm quotes are on-demand list prices, Runpod Community Cloud, and a starting price when that is the only number on the page. Spot and interruptible rates, including every Salad priority tier, are kept separate. Reserved and multi-year prices are shown but do not win the “cheapest” line.
The headline for a GPU prefers a 1× quote. An 8× per-GPU rate is used only when that provider does not publish a single-GPU price.
Vast.ai
Vast's website disallows /pricing/tables/ in robots.txt, so that path is not fetched. The index uses the public offers API at console.vast.ai/api/v0/bundles/, whose robots.txt allows the path. The source column says API. Each model is a search for one rentable, verified, on-demand GPU. The row is the lowest host with reliability of at least 0.90. The price is dph_total, the machine quote, not a GPU chip stripped of the rest of the box. Unverified hosts are dropped. Week-over-week for those rows uses an Internet Archive copy of the same API, or an older D1 snapshot when one exists.
Catalog pages
Runpod, Lambda, Hyperstack, Voltage Park, CoreWeave, Paperspace, DigitalOcean, Nebius, Verda (formerly DataCrunch), Thunder Compute, Massed Compute, Salad, Crusoe, and Koyeb are read from their public pricing pages. Before each fetch the worker checks robots.txt and skips a URL the file disallows. Thunder's comparison column, which reprints other clouds' prices, is ignored. Paperspace commitment prices are ignored. Voltage Park's rate cards say to contact sales; only the H100 starting price in the FAQ is kept, and it is labeled “starting at”. Nebius prints preemptible floors (“from $0.79” on H100, H200, and RTX Pro 6000 alike) and says the live spot rate is in the console, so those rows are left out. MIG slices stay in the provider table and are labeled as slices. They do not win the cheapest line.
Skipped on purpose
- Prime Intellect: the availability API requires a bearer token, and the app robots.txt disallows
/api. - TensorDock: the hostnode API returns 401 without an account token.
- SF Compute: the pricing URL redirects to a login wall.
- Fluidstack: no public pricing page was found.
Week-over-week
Each build writes src/data/snapshots/YYYY-MM-DD.json. Archive copies are stored separately, one file per provider and day. The weekly figure matches a row to the same provider, GPU, variant, price type, and GPU count in a print from 5 to 14 days earlier, choosing the print closest to seven days. A dash means that pair was not in an earlier print.
On the first builds, that earlier print can come from the Internet Archive copy of the same public page or, for Vast, of the bundles API. It is parsed with the same code and labeled as an archive. Archive.org is only asked for URLs this project already treats as public.
The daily worker
worker/index.ts is a Cloudflare Worker cron, 06:15 UTC, that runs the same collectors and inserts rows into D1. The schema is migrations/0001_init.sql. The database id is set in wrangler.toml. The static site does not read D1 at request time. When CLOUDFLARE_API_TOKEN is set, npm run build loads the latest stored snapshots through the Cloudflare API and uses them as the print, with older captures as the weekly comparison. Set CLOUDFLARE_ACCOUNT_ID if the token can see more than one account. If the token is missing or the query fails, the build fetches the public pages instead. This repository does not deploy the worker.
Reuse
The price table is released under CC BY 4.0. Credit GPU Price Index and link the week page. Downloads: latest.json and latest.csv, plus a dated copy next to each weekly permalink. GPU pages include an embed card and a badge image.
Sponsored slot and referrals
The dashed box marked “Sponsored · placeholder” is unsold advertising. It is not a price and it is not a ranking. Provider pages have a “Referral link · placeholder” that does not point at a tracked URL. Neither slot is a paid relationship.
This print's fetches
- Vast.aiok · 15
Public offers API. Website path /pricing/tables/ is disallowed and was not fetched.
- Runpodok · 42
robots.txt allows this URL.
- Lambdaok · 22
robots.txt allows this URL.
- Hyperstackok · 28
robots.txt allows this URL.
- Voltage Parkok · 1
robots.txt allows this URL.
- CoreWeaveok · 23
robots.txt allows this URL.
- Paperspaceok · 1
robots.txt allows this URL.
- DigitalOceanok · 9
robots.txt allows this URL.
- Nebiusok · 7
robots.txt allows this URL.
- Verdaok · 42
robots.txt allows this URL.
- Thunder Computeok · 4
robots.txt allows this URL.
- Massed Computeok · 21
robots.txt allows this URL.
- Saladok · 16
robots.txt allows this URL.
- Crusoeok · 7
robots.txt allows this URL.
- Koyebok · 21
robots.txt allows this URL.
- prime-intellectskipped · 0
Availability API requires a bearer token, and the app robots.txt disallows /api.
- tensordockskipped · 0
Hostnode pricing API returns 401 without an account token. No public price table was used.
- sf-computeskipped · 0
The pricing URL redirects to a login wall. robots.txt also disallows /api.
- fluidstackskipped · 0
No public pricing page was found (the /pricing path returns 404).