AWS, Microsoft Azure, Google Cloud, Oracle and Lambda all publish GPU prices through a cloud pricing API. Each API returns a SKU's price in the provider's own unit, term and currency, so the numbers do not compare until they are converted. AWS spreads one GPU instance's prices across four APIs [1, 7, 8, 9]. Azure returns each reservation as one total for the whole term [18, 19]. Google Cloud prices GPU machines by resource [26], Lambda prices whole instances in US cents [27] and Oracle prices each GPU by the hour with no region [30].
This note reads each API as it stood on 24 October 2026. Live responses from AWS, Azure and Oracle supply the examples. Google Cloud and Lambda require a key, so they are described from their documentation [22, 27]. Prices below are listings as published that day unless dated otherwise, in U.S. dollars, Linux where it applies. Per-GPU figures are arithmetic from them.
Which cloud GPU pricing APIs exist
| Provider and API | Access | Price as returned | Leaves out |
|---|---|---|---|
| AWS Price List Query API (GetProducts) and Bulk API | IAM permission [1] | USD per instance-hour, upfront fees as a quantity [13] | Spot, Savings Plans in the Query API, Capacity Block fees [1, 13] |
| Azure Retail Prices API, prices.azure.com/api/retail/prices | None [17] | Hourly rates, and reservations as term totals [18] | Savings plans before api-version 2023-01-01-preview [17] |
| Google Cloud Billing Catalog API v1 (services.skus.list) and Pricing API | API key [22, 24] | Units plus nanos per resource unit [22] | Contract prices without a billing account [24] |
| Lambda Cloud API, GET /api/v1/instance-types | Account API key [27] | US cents per instance-hour [27] | Term, pricing type and timestamp [27] |
| Oracle list price API, cetools/api/v1/products | None [29] | Price per GPU-hour by part number [30] | Region, node size and term [30] |
Check each API's terms of use before automating calls.
AWS Price List API and GPU instances
The Query API returns prices by SKU, and the Bulk API serves the same catalog as JSON and CSV files [1]. AWS treats both as informational: "If there's a difference between the price list file and a service pricing page, AWS charges the prices on the service pricing page" [1].
A GetProducts call for p5.48xlarge in US East (N. Virginia), Linux, shared tenancy, returned six SKUs on 24 October 2026 [13]. The on-demand rate of $55.04 per instance-hour sits on the SKU with capacitystatus "Used" and market option OnDemand. An UnusedCapacityReservation SKU repeats it, and the other four read $0.00, including all three Capacity Block SKUs [13]. A filter that skips capacitystatus and marketoption collects those zeros and the duplicate.
The catalog "doesn't include Amazon Elastic Compute Cloud (Amazon EC2) Spot Instances", and the Query API "doesn't support Savings Plan prices" [1]. Those come from DescribeSpotPriceHistory [7] and DescribeSavingsPlansOfferingRates [8]. Capacity Block fees come from DescribeCapacityBlockOfferings [9] and the Capacity Blocks pricing page [10].
| p5.48xlarge (8 H100), US East (N. Virginia) | Per instance-hour | Per GPU-hour |
|---|---|---|
| On-demand | $55.04 | $6.88 |
| Capacity Block | $47.757 | $5.970 |
| Spot, six Availability Zones | $23.74 to $37.38 | $2.97 to $4.67 |
| Compute Savings Plan, 1 year, no upfront | $43.344 | $5.418 |
| EC2 Instance Savings Plan, 3 years, all upfront | $20.695 | $2.587 |
Sources: [10, 13, 14, 15]. Captured 24 October 2026.
Spot history: DescribeSpotPriceHistory and its 90 days
StartTime reaches back "up to the past 90 days", and the response includes "the last price change before the start time, which is the effective price as of the start time" [7]. A one-minute window therefore returns the price in force in each Availability Zone [15]. A request for 100 to 120 days back returned no records and no error [15]. What research shows about training on spot GPUs covers what those prices save.
Azure Retail Prices API for GPU VMs
Microsoft describes the API as "an unauthenticated experience to get retail rates for all Azure services" [17]. Savings plan rates appear only with api-version 2023-01-01-preview, and from that version filter values are case sensitive [17]. In a test on 24 October 2026, a lowercase SKU name also returned zero rows under the older 2021-10-01-preview [18]. Match armSkuName casing exactly. Each call returns at most 1,000 records [17].
For Standard_ND96isr_H100_v5 in East US, the Linux consumption row is $98.32 per hour [18]. The reservation rows read 551,221 for 1 Year, 1,134,310 for 3 Years and 1,722,566 for 5 Years, and their unitOfMeasure still says "1 Hour" [18]. Each is a total for the whole term, as a Microsoft skill reference for its Fabric service also states [19].
Spot meters carry "Spot" in meterName and skuName [20], and the ND H100 v5 Spot row was $18.17 per hour [18]. GPU counts come from the size page: eight H100 GPUs for ND96isr H100 v5 [21].
Google Cloud Billing Catalog API and SKU prices
"Calling the Cloud Billing Catalog API requires an API Key" [22]. It lists public SKUs at up to 5,000 per page, with usage types such as OnDemand, Preemptible, Commit1Mo and Commit1Yr [22]. A price arrives as units plus nanos, so $1.75 is units=1 and nanos=750,000,000 [22]. Without a time range the latest pricing is "up to 12 hours old at most", and a historical range must fall within one calendar month [23].
The Pricing API is in Preview, at v1beta and v2beta, under Google's Pre-GA terms [24]. Public calls return listPrice. Calls for a billing account add contractPrice and effectiveDiscountPercent [24].
Compute Engine bills A3 instances "for their attached GPUs, predefined vCPUs, memory, and bundled Local SSD disks" [26], so a machine rate is the sum of those SKUs. A3 Ultra has no on-demand option [26].
Lambda API instance types and Oracle list prices
Lambda's GET /api/v1/instance-types returns instance types with specifications, pricing and regions with capacity [27]. It needs an API key [27]. Its price_cents_per_hour field is "The price of the instance type in US cents per hour" [27]. On 24 October 2026 the pricing page stated prices per GPU that vary with node size: H100 SXM at $3.99 per GPU-hour in an 8-GPU instance and $4.29 in a 1-GPU instance, plus applicable sales tax [28]. On 7 November 2026 it listed $4.59 and $4.89, taking effect on 16 November 2026 [37].
Oracle's endpoint needs no key [29]. GPU lines use the metric "GPU Per Hour": H100 at $10, B200 at $14 and MI300X at $6 [30]. The live response nests prices under "currencyCodeLocalizations" with numeric values, which matches neither the documented sample nor the documented schema [29, 30]. NVIDIA AI Enterprise software lines also use "GPU Per Hour" [30], so a filter on that metric alone mixes software with hardware.
How to normalize GPU prices per GPU-hour
| Step | Example from 24 October 2026 |
|---|---|
| Take the GPU model and count from a second source | AWS price attributes give gpu "8" with no model. DescribeInstanceTypes returns H100, count 8 [12, 13, 15] |
| Handle fractional GPUs | g6f.large reports Count 0 and GpuPartitionSize 0.125, so $0.202 / 0.125 = $1.616 per full GPU-hour [12, 13, 15] |
| Spread upfront fees over the term | AWS defines three years as 94,608,000 seconds [11]. 543,866 / 26,280 = $20.695, the matching Savings Plan rate [13, 14] |
| State the hours behind term totals | Microsoft states no hour count. At 8,760 a year, 551,221 / 8,760 / 8 = $7.87 per GPU-hour [18] |
| Keep variant and node size | H100 SXM and NVL differ in memory and NVLink bandwidth [36]. Lambda's per-GPU price changes with node size [28] |
The H100 on-demand listings read this way on 24 October 2026 ran from $3.99 per GPU-hour (Lambda, 8-GPU instance, pricing page) to $12.29 (Azure ND96isr H100 v5) [18, 28]. They describe different hosts, networks and terms.
FOCUS 1.4, the FinOps billing data specification, defines List Unit Price as the provider-published unit price "exclusive of any discounts" [32], and its Pricing Category values Standard, Dynamic and Committed fit on-demand, spot and committed prices [33]. Those terms are defined for billed charges [35], so using them for list prices aligns vocabulary only.
Record capture time and the raw response
AWS price list files carry a publicationDate and a version [5]. The EC2 version index listed 123 versions on 24 October 2026, one per month in 2026 [16], although the files "can change anytime" [6]. Azure rows carry an effectiveStartDate [17]. Oracle gives one lastUpdated for the whole list [30], and Lambda's instance types carry no timestamp [27].
The time of the call is the one timestamp all five share, so store it in UTC beside the unchanged response. The proposed FOCUS SKU Price dataset, in final review for the 1.5 release, builds history the same way, from effective dates and "from keeping successive snapshots where a provider does not deliver past prices" [35]. What posted GPU cloud prices tell you and Datasets that state their limits cover what a listing shows and what a record should carry.
Rillor's GPU and neocloud pricing method reads official provider pricing APIs and published pricing pages within each source's terms. The method records each observation's UTC capture time, keeps the raw response unchanged with a link from each observation to it, and converts each price to U.S. dollars per GPU-hour.
Read the full report
The full report adds the request behind each live call, the full AWS and Azure price tables, the gaps in each API and 37 numbered sources.

