BYTETOOLS

EC2.shop API

Get on-demand, spot and reserved EC2 prices as JSON with a single URL and no AWS credentials. Filter by instance type or region. Live captured response included.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the EC2.shop API?

EC2.shop returns AWS EC2 instance pricing as JSON. `GET https://ec2.shop/?json&filter=t3.micro` gives the hourly on-demand cost, monthly estimate, spot price, reserved prices and hardware specification for matching instance types, with no AWS account or credentials required.

AWS does publish pricing programmatically, through the Price List API and a set of enormous JSON offer files that are awkward to work with and require credentials for the query interface. EC2.shop flattens all of that into one URL that answers in a few hundred bytes, which is why it has become the shortcut of choice when someone asks 'what does an m7g.large actually cost'.

Read the types carefully before doing arithmetic. `Cost` and `MonthlyPrice` are floats, but every spot and reserved price is a string, and `Memory` is a string with its unit attached, as in `"1 GiB"`. There is also a long-standing typo in the field names: reserved convertible pricing arrives as `Reserved1yConveritblePrice`. Match on that exact spelling, because correcting it in your code will silently give you `undefined`.

Quick facts

Base URL
https://ec2.shop
Authentication
No AWS credentials, no key, no account. The service maintains its own copy of the public price list.
Rate limit
Not published. Prices change rarely, so cache for hours rather than seconds.
Pricing
Free.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the EC2.shop API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Look up pricing for a single instance type

GET https://ec2.shop/?json&filter=t3.micro

curl
curl 'https://ec2.shop/?json&filter=t3.micro'
JavaScript (fetch)
const res = await fetch("https://ec2.shop/?json&filter=t3.micro");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://ec2.shop/?json&filter=t3.micro", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "Prices": [
    {
      "InstanceType": "t3.micro",
      "Memory": "1 GiB",
      "VCPUS": 2,
      "Storage": "EBS only",
      "Network": "Up to 5 Gigabit",
      "Cost": 0.0104,
      "MonthlyPrice": 7.592,
      "GPU": null,
      "SpotPrice": "0.0043",
      "SpotReclaimRate": "15-20%",
      "SpotSavingRate": "59%",
      "Reserved1yPrice": "0.0065",
      "Reserved3yPrice": "0.0045",
      "Reserved1yConveritblePrice": "0.0075",
      "Reserved3yConveritblePrice": "0.0052"
    }
  ]
}

Parameters

ParameterTypeRequiredDescription
jsonflagOptionalValueless flag that returns JSON. Without it the endpoint returns a formatted plain-text table designed for curl. json
filterstringOptionalSubstring match on the instance type. `t3` matches the whole family, `t3.micro` matches one size. t3.micro
regionstringOptionalAWS region code. Defaults to `us-east-1`, which is the cheapest region for most families and will understate your real bill. eu-west-1

Response fields

Pricesarray
One entry per matching instance type. An empty array means the filter matched nothing, not that pricing is unavailable.
InstanceTypestring
The EC2 instance type, for example `t3.micro`.
Memorystring
Memory including the unit, such as `"1 GiB"`. Strip the suffix before comparing numerically.
VCPUSinteger
vCPU count. One of the few genuinely numeric fields in the response.
Costfloat
On-demand price in USD per hour for the selected region.
MonthlyPricefloat
Convenience figure: the hourly cost times 730 hours. It ignores savings plans, EBS and data transfer, so it is a floor, not a forecast.
SpotPricestring
Current spot price as a string. Spot prices move continuously, so treat any cached value as indicative.
SpotReclaimRate / SpotSavingRatestring
Interruption likelihood and discount, both as human-readable strings such as `"15-20%"` and `"59%"`, not numbers.
Reserved1yPrice / Reserved3yPricestring
Reserved instance hourly rates for one and three year commitments, as strings.
Reserved1yConveritblePricestring
Convertible reserved pricing. Note the misspelling of `Convertible` in the field name; it is part of the contract.
GPUinteger or null
GPU count, `null` for instance families without one.

What you can build with the EC2.shop API

  • Estimate the cost of a proposed instance type before opening the AWS console
  • Add a live price column to an internal capacity-planning spreadsheet or tool
  • Compare on-demand against spot pricing when deciding where to run batch work
  • Alert when the spot price for a family you rely on crosses a threshold
  • Build a quick cost comparison across regions for a migration proposal

Common errors and how to fix them

Plain text instead of JSON

The `json` flag was dropped by a URL builder that strips valueless parameters.

Fix: Ensure the literal `?json` reaches the server; some clients require you to send it as `json=`.

Empty Prices array

The filter string matched no instance type.

Fix: Filters are substring matches on the type name. Check for typos, and remember the family prefix is case-sensitive.

Prices lower than your bill

You did not pass `region`, so you received `us-east-1` pricing.

Fix: Always send the region you actually deploy to, and remember these figures exclude EBS, data transfer and support.

EC2.shop API — frequently asked questions

Do I need AWS credentials to use EC2.shop?

No. It is a public read-only service with its own copy of AWS public pricing, so no keys, roles or accounts are involved.

How current are the prices?

On-demand and reserved rates change rarely and are accurate in practice. Spot prices move continuously, so treat the spot figure as a recent sample rather than a live quote.

Why is SpotPrice a string but Cost a float?

The upstream data mixes representations and the service passes them through unchanged. Cast every price to a number yourself instead of trusting the JSON types.

Is the field name Reserved1yConveritblePrice really misspelled?

Yes, and it is stable. Match the misspelling exactly; fixing it in your code will just return nothing.

Tools that pair with this API

EC2.shop is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.