Data sources
Three first-party feeds, all reached directly. No aggregator sits between GPUQuant and the provider, because a number that cannot be traced to a primary source cannot be defended.
The three differ more than they look. One archives its full price list every month, one answers historical questions a calendar month at a time, and one publishes only what is true today. That asymmetry shapes the whole product.
Amazon Web Services
EC2 Price List bulk filesAWS publishes the complete EC2 price list as public, unauthenticated bulk files, and keeps every historical version. That archive is what gives GPUQuant a genuine multi-year AWS series rather than a series that starts today.
Each version carries an effective date. GPUQuant takes one version per calendar month, the latest published in that month, so the monthly series has exactly one AWS point per month by construction. Files are read region by region and streamed rather than buffered: a single current region file is around 290 MB, and the global file is several gigabytes and never fetched.
The price GPUQuant keeps is the Linux, shared-tenancy, on-demand rate with no pre-installed software and no licence, for instance types on an explicit NVIDIA allowlist. The GPU count comes from the price file itself, which matches the count in the AWS instance specification tables.
g4ad is AMD, inf2 is Inferentia and trn1 is Trainium, all with a non-zero GPU count. Without an explicit allowlist, non-NVIDIA silicon lands in an NVIDIA benchmark.
AWS ships more than one row for the same instance, operating system and tenancy, and some are $0.0000. Taking the first match silently produces a free H200. Zero rows are dropped and the highest remaining rate is kept.
The schema grows from 61 columns in 2015 to 93 today. A filter on a column that does not exist yet matches nothing, which looks identical to a source with no GPU data. Filters are applied only where the column is present.
Microsoft Azure
Azure Retail Prices APIThe Azure Retail Prices API is public and needs no subscription, account or key. It returns the current price of every meter, paginated.
GPUQuant keeps consumption-type records for VM sizes on an explicit NVIDIA list, excluding Windows, Spot, Low Priority and dedicated hosts. Azure prices the whole virtual machine and its size name does not encode a GPU count, so every count in the catalog was read from the Accelerators table of the corresponding Microsoft size-series page, and each offering row links to the page it came from.
Azure publishes no price history at all. There is no version index and no historical endpoint.
That is a permanent limitation, not a gap to be filled. The Azure series begins with the first GPUQuant snapshot and grows one month at a time from there. Nothing earlier can be recovered, and nothing earlier is invented.
A region filter of EastUS returns zero rows with no error; eastus returns the data. A typo looks exactly like an empty result.
It records when the current price took effect. It says something useful about how long a standing price has held, but stringing those dates together would not produce a history, so GPUQuant shows it as metadata and never as a chart point.
Windows rows are identifiable by product name; Linux is everything that is left. The filter has to work by exclusion.
Google Cloud
Cloud Billing Catalog APIThe Cloud Billing Catalog API returns every Compute Engine SKU, and accepts a plain API key restricted to the Billing API. Historical pricing works through a start and end time, provided the window sits inside a single calendar month, so a multi-year backfill is one request set per month.
Google is the only one of the three that prices accelerators as their own SKUs, separate from the vCPU and memory of the machine they attach to. That makes the accelerator price easy to read and easy to misuse: on its own it is not the price of renting the machine. GPUQuant rebuilds the complete machine price from its published components before dividing by GPU count. The calculations page shows the arithmetic.
Dynamic Workload Scheduler, Calendar mode and Reserved rows all carry usageType OnDemand, at roughly half list price, and some at zero. Trusting the usage type alone understates Google Cloud by around half.
The H200 accelerator is described as “H200 141GB GPU”, with no vendor name. A filter looking for “Nvidia” silently loses it, and the GPU looks absent from Google Cloud when it is not.
A window spanning two calendar months returns an error rather than a merged result.
What this means for the product
Two providers can be backfilled and one cannot, so provider coverage of any given month is uneven and changes over time. Rather than hide that, GPUQuant records which providers contributed to every published point, marks the months where that set changed, and refuses to quote a period change across a coverage break.
The consequence worth internalizing: a step in the reference price is not always a price move. Check the provider count in the tooltip.
Coverage, freshness and every excluded SKU are listed on the data coverage page.