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
- List prices in US dollars for Linux virtual machines, as each provider publishes them. Your invoice can differ: taxes, negotiated discounts, credits, free tiers and Google's sustained-use discounts are not included.
- A month is 730 hours. The monthly price is the hourly price × 730, plus a 10 GB boot disk when "Include a 10 GB boot disk" is on (it is by default). Per vCPU and per GB divide that monthly price by the machine type's vCPUs or memory.
- Spot prices are what each provider lists for spot (preemptible) capacity in a region. Spot VMs can be stopped by the provider at any time, and the price can change: Google says GCP Spot prices can change up to once every day.
- 1-year prices are Google Cloud's 1-year resource-based committed use prices and Azure's 1-year reserved instance prices, per hour. AWS 1-year prices are not collected yet.
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.
| vCPU | Takes | Rows (memory) |
|---|---|---|
| 1 | 1 vCPU | 0.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) |
| 2 | 2 to 3 vCPU | 0.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) |
| 4 | 4 to 7 vCPU | 4 GB (4 to under 8), 8 GB (8 to under 16), 16 GB (16 to under 32), 32 GB (32 to under 64) |
| 8 | 8 to 15 vCPU | 8 GB (8 to under 16), 16 GB (16 to under 32), 32 GB (32 to under 64), 64 GB (64 to under 128) |
| 16 | 16 to 31 vCPU | 16 GB (16 to under 32), 32 GB (32 to under 64), 64 GB (64 to under 128), 128 GB (128 to under 256) |
| 32 | 32 to 47 vCPU | 32 GB (32 to under 64), 64 GB (64 to under 128), 128 GB (128 to under 256), 256 GB (256 to under 512) |
| 48 | 48 to 63 vCPU | 48 GB (48 to under 96), 96 GB (96 to under 192), 192 GB (192 to under 384), 384 GB (384 to under 768) |
| 64 | 64 to 95 vCPU | 64 GB (64 to under 128), 128 GB (128 to under 256), 256 GB (256 to under 512), 512 GB (512 to under 1024) |
| 96 | 96 to 127 vCPU | 96 GB (96 to under 192), 192 GB (192 to under 384), 384 GB (384 to under 768), 768 GB (768 to under 1536) |
| 128 | 128 to 191 vCPU | 128 GB (128 to under 256), 256 GB (256 to under 512), 512 GB (512 to under 1024), 1024 GB (1024 to under 2048) |
| 192 | 192 to 255 vCPU | 192 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.
| Zone | Covers | Regions, and where the provider says they are |
|---|---|---|
| us-west US West | California, Oregon, Washington, Nevada, Utah, Arizona | AWS us-west-1 US West (N. California)Google Cloud us-west2 Los Angeles, CaliforniaAzure westus California, USAWS us-west-2 US West (Oregon)Google Cloud us-west1 The Dalles, OregonAzure westus2 Washington, USGoogle Cloud us-west4 Las Vegas, NevadaGoogle Cloud us-west3 Salt Lake City, UtahAzure westus3 Phoenix, Arizona |
| us-central US Central | Iowa, Illinois, Texas, Wyoming | Google Cloud us-central1 Council Bluffs, IowaAzure centralus Iowa, USAzure northcentralus Illinois, USGoogle Cloud us-south1 Dallas, TexasAzure southcentralus Texas, USAzure westcentralus Wyoming, US |
| us-east US East | Virginia, South Carolina, Ohio | AWS us-east-1 US East (N. Virginia)Google Cloud us-east4 Ashburn, VirginiaAzure eastus Virginia, USAzure eastus2 Virginia, USGoogle Cloud us-east1 Moncks Corner, South CarolinaAWS us-east-2 US East (Ohio)Google Cloud us-east5 Columbus, Ohio |
| ca Canada | Toronto, Québec, Central Canada, Calgary | Google Cloud northamerica-northeast2 Toronto, CanadaAzure canadacentral Toronto, CanadaGoogle Cloud northamerica-northeast1 Montréal, CanadaAzure canadaeast Quebec, CanadaAWS ca-central-1 Canada (Central) (AWS names no city)AWS ca-west-1 Canada West (Calgary) |
| mx Mexico | Mexico | Google Cloud northamerica-south1 Querétaro, MexicoAzure mexicocentral Querétaro State, MexicoAWS mx-central-1 Mexico (Central) (AWS names no city) |
| sa-east Brazil | São Paulo, Rio de Janeiro | Google Cloud southamerica-east1 Osasco, São Paulo, BrazilAWS sa-east-1 South America (São Paulo)Azure brazilsouth São Paulo State, BrazilAzure brazilsoutheast Rio, Brazil |
| sa-west Chile | Santiago | Google Cloud southamerica-west1 Santiago, ChileAzure chilecentral Santiago, Chile |
| eu-west Western Europe | Ireland, the United Kingdom, Paris, Belgium, the Netherlands | AWS eu-west-1 Europe (Ireland)Azure northeurope IrelandGoogle Cloud europe-west2 London, United KingdomAWS eu-west-2 Europe (London)Azure uksouth London, United KingdomAzure ukwest Cardiff, United KingdomGoogle Cloud europe-west9 Paris, FranceAWS eu-west-3 Europe (Paris)Azure francecentral Paris, FranceGoogle Cloud europe-west4 Eemshaven, NetherlandsAzure westeurope NetherlandsAzure belgiumcentral Brussels, BelgiumGoogle Cloud europe-west1 St. Ghislain, Belgium |
| eu-north Northern Europe | Sweden, Norway, Denmark, Finland | Google Cloud europe-north2 Stockholm, SwedenAWS eu-north-1 Europe (Stockholm)Azure swedencentral Gävle, SwedenAzure swedensouth Southern Sweden (Not in Microsoft's region list; the region name says southern Sweden)Azure norwayeast NorwayAzure norwaywest NorwayAzure denmarkeast Copenhagen, DenmarkGoogle Cloud europe-north1 Hamina, Finland |
| eu-central Central Europe | Germany, Switzerland, Austria, Poland | Google Cloud europe-west3 Frankfurt, GermanyAWS eu-central-1 Europe (Frankfurt)Azure germanywestcentral Frankfurt, GermanyGoogle Cloud europe-west10 Berlin, GermanyAzure germanynorth Berlin, GermanyGoogle Cloud europe-west6 Zurich, SwitzerlandAWS eu-central-2 Europe (Zurich)Azure switzerlandnorth Zurich, SwitzerlandAzure switzerlandwest Geneva, SwitzerlandAzure austriaeast Vienna, AustriaGoogle Cloud europe-central2 Warsaw, PolandAzure polandcentral Warsaw, Poland |
| eu-south Southern Europe | Italy, Spain, Marseille | Google Cloud europe-west8 Milan, ItalyAWS eu-south-1 Europe (Milan)Azure italynorth Milan, ItalyGoogle Cloud europe-west12 Turin, ItalyGoogle Cloud europe-southwest1 Madrid, SpainAzure spaincentral Madrid, SpainAWS 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 Emirates | Google Cloud me-west1 Tel Aviv, IsraelAWS il-central-1 Israel (Tel Aviv)Azure israelcentral IsraelGoogle Cloud me-central1 Doha, QatarAzure qatarcentral Doha, QatarGoogle Cloud me-central2 Dammam, Saudi ArabiaAWS me-south-1 Middle East (Bahrain)Azure uaenorth Dubai, United Arab EmiratesAzure uaecentral Abu Dhabi, United Arab EmiratesAWS me-central-1 Middle East (UAE) |
| af South Africa | Johannesburg, Cape Town | Google Cloud africa-south1 Johannesburg, South AfricaAzure southafricanorth Johannesburg, South AfricaAWS af-south-1 Africa (Cape Town)Azure southafricawest Cape Town, South Africa |
| ap-south India | Mumbai, Pune, Delhi, Hyderabad, Chennai | Google Cloud asia-south1 Mumbai, IndiaAWS ap-south-1 Asia Pacific (Mumbai)Azure westindia Mumbai, IndiaAzure centralindia Pune, IndiaGoogle Cloud asia-south2 Delhi, IndiaAWS ap-south-2 Asia Pacific (Hyderabad)Azure indiasouthcentral Hyderabad, IndiaAzure southindia Chennai, India |
| ap-southeast Southeast Asia | Singapore, Indonesia, Malaysia, Thailand | Google Cloud asia-southeast1 Jurong West, SingaporeAWS ap-southeast-1 Asia Pacific (Singapore)Azure southeastasia SingaporeGoogle Cloud asia-southeast2 Jakarta, IndonesiaAWS ap-southeast-3 Asia Pacific (Jakarta)Azure indonesiacentral Jakarta, IndonesiaAzure malaysiawest Kuala Lumpur, MalaysiaAWS ap-southeast-5 Asia Pacific (Malaysia)Google Cloud asia-southeast3 Bangkok, ThailandAWS ap-southeast-7 Asia Pacific (Thailand) |
| ap-east Hong Kong, Taiwan | Hong Kong, Taipei, Changhua County | Google Cloud asia-east2 Hong KongAWS ap-east-1 Asia Pacific (Hong Kong)Azure eastasia Hong KongAWS ap-east-2 Asia Pacific (Taipei)Azure taiwannorth Taipei, TaiwanGoogle Cloud asia-east1 Changhua County, Taiwan |
| ap-northeast Japan, Korea | Tokyo, Osaka, Seoul, Busan | Google Cloud asia-northeast1 Tokyo, JapanAWS ap-northeast-1 Asia Pacific (Tokyo)Azure japaneast Tokyo, Saitama, JapanGoogle Cloud asia-northeast2 Osaka, JapanAWS ap-northeast-3 Asia Pacific (Osaka)Azure japanwest Osaka, JapanGoogle Cloud asia-northeast3 Seoul, South KoreaAWS ap-northeast-2 Asia Pacific (Seoul)Azure koreacentral Seoul, South KoreaAzure koreasouth Busan, South Korea |
| au Australia | New South Wales, Victoria, Canberra | Google Cloud australia-southeast1 Sydney, AustraliaAWS ap-southeast-2 Asia Pacific (Sydney)Azure australiaeast New South Wales, AustraliaGoogle Cloud australia-southeast2 Melbourne, AustraliaAWS ap-southeast-4 Asia Pacific (Melbourne)Azure australiasoutheast Victoria, AustraliaAzure australiacentral Canberra, AustraliaAzure australiacentral2 Canberra, Australia |
| nz New Zealand | New Zealand | Azure newzealandnorth Auckland, New ZealandAWS 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)
| Job | Status | Finished | Details |
|---|---|---|---|
| gcp-history | done | 25 October 2026, 04:00 UTC | skipped: done before |
| gcp | done | 25 October 2026, 04:00 UTC | pages: 7, skus: 6746, sets: 172, added: 0, changed: 0, removed: 0 |
| aws | done | 25 October 2026, 04:00 UTC | regions: 34, failed: 0, types: 1366, sets: 100, added: 0, changed: 14637, removed: 0 |
| azure-sizes | done | 25 October 2026, 04:01 UTC | sizes: 1548, disks: 58, sets: 58, added: 0, changed: 0, removed: 0 |
| azure-1 | done | 25 October 2026, 05:50 UTC | regions: 10, done: 10, pages: 41, requests: 13, throttled: 2, gap: 15000, unknown: 305, sets: 30, added: 0, changed: 0, removed: 0 |
| azure-2 | done | 25 October 2026, 06:34 UTC | regions: 10, done: 10, pages: 46, requests: 16, throttled: 0, gap: 15000, unknown: 475, sets: 30, added: 0, changed: 0, removed: 0 |
| azure-3 | done | 25 October 2026, 07:18 UTC | regions: 10, done: 10, pages: 43, requests: 15, throttled: 0, gap: 15000, unknown: 330, sets: 30, added: 0, changed: 0, removed: 0 |
| azure-4 | done | 25 October 2026, 07:36 UTC | regions: 10, done: 10, pages: 41, requests: 25, throttled: 0, gap: 15000, unknown: 420, sets: 30, added: 0, changed: 0, removed: 0 |
| azure-5 | done | 25 October 2026, 08:18 UTC | regions: 10, done: 10, pages: 45, requests: 12, throttled: 0, gap: 15000, unknown: 395, sets: 30, added: 0, changed: 0, removed: 0 |
| azure-6 | done | 25 October 2026, 08:31 UTC | regions: 9, done: 9, pages: 46, requests: 5, throttled: 0, gap: 15000, unknown: 455, sets: 27, added: 0, changed: 0, removed: 0 |
| derive | done | 25 October 2026, 11:21 UTC | gcp-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.