How vmprices collects its prices

Every price on this site comes from the providers' own published price data. Nothing is estimated, scraped from third parties or adjusted.

What a price is

The matrix: sizes down, zones across

The matrix on the front page works like a low-fare calendar. Each row is a size, each column a zone, and each cell the cheapest offer for that size in that zone, from the clouds and pricing you pick. It shows the machine type and cloud that won, and a click shows the next cheapest.

Sizes

A row is a number of vCPUs and an amount of memory. A machine type is in a row when it has at least the row's vCPUs and memory, fewer vCPUs than the next level and less than twice the row's memory. So every machine type is in at most one row, and a slightly bigger one still counts: a 2 vCPU type with 7.5 GB is in "2 vCPU · 4 GB", a 24 vCPU type with 96 GB in "16 vCPU · 64 GB". Each row's second line says which vCPU and memory figures its cells actually hold. The rows run from 1 vCPU to 192 vCPU, with 1, 2, 4 and 8 GB per vCPU (and the micro sizes, down to 0.5 GB, at 1 and 2 vCPU). GPU and accelerator types are left out, and so are types with 16 GB per vCPU or more, or under 1 GB per vCPU above 2 vCPU; they are on the machine type view and pages.

vCPUTakesRows (memory)
11 vCPU0.5 GB (0.5 to under 1), 1 GB (1 to under 2), 2 GB (2 to under 4), 4 GB (4 to under 8), 8 GB (8 to under 16)
22 to 3 vCPU0.5 GB (0.5 to under 1), 1 GB (1 to under 2), 2 GB (2 to under 4), 4 GB (4 to under 8), 8 GB (8 to under 16), 16 GB (16 to under 32)
44 to 7 vCPU4 GB (4 to under 8), 8 GB (8 to under 16), 16 GB (16 to under 32), 32 GB (32 to under 64)
88 to 15 vCPU8 GB (8 to under 16), 16 GB (16 to under 32), 32 GB (32 to under 64), 64 GB (64 to under 128)
1616 to 31 vCPU16 GB (16 to under 32), 32 GB (32 to under 64), 64 GB (64 to under 128), 128 GB (128 to under 256)
3232 to 47 vCPU32 GB (32 to under 64), 64 GB (64 to under 128), 128 GB (128 to under 256), 256 GB (256 to under 512)
4848 to 63 vCPU48 GB (48 to under 96), 96 GB (96 to under 192), 192 GB (192 to under 384), 384 GB (384 to under 768)
6464 to 95 vCPU64 GB (64 to under 128), 128 GB (128 to under 256), 256 GB (256 to under 512), 512 GB (512 to under 1024)
9696 to 127 vCPU96 GB (96 to under 192), 192 GB (192 to under 384), 384 GB (384 to under 768), 768 GB (768 to under 1536)
128128 to 191 vCPU128 GB (128 to under 256), 256 GB (256 to under 512), 512 GB (512 to under 1024), 1024 GB (1024 to under 2048)
192192 to 255 vCPU192 GB (192 to under 384), 384 GB (384 to under 768), 768 GB (768 to under 1536), 1536 GB (1536 to under 3072)

Architecture, CPU vendor, shared or dedicated cores and a highest monthly price are filters on top of this. "x86 and Arm, separate rows" gives every size an x86 row and an Arm row.

Zones

Columns are zones: the same geography on every cloud. The providers name their regions differently (Google's europe-west3 is Frankfurt and europe-west8 is Milan, AWS's eu-central-1 is Frankfurt too), so a zone is built from where each region is documented to be, never from its name: Google lists a city for each region, Microsoft a "physical location" (a city, a state or a country), AWS puts the place in the region's name. In the United States, where AWS and Azure name only the state, the states decide: Virginia, South Carolina and Ohio are us-east; Iowa, Illinois, Texas and Wyoming us-central; the Pacific and mountain states us-west. In Europe, Ireland, the United Kingdom, Paris and the Benelux are eu-west; the Nordic countries eu-north; Germany, Switzerland, Austria and Poland eu-central; Italy, Spain and Marseille eu-south. Where a provider names only a country (AWS "Canada (Central)", Microsoft "Netherlands"), the country decides. The coarser level groups the zones by part of the world.

Sources: Google Cloud: Regions and zones (location of each zone), AWS: Regions (the region names), Microsoft: Azure regions list (physical location), and AWS's launch post for Aragón.

