# Cloud GPU Pricing Aggregator (`jungle_synthesizer/cloud-gpu-pricing-aggregator`) Actor

Scrapes normalized GPU cloud pricing from Runpod and Vast.ai. Returns per-GPU-hour prices with hardware specs and availability across community and secure tiers. Useful for AI training cost comparison, arbitrage monitoring, and GPU price trend analysis.

- **URL**: https://apify.com/jungle\_synthesizer/cloud-gpu-pricing-aggregator.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** AI, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Cloud GPU Pricing Aggregator

Pulls normalized GPU cloud pricing from [Runpod](https://runpod.io) and [Vast.ai](https://vast.ai) in a single run. Returns per-GPU-hour prices, hardware specs, and availability across community and secure rental tiers — all in clean JSON, so you can actually compare them without building a spreadsheet by hand.

---

### Cloud GPU Pricing Aggregator Features

- Queries Runpod GraphQL and Vast.ai REST APIs — no auth, no browser, no proxies required
- Normalizes per-GPU-hour price across providers so you can compare apples to apples — Runpod quotes per GPU, Vast.ai quotes per machine, the aggregator handles the math
- Returns both secure and community tiers from Runpod separately, since the price difference is usually significant
- Captures 40+ GPU types from Runpod (RTX 3070 through H100 SXM, B200, and beyond) and 60+ live marketplace offers from Vast.ai
- Includes hardware specs: VRAM, vCPU count, system RAM, storage, and interconnect type
- Timestamps every snapshot so you can build a price-history series by scheduling runs
- Filters by provider (`runpod`, `vastai`) and GPU model substring — run just the H100s if that's all you need

---

### Who Uses GPU Pricing Data?

- **AI founders and ML engineers** — compare cloud GPU costs before committing to a training run budget
- **Cloud cost analysts** — track H100/A100 price trends over weeks and months without refreshing a browser
- **Arbitrage-minded users** — spot when community cloud prices undercut hyperscaler rates for the same GPU class
- **Infrastructure researchers** — build datasets on GPU commodity pricing for market analysis or academic work
- **Startups evaluating providers** — pick the right cloud tier based on actual prices, not marketing copy

---

### How Cloud GPU Pricing Aggregator Works

1. The actor seeds two queries — one for Runpod, one for Vast.ai — and runs them in parallel using a single JSON API crawler
2. For Runpod, it posts a GraphQL query that returns all available GPU types with secure and community prices; each GPU type generates up to two output records (one per tier)
3. For Vast.ai, it hits the public bundles endpoint and returns all live marketplace offers with full hardware specs
4. Records are normalized to a common schema and saved — every field uses the same units, the same naming, and the same price-per-GPU-hour calculation regardless of source

---

### Input

```json
{
    "maxItems": 15,
    "providers": [],
    "gpuFilter": ""
}
````

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `maxItems` | integer | 15 | Maximum records to return across all providers. Set to 0 for no limit. |
| `providers` | array | `[]` | Providers to query. Options: `runpod`, `vastai`. Empty array queries all. |
| `gpuFilter` | string | `""` | Substring filter on GPU model name (case-insensitive). Use `"H100"` to filter to H100 variants only. |

#### Runpod H100s only

```json
{
    "providers": ["runpod"],
    "gpuFilter": "H100",
    "maxItems": 0
}
```

#### Vast.ai RTX 4090 spot market

```json
{
    "providers": ["vastai"],
    "gpuFilter": "RTX 4090",
    "maxItems": 50
}
```

***

### Cloud GPU Pricing Aggregator Output Fields

```json
{
    "provider": "runpod",
    "sku": "runpod-secure-NVIDIA H100 80GB HBM3",
    "gpu_model": "H100 80GB HBM3",
    "gpu_count": 1,
    "vram_gb": 80,
    "vcpu": 0,
    "ram_gb": 0,
    "storage_gb": 0,
    "region": "global",
    "tier": "secure",
    "price_per_hour_usd": 2.99,
    "price_per_gpu_hour_usd": 2.99,
    "availability": "available",
    "min_rental_duration_hours": 0,
    "interconnect": "none",
    "snapshotted_at": "2026-05-09T08:22:57.613Z",
    "source_url": "https://api.runpod.io/graphql"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `provider` | string | Source provider: `runpod` or `vastai` |
| `sku` | string | Provider-specific offer identifier |
| `gpu_model` | string | Normalized GPU model name (e.g., `H100 80GB HBM3`, `RTX 4090`) |
| `gpu_count` | number | Number of GPUs in this SKU |
| `vram_gb` | number | Total VRAM in GB across all GPUs in the SKU |
| `vcpu` | number | Virtual CPU count (Vast.ai only; 0 for Runpod list prices) |
| `ram_gb` | number | System RAM in GB (Vast.ai only; 0 for Runpod list prices) |
| `storage_gb` | number | Local storage in GB (Vast.ai only) |
| `region` | string | Geographic location — `global` for Runpod list prices, geolocation string for Vast.ai |
| `tier` | string | Rental tier: `secure`, `community` (Runpod), or `community` (Vast.ai marketplace) |
| `price_per_hour_usd` | number | Total cost per hour in USD for the full SKU |
| `price_per_gpu_hour_usd` | number | Cost per GPU per hour — the normalized comparison metric |
| `availability` | string | Offer status: `available` |
| `min_rental_duration_hours` | number | Minimum rental commitment in hours (0 = no minimum) |
| `interconnect` | string | GPU interconnect type: `nvlink`, `pcie`, or `none` |
| `snapshotted_at` | string | ISO 8601 timestamp when the record was fetched |
| `source_url` | string | API endpoint URL that provided this data |

***

### 🔍 FAQ

#### How do I get just H100 prices across all providers?

Cloud GPU Pricing Aggregator accepts a `gpuFilter` input. Set it to `"H100"` and leave `providers` empty — you'll get every H100 variant from both Runpod and Vast.ai in one run.

#### How much does the Cloud GPU Pricing Aggregator cost to run?

Each run costs $0.10 to start plus $0.001 per record. A full run across both providers returns roughly 100–120 records — total cost around $0.21, which is considerably less than the GPU time you're trying to compare.

#### Does the Cloud GPU Pricing Aggregator need proxies or a browser?

No proxies. No browser. Both Runpod and Vast.ai expose public APIs with no authentication required — this actor is a straight HTTP client hitting JSON endpoints.

#### Can I schedule this to track GPU price trends over time?

Yes. Schedule it with Apify's built-in scheduler and each run adds a new snapshot with `snapshotted_at` timestamps. Feed the output into a spreadsheet or time-series store and you have a price-history dataset automatically.

#### Why are Runpod records missing vCPU and RAM values?

Runpod's public GPU types API returns per-GPU-hour prices but doesn't include host machine specs in the same response. The `vcpu`, `ram_gb`, and `storage_gb` fields are 0 for Runpod records. Vast.ai machine offers include the full host spec.

***

### Need More Features?

Need additional providers, more granular Runpod pod data, or different output formats? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use Cloud GPU Pricing Aggregator?

- **No API keys or proxies** — both sources are fully public, so the actor runs anywhere without credentials or extra setup
- **Normalized per-GPU-hour pricing** — the only comparison metric that matters across providers is calculated for every record, which is more useful than raw pricing that requires mental arithmetic to interpret
- **Timestamp-first design** — every record carries a `snapshotted_at` field, making it trivial to build price-trend datasets by scheduling regular runs

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `maxItems` (type: `integer`):

Maximum number of GPU pricing records to return (0 = no limit)

## `providers` (type: `array`):

Which cloud GPU providers to query. Options: runpod, vastai. Leave empty for all.

## `gpuFilter` (type: `string`):

Optional substring filter on GPU model name (case-insensitive). E.g. 'H100' or 'RTX 4090'.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 15,
  "providers": [],
  "gpuFilter": ""
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 15,
    "providers": [],
    "gpuFilter": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/cloud-gpu-pricing-aggregator").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 15,
    "providers": [],
    "gpuFilter": "",
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/cloud-gpu-pricing-aggregator").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 15,
  "providers": [],
  "gpuFilter": ""
}' |
apify call jungle_synthesizer/cloud-gpu-pricing-aggregator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/cloud-gpu-pricing-aggregator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Cloud GPU Pricing Aggregator",
        "description": "Scrapes normalized GPU cloud pricing from Runpod and Vast.ai. Returns per-GPU-hour prices with hardware specs and availability across community and secure tiers. Useful for AI training cost comparison, arbitrage monitoring, and GPU price trend analysis.",
        "version": "0.1",
        "x-build-id": "xwiuvx7mBBG1FOcpf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~cloud-gpu-pricing-aggregator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-cloud-gpu-pricing-aggregator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~cloud-gpu-pricing-aggregator/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-cloud-gpu-pricing-aggregator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~cloud-gpu-pricing-aggregator/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-cloud-gpu-pricing-aggregator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of GPU pricing records to return (0 = no limit)",
                        "default": 15
                    },
                    "providers": {
                        "title": "Providers",
                        "type": "array",
                        "description": "Which cloud GPU providers to query. Options: runpod, vastai. Leave empty for all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "gpuFilter": {
                        "title": "GPU Model Filter",
                        "type": "string",
                        "description": "Optional substring filter on GPU model name (case-insensitive). E.g. 'H100' or 'RTX 4090'.",
                        "default": ""
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
