Cloud Compute Price Comparison — AWS + Azure VM Pricing
Pricing
from $20.00 / 1,000 price-change-alerts
Cloud Compute Price Comparison — AWS + Azure VM Pricing
Compare AWS EC2 and Azure VM on-demand cloud pricing (cost comparison, FinOps pricing lookup) in one normalized schema — skips learning AWS's Price List API and Azure's Retail Prices API separately, each with own fields and instance-naming. Optional price-change alerts. From $0.004/result (PPE).
Pricing
from $20.00 / 1,000 price-change-alerts
Rating
0.0
(0)
Developer
Dennis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Compare AWS EC2 and Azure VM on-demand cloud pricing (cost comparison, FinOps pricing lookup) in one normalized schema — no manual per-provider pricing-page lookups, no separate integrations for AWS's Price List API and Azure's Retail Prices API, each with its own fields and instance-naming convention. Optional price-change alerts flag when a price moves between scheduled runs. From $0.004/result (PPE).
Why This Actor?
AWS and Azure both publish free, authentication-free pricing APIs — but each has its own field names, its own instance-naming convention, and its own filtering quirks. Building your own integration against both means learning two different schemas. Existing Apify actors in this space focus specifically on GPU-cloud pricing (Runpod/Vast.ai); a broad, provider-normalized comparison of standard AWS + Azure on-demand VM pricing is not covered by any existing actor at time of writing.
When should an AI agent use this?
Use this actor when a user asks an AI agent questions like:
- "What does a 4 vCPU/8 GB Linux VM cost on AWS vs. Azure in Western Europe right now?"
- "List AWS eu-west-1 on-demand Linux instance prices under $0.20/hour."
- "Compare Azure westeurope Windows VM pricing to AWS eu-west-1."
- "Alert me if AWS or Azure changes their on-demand VM pricing since last week."
- "Get me AWS + Azure compute pricing as structured data for a FinOps cost model."
What this Actor does
- Fetches on-demand VM pricing from AWS's Price List API (regional EC2 bulk price index) and Azure's Retail Prices API.
- Normalizes both into one schema:
provider,region,instanceType,vcpu,ramGb,operatingSystem,pricePerHourUsd. - Filters by instance type/SKU name, minimum vCPU, minimum RAM, and OS (Linux or Windows).
- Optional price-change tracking: compares each provider+region+instance-type price with the previous run (via the actor's key-value store) and flags significant changes.
- No scraping — both sources are official, documented, authentication-free public pricing APIs.
Input
| Field | Type | Default | Description |
|---|---|---|---|
providers | string[] | ["aws","azure"] | Which providers to fetch |
awsRegions | string[] | ["eu-west-1"] | AWS region codes. Each region downloads AWS's full regional EC2 price index (hundreds of MB) — keep this list short |
azureRegions | string[] | ["westeurope"] | Azure ARM region names |
operatingSystem | "Linux" | "Windows" | "Linux" | Applies to both providers |
instanceTypeFilter | string | none | Case-insensitive substring match on instance type/SKU, e.g. "m5" or "Standard_D2s" |
vcpuMin | integer | none | Minimum vCPUs. Excludes all Azure results if set — see limitations below |
ramGbMin | integer | none | Minimum RAM in GB. Excludes all Azure results if set — see limitations below |
maxResultsPerProvider | integer | 500 | Max records per provider (1–20000) |
trackPriceChanges | boolean | false | Compare each record's price with the previous run |
priceChangeThresholdPercentage | integer | 5 | Minimum absolute % change to count as a price-change-alert |
Output
{"provider": "aws","instanceType": "c8in.xlarge","region": "eu-west-1","vcpu": 4,"ramGb": 8,"operatingSystem": "Linux","pricePerHourUsd": 0.1936,"pricingModel": "on_demand","sourceUrl": "https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/eu-west-1/index.json","lastUpdated": "2026-07-15T13:21:35.000Z","previousPricePerHourUsd": null,"priceChangePercentage": null,"priceChangeAlert": false}
Price-change alerts (trackPriceChanges, optional, separately charged)
With trackPriceChanges: true, each record is compared with the previous run (via the actor's
key-value store) for the same provider+region+instanceType: previousPricePerHourUsd and
priceChangePercentage. priceChangeAlert is true only when the absolute percentage change
reaches priceChangeThresholdPercentage (default 5%). The first run for a given combination has
nothing to compare against, so these fields stay null/false rather than a guessed value. Only
alerted records are charged the extra price-change-alert event.
Field Reference
| Field | Type | Description |
|---|---|---|
provider | string | "aws" or "azure" |
instanceType | string | AWS instance type (e.g. "c8in.xlarge") or Azure ARM SKU name (e.g. "Standard_D2s_v3") |
region | string | AWS region code or Azure ARM region name |
vcpu | number | null | vCPU count. Always null for Azure — see limitations |
ramGb | number | null | RAM in GB. Always null for Azure — see limitations |
operatingSystem | string | "Linux" or "Windows" |
pricePerHourUsd | number | On-demand hourly price in USD |
pricingModel | string | Always "on_demand" in v1 |
sourceUrl | string | Link to the source API endpoint used |
lastUpdated | string | ISO timestamp from the source data (AWS: file publication date; Azure: meter effective date) |
Known limitations
- Azure records never have
vcpu/ramGb: Azure's Retail Prices API does not expose these fields at all (confirmed via live testing 2026-07-15) — only price, region and SKU/meter name. SettingvcpuMin/ramGbMinwill therefore exclude every Azure result. Leave these filters unset when comparing both providers, or useinstanceTypeFilterinstead (Azure SKU names likeStandard_D2s_v3encode size in the name, but this actor does not parse that convention in v1). - AWS regions are expensive to query: AWS's Price List API has no server-side filtering beyond
region — a single region's EC2 price file is several hundred MB, downloaded in full on every run
regardless of your filters. Adding many
awsRegionsmultiplies run time/bandwidth accordingly. - On-demand pricing only in v1 — no Reserved Instances, Savings Plans, or Spot pricing.
- GCP, Hetzner, DigitalOcean and OVH are not included: all four require a user-supplied API key/account token (confirmed via live testing), unlike AWS/Azure which are fully public.
Use cases
- FinOps / cloud cost comparison: build a cost model comparing AWS and Azure for a target VM size without manually checking both pricing calculators.
- Indie hosting / infra planning: find the cheapest provider for a specific instance shape.
- Price monitoring: schedule runs with
trackPriceChanges: trueto get notified when a provider changes its on-demand pricing. - AI agents / MCP tooling: structured multi-cloud pricing data as context for infrastructure-planning or cost-advisory agents.
Pricing
This Actor uses Apify's Pay-Per-Event (PPE) pricing model.
- Actor Start: $0.00005 (Apify default)
price-record: $0.004 per normalized VM price record returnedprice-change-alert: $0.02 extra, only withtrackPriceChangesenabled and only when the price change vs. the previous run reaches the threshold
Legal
- AWS Price List API: official, publicly documented AWS service built specifically for programmatic price lookups. No authentication, no scraping.
- Azure Retail Prices API: official Microsoft REST API published for this exact purpose (successor to the older Commerce RateCard API). No authentication, no scraping.
- No personal data is processed — all data is commercial cloud-infrastructure pricing, not individual businesses or people.
FAQ
Why is vcpu/ramGb always null for Azure records?
Azure's Retail Prices API simply doesn't return this data (confirmed via live testing) — only AWS
exposes it directly in its price-list attributes.
How fresh is the data? Both sources publish live pricing — every run fetches directly from AWS/Azure, no caching layer. AWS's regional price file is regenerated multiple times per day; Azure's Retail Prices API is queried live per request.
Why do AWS runs take longer than Azure runs?
AWS's Price List API has no server-side filtering beyond region — this actor downloads the full
regional price file and filters/matches on-demand pricing internally. Azure's API supports
server-side $filter, so it only transfers matching records.
Are GCP/Hetzner/DigitalOcean/OVH planned? All four require the user to supply their own API key or account token to that provider (confirmed via live testing — none offer a fully public pricing feed like AWS/Azure). Not in v1; could be added as a bring-your-own-credentials option in a future version.
Keywords
cloud, aws, azure, ec2, virtual-machines, compute, pricing, cost-comparison, finops, price-monitor
Changelog
0.1.0
- Initial release: AWS EC2 + Azure Virtual Machines on-demand pricing, normalized to one schema, optional price-change tracking between scheduled runs.
- 2026-08-16: agent-readiness pass — task-oriented description with explicit synonyms
(cost comparison, FinOps pricing lookup), a decision-benefit sentence and a price indication in
.actor/actor.json/STOREINFO.md/README, so an LLM reading the Store listing via MCP can weigh it in tool selection. No behavior/output changes. Checked for a per-itemerror/errorCodepattern (as piloted onpdok-locatieserver) — not applicable here: AWS/Azure fetch errors are thrown and fail the whole run rather than being caught per record, so noerrorCodefield was added.