ZoneCoversRegions, and where the provider says they are
us-west
US West
California, Oregon, Washington, Nevada, Utah, ArizonaAWS us-west-1 US West (N. California)
Google Cloud us-west2 Los Angeles, California
Azure westus California, US
AWS us-west-2 US West (Oregon)
Google Cloud us-west1 The Dalles, Oregon
Azure westus2 Washington, US
Google Cloud us-west4 Las Vegas, Nevada
Google Cloud us-west3 Salt Lake City, Utah
Azure westus3 Phoenix, Arizona
us-central
US Central
Iowa, Illinois, Texas, WyomingGoogle Cloud us-central1 Council Bluffs, Iowa
Azure centralus Iowa, US
Azure northcentralus Illinois, US
Google Cloud us-south1 Dallas, Texas
Azure southcentralus Texas, US
Azure westcentralus Wyoming, US
us-east
US East
Virginia, South Carolina, OhioAWS us-east-1 US East (N. Virginia)
Google Cloud us-east4 Ashburn, Virginia
Azure eastus Virginia, US
Azure eastus2 Virginia, US
Google Cloud us-east1 Moncks Corner, South Carolina
AWS us-east-2 US East (Ohio)
Google Cloud us-east5 Columbus, Ohio
ca
Canada
Toronto, Québec, Central Canada, CalgaryGoogle Cloud northamerica-northeast2 Toronto, Canada
Azure canadacentral Toronto, Canada
Google Cloud northamerica-northeast1 Montréal, Canada
Azure canadaeast Quebec, Canada
AWS ca-central-1 Canada (Central) (AWS names no city)
AWS ca-west-1 Canada West (Calgary)
mx
Mexico
MexicoGoogle Cloud northamerica-south1 Querétaro, Mexico
Azure mexicocentral Querétaro State, Mexico
AWS mx-central-1 Mexico (Central) (AWS names no city)
sa-east
Brazil
São Paulo, Rio de JaneiroGoogle Cloud southamerica-east1 Osasco, São Paulo, Brazil
AWS sa-east-1 South America (São Paulo)
Azure brazilsouth São Paulo State, Brazil
Azure brazilsoutheast Rio, Brazil
sa-west
Chile
SantiagoGoogle Cloud southamerica-west1 Santiago, Chile
Azure chilecentral Santiago, Chile
eu-west
Western Europe
Ireland, the United Kingdom, Paris, Belgium, the NetherlandsAWS eu-west-1 Europe (Ireland)
Azure northeurope Ireland
Google Cloud europe-west2 London, United Kingdom
AWS eu-west-2 Europe (London)
Azure uksouth London, United Kingdom
Azure ukwest Cardiff, United Kingdom
Google Cloud europe-west9 Paris, France
AWS eu-west-3 Europe (Paris)
Azure francecentral Paris, France
Google Cloud europe-west4 Eemshaven, Netherlands
Azure westeurope Netherlands
Azure belgiumcentral Brussels, Belgium
Google Cloud europe-west1 St. Ghislain, Belgium
eu-north
Northern Europe
Sweden, Norway, Denmark, FinlandGoogle Cloud europe-north2 Stockholm, Sweden
AWS eu-north-1 Europe (Stockholm)
Azure swedencentral Gävle, Sweden
Azure swedensouth Southern Sweden (Not in Microsoft's region list; the region name says southern Sweden)
Azure norwayeast Norway
Azure norwaywest Norway
Azure denmarkeast Copenhagen, Denmark
Google Cloud europe-north1 Hamina, Finland
eu-central
Central Europe
Germany, Switzerland, Austria, PolandGoogle Cloud europe-west3 Frankfurt, Germany
AWS eu-central-1 Europe (Frankfurt)
Azure germanywestcentral Frankfurt, Germany
Google Cloud europe-west10 Berlin, Germany
Azure germanynorth Berlin, Germany
Google Cloud europe-west6 Zurich, Switzerland
AWS eu-central-2 Europe (Zurich)
Azure switzerlandnorth Zurich, Switzerland
Azure switzerlandwest Geneva, Switzerland
Azure austriaeast Vienna, Austria
Google Cloud europe-central2 Warsaw, Poland
Azure polandcentral Warsaw, Poland
eu-south
Southern Europe
Italy, Spain, MarseilleGoogle Cloud europe-west8 Milan, Italy
AWS eu-south-1 Europe (Milan)
Azure italynorth Milan, Italy
Google Cloud europe-west12 Turin, Italy
Google Cloud europe-southwest1 Madrid, Spain
Azure spaincentral Madrid, Spain
AWS eu-south-2 Europe (Spain) (AWS News Blog: "The AWS Region in Aragón, Spain, is now open")
Azure francesouth Marseille, France
me
Middle East
Israel, Qatar, Saudi Arabia, Bahrain, the United Arab EmiratesGoogle Cloud me-west1 Tel Aviv, Israel
AWS il-central-1 Israel (Tel Aviv)
Azure israelcentral Israel
Google Cloud me-central1 Doha, Qatar
Azure qatarcentral Doha, Qatar
Google Cloud me-central2 Dammam, Saudi Arabia
AWS me-south-1 Middle East (Bahrain)
Azure uaenorth Dubai, United Arab Emirates
Azure uaecentral Abu Dhabi, United Arab Emirates
AWS me-central-1 Middle East (UAE)
af
South Africa
Johannesburg, Cape TownGoogle Cloud africa-south1 Johannesburg, South Africa
Azure southafricanorth Johannesburg, South Africa
AWS af-south-1 Africa (Cape Town)
Azure southafricawest Cape Town, South Africa
ap-south
India
Mumbai, Pune, Delhi, Hyderabad, ChennaiGoogle Cloud asia-south1 Mumbai, India
AWS ap-south-1 Asia Pacific (Mumbai)
Azure westindia Mumbai, India
Azure centralindia Pune, India
Google Cloud asia-south2 Delhi, India
AWS ap-south-2 Asia Pacific (Hyderabad)
Azure indiasouthcentral Hyderabad, India
Azure southindia Chennai, India
ap-southeast
Southeast Asia
Singapore, Indonesia, Malaysia, ThailandGoogle Cloud asia-southeast1 Jurong West, Singapore
AWS ap-southeast-1 Asia Pacific (Singapore)
Azure southeastasia Singapore
Google Cloud asia-southeast2 Jakarta, Indonesia
AWS ap-southeast-3 Asia Pacific (Jakarta)
Azure indonesiacentral Jakarta, Indonesia
Azure malaysiawest Kuala Lumpur, Malaysia
AWS ap-southeast-5 Asia Pacific (Malaysia)
Google Cloud asia-southeast3 Bangkok, Thailand
AWS ap-southeast-7 Asia Pacific (Thailand)
ap-east
Hong Kong, Taiwan
Hong Kong, Taipei, Changhua CountyGoogle Cloud asia-east2 Hong Kong
AWS ap-east-1 Asia Pacific (Hong Kong)
Azure eastasia Hong Kong
AWS ap-east-2 Asia Pacific (Taipei)
Azure taiwannorth Taipei, Taiwan
Google Cloud asia-east1 Changhua County, Taiwan
ap-northeast
Japan, Korea
Tokyo, Osaka, Seoul, BusanGoogle Cloud asia-northeast1 Tokyo, Japan
AWS ap-northeast-1 Asia Pacific (Tokyo)
Azure japaneast Tokyo, Saitama, Japan
Google Cloud asia-northeast2 Osaka, Japan
AWS ap-northeast-3 Asia Pacific (Osaka)
Azure japanwest Osaka, Japan
Google Cloud asia-northeast3 Seoul, South Korea
AWS ap-northeast-2 Asia Pacific (Seoul)
Azure koreacentral Seoul, South Korea
Azure koreasouth Busan, South Korea
au
Australia
New South Wales, Victoria, CanberraGoogle Cloud australia-southeast1 Sydney, Australia
AWS ap-southeast-2 Asia Pacific (Sydney)
Azure australiaeast New South Wales, Australia
Google Cloud australia-southeast2 Melbourne, Australia
AWS ap-southeast-4 Asia Pacific (Melbourne)
Azure australiasoutheast Victoria, Australia
Azure australiacentral Canberra, Australia
Azure australiacentral2 Canberra, Australia
nz
New Zealand
New ZealandAzure newzealandnorth Auckland, New Zealand
AWS ap-southeast-6 Asia Pacific (New Zealand)

Sources

Google Cloud

The Cloud Billing Catalog API, Compute Engine service 6F81-5844-456A, about 33,500 SKUs. A machine type costs its vCPUs × the family's per-vCPU price plus its memory × the per-GB price in that region; spot SKUs are named "Spot Preemptible …". Each SKU's serviceRegions says which regions it applies to. Shared-core E2 types bill part of a vCPU (e2-micro a quarter, e2-small half, e2-medium one). Machine shapes and the regions each type is offered in come from the Compute Engine API (gcloud compute machine-types list). Not included yet: GPU (accelerator-optimized) types, types with bundled local SSD (-lssd, Z3), X4, custom machine types and sole-tenant nodes.

Boot disk: a 10 GB Balanced Persistent Disk, or for the families that only boot from Hyperdisk (N4, N4D, N4A, C4, C4D, C4A, C4N, H4D, M4, M4N) a 10 GB Hyperdisk Balanced disk with its default 3,060 IOPS and 155 MiB/s (3,000 IOPS and 140 MiB/s are free).

History: the Catalog API also returns past prices for a time range. It accepted ranges back to 1 October 2026, so GCP history starts there.

AWS

The public files behind AWS's own EC2 pricing pages: on-demand Linux prices per region (b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/…/ec2-ondemand-without-sec-sel/…/Linux, shared tenancy, no pre-installed software), the Linux column of the Spot pricing page (website.spot.ec2.aws.a2z.com/spot.json) and EBS volume prices. Processors and architecture come from the public bulk Price List. Boot disk: 10 GB gp3. AWS's own spot price history (90 days) needs an AWS account and is not used.

Azure

The Azure Retail Prices API: Linux consumption and Spot meters of Virtual Machines, 1-year reservations, and managed disk prices. The API has no vCPU or memory figures, so those come from Microsoft's own pricing calculator data; sizes the calculator does not list yet are left out. CPU vendor and architecture follow Microsoft's size naming convention ("a" AMD, "p" Arm). Boot disk: Azure bills managed disks by size tier, and the smallest Standard SSD that holds 10 GB is E3 (16 GiB).

How often

A scheduled job checks every provider once a day, from 04:00 UTC. A price is stored again only when it changes, so the history of each cell is its first price and every change after it. Machine type and region pages show when each price last changed.

History

The history views are built once a day after the check, from those stored changes. For every size row, region, architecture and core type they keep the cheapest VM price on each day it changed, and which machine type it was; a price holds until the next change, so lines are steps. A line for a zone or part of the world is the cheapest (or, where it says so, the median) of its regions on each day. The history leaves out the boot disk, whose price has no stored history, so its prices are a little under the matrix's default. Each cloud's history starts with its first stored price: Google Cloud's catalog returned prices back to 1 October 2026, AWS and Azure start with the first check on 24 October 2026. Biggest movers compares each price with its price at the start of the window, or with its first stored price where history starts inside the window.

The latest check (2026-10-25)

JobStatusFinishedDetails
gcp-historydone25 October 2026, 04:00 UTCskipped: done before
gcpdone25 October 2026, 04:00 UTCpages: 7, skus: 6746, sets: 172, added: 0, changed: 0, removed: 0
awsdone25 October 2026, 04:00 UTCregions: 34, failed: 0, types: 1366, sets: 100, added: 0, changed: 14637, removed: 0
azure-sizesdone25 October 2026, 04:01 UTCsizes: 1548, disks: 58, sets: 58, added: 0, changed: 0, removed: 0
azure-1done25 October 2026, 05:50 UTCregions: 10, done: 10, pages: 41, requests: 13, throttled: 2, gap: 15000, unknown: 305, sets: 30, added: 0, changed: 0, removed: 0
azure-2done25 October 2026, 06:34 UTCregions: 10, done: 10, pages: 46, requests: 16, throttled: 0, gap: 15000, unknown: 475, sets: 30, added: 0, changed: 0, removed: 0
azure-3done25 October 2026, 07:18 UTCregions: 10, done: 10, pages: 43, requests: 15, throttled: 0, gap: 15000, unknown: 330, sets: 30, added: 0, changed: 0, removed: 0
azure-4done25 October 2026, 07:36 UTCregions: 10, done: 10, pages: 41, requests: 25, throttled: 0, gap: 15000, unknown: 420, sets: 30, added: 0, changed: 0, removed: 0
azure-5done25 October 2026, 08:18 UTCregions: 10, done: 10, pages: 45, requests: 12, throttled: 0, gap: 15000, unknown: 395, sets: 30, added: 0, changed: 0, removed: 0
azure-6done25 October 2026, 08:31 UTCregions: 9, done: 9, pages: 46, requests: 5, throttled: 0, gap: 15000, unknown: 455, sets: 27, added: 0, changed: 0, removed: 0
derivedone25 October 2026, 11:21 UTCgcp-ondemand: 2723 series, 2723 points, 2 days, full, gcp-spot: 2723 series, 8077 points, 4 days, full, gcp-commit1y: 2667 series, 2667 points, 2 days, full, aws-ondemand: 2657 series, 2657 points, 1 days, full, aws-spot: 2498 series, 3686 points, 2 days, full, aws-commit1y: 0 series, 0 points, 0 days, full, azure-ondemand: 4062 series, 4062 points, 1 days, full, azure-spot: 3894 series, 3894 points, 1 days, full, azure-commit1y: 3657 series, 3657 points, 1 days, full, movers-7d: 21897, movers-30d: 22325

Data

The pages read JSON files you can use too: /api/matrix/<gcp|aws|azure>/<spot|ondemand|commit1y>.json (hourly prices per machine type and region), /api/history/<provider>/<machine type>.json, /api/series/<provider>/<model>.json (the cheapest price of each size and region over time) and /api/movers.json.