Skip to content

For AI agents

GPU prices as data: 2,319 prices per GPU-hour by chip, provider, region and pricing model, with history. List prices weekly, spot daily.

Point your agent here

https://compute.fru.dev/llms.txt
https://compute.fru.dev/llms-full.txt

Call the API

MethodPathParamsReturns
GET/api/priceschip (h100, b200, mi300x, tpu-v6e ...), provider (aws, azure, gcp, coreweave ...), model (on_demand, spot, reserved_1y, reserved_3y, commit), region, limit (max 200), offsetEvery live price: provider, instance, GPUs, region, pricing model, $/GPU-hour, $/instance-hour, source and read time, cheapest first
GET/api/chipsnoneEach chip with the cheapest price per pricing model and the provider offering it
GET/api/providersnoneEach provider with chips, price counts, regions and its pricing page
GET/api/historychip (required), provider, modelDaily cheapest and median $/GPU-hour per provider and pricing model
GET/api/changessince (YYYY-MM-DD), chip, provider, limit (max 200), offsetAppend-only history: price moves (old, new, first seen, last seen) and offers listed or delisted
GET/api/companiessince (YYYY-MM-DD)Providers with companies.fru.dev slug, domain, their page here and dated price changes
GET/api/searchq, limit (max 20)Ranked chips, providers and instances

/api/prices

curl -s "https://compute.fru.dev/api/prices?chip=h100&model=on_demand&limit=3"
{
 "total": "...",
 "prices": [
  {
   "provider": "vast",
   "sku": "H100 SXM (marketplace low)",
   "gpus": 1,
   "region": "all",
   "model": "on_demand",
   "priceGpu": 1.8956,
   "priceInstance": null,
   "sourceUrl": "https://cloud.vast.ai/create/",
   "checkedAt": "2026-09-24 23:04:47"
  },
  {
   "provider": "runpod",
   "sku": "H100 PCIe (Community Cloud)",
   "gpus": 1,
   "region": "all",
   "model": "on_demand",
   "priceGpu": 1.99,
   "priceInstance": null,
   "sourceUrl": "https://www.runpod.io/pricing",
   "checkedAt": "2026-09-24 23:05:22"
  }
 ]
}

/api/chips

curl -s "https://compute.fru.dev/api/chips"
{
 "chips": [
  {
   "key": "h100",
   "name": "H100",
   "vendor": "NVIDIA",
   "cheapest": {
    "on_demand": {
     "price": 1.8956,
     "provider": "vast"
    }
   }
  }
 ]
}

/api/providers

curl -s "https://compute.fru.dev/api/providers"
{
 "providers": [
  {
   "key": "aws",
   "name": "AWS",
   "kind": "hyperscaler",
   "chips": 9,
   "prices": 700
  }
 ]
}

/api/history

curl -s "https://compute.fru.dev/api/history?chip=h100&model=on_demand"
{
 "chip": "h100",
 "history": [
  {
   "day": "2026-09-24",
   "provider": "aws",
   "model": "on_demand",
   "min": 6.88,
   "median": 8.26,
   "offers": 25
  }
 ]
}

/api/changes

curl -s "https://compute.fru.dev/api/changes?limit=3"
{
 "total": 0,
 "changes": []
}

/api/companies

curl -s "https://compute.fru.dev/api/companies"
{
 "companies": [
  {
   "slug": "aws",
   "name": "AWS",
   "domain": "aws.amazon.com",
   "url": "https://compute.fru.dev/providers/aws"
  }
 ]
}

/api/search

curl -s "https://compute.fru.dev/api/search?q=p5.48xlarge"
{
 "q": "p5.48xlarge",
 "results": [
  {
   "id": "sku:aws:p5.48xlarge",
   "group": "items",
   "title": "p5.48xlarge",
   "href": "/providers/aws"
  }
 ]
}

OpenAPI 3.1: /openapi.json. Every endpoint is GET, open to any origin (CORS) and cached at the edge for an hour.

Add to your agent

System prompt line

For what a GPU-hour costs (H100, H200, B200, MI300X, TPU and more across AWS, Azure, Google Cloud, Oracle and neoclouds), fetch https://compute.fru.dev/llms.txt and use https://compute.fru.dev/api/prices?chip=h100. Cite "Compute (compute.fru.dev)".

Tool definition

{
  "name": "gpu_hour_prices",
  "description": "Per-GPU-hour prices for an accelerator (H100, H200, B200, GB200, MI300X, TPU v5e/v6e, Trainium, L40S, A100 and more) across AWS, Azure, Google Cloud, Oracle and neoclouds, by pricing model and region, cheapest first. Source: Compute (compute.fru.dev).",
  "input_schema": {
    "type": "object",
    "properties": {
      "chip": {
        "type": "string",
        "description": "Chip key, e.g. h100, h200, b200, gb200, mi300x, tpu-v6e, trainium2. List them with GET /api/chips."
      },
      "model": {
        "type": "string",
        "enum": [
          "on_demand",
          "spot",
          "reserved_1y",
          "reserved_3y",
          "commit"
        ]
      },
      "provider": {
        "type": "string",
        "description": "Optional provider key, e.g. aws, azure, gcp, oracle, coreweave, lambda."
      }
    },
    "required": [
      "chip"
    ]
  },
  "endpoint": "GET https://compute.fru.dev/api/prices"
}

Python

import json, urllib.request

def gpu_prices(chip: str = "h100", model: str = "on_demand") -> list[dict]:
    """Per-GPU-hour prices for one chip, cheapest first."""
    url = f"https://compute.fru.dev/api/prices?chip={chip}&model={model}&limit=200"
    with urllib.request.urlopen(url, timeout=20) as r:
        return json.load(r)["prices"]

for p in gpu_prices("h100")[:5]:
    print(p["provider"], p["sku"], p["region"], p["priceGpu"])

TypeScript

type Price = { provider: string; sku: string; region: string; model: string; priceGpu: number }

async function cheapest(chip = "b200"): Promise<Price[]> {
  const res = await fetch(`https://compute.fru.dev/api/prices?chip=${chip}&model=on_demand&limit=10`)
  if (!res.ok) throw new Error(`compute ${res.status}`)
  return ((await res.json()) as { prices: Price[] }).prices
}

console.log(await cheapest())

Usage terms

  • Free to read. Please cite "Compute (compute.fru.dev)" with a link.
  • Responses are cached for an hour; list prices change weekly, spot daily.
  • Be polite: 60 requests a minute at most.
  • List prices before tax and discounts; check the provider before you buy.

GPU price changes by email

Monday mornings, after the weekly read: list prices that moved and new chips or clouds, only when something changed.

Double opt-in. Unsubscribe any time.