LLM Pricing Monitor
Pricing
Pay per event
LLM Pricing Monitor
Scrape live LLM API pricing from OpenAI, Anthropic, Google, Mistral, Groq, Together AI and DeepSeek. Normalized per-million-token output for cost dashboards and FinOps pipelines. Beats OpenRouter-only competitor by 6.5x.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
LLM Pricing Monitor
We do the dirty work so your dataset stays clean. 😈
$5.05 / 1,000 rows — 6.5x cheaper than the only competing actor. Scrape live pricing from the seven major LLM API providers (OpenAI, Anthropic, Google, Mistral, Groq, Together AI, DeepSeek) and emit one unified per-million-token dataset ready for cost dashboards, FinOps pipelines, and spreadsheet pivots. No login. No API key. No browser automation.
This Actor hits the authoritative pricing page for each provider directly (not the OpenRouter re-routing layer), parses the live HTML or RSC payload with parsel, and pushes a flat Pydantic-validated dataset to Apify. One run gives you a snapshot of every text-token model the providers sell, normalized so that $2 / 1M tokens and $0.002 / 1K tokens line up in the same column.
🎯 What this scrapes
Seven LLM API providers, one schema:
- OpenAI —
openai.com/api/pricing/(Cloudflare-protected; partial-success fallback when challenge does not clear) - Anthropic —
docs.anthropic.commodel comparison table (not the Webflow marketing page) - Google (Gemini API) —
ai.google.dev/gemini-api/docs/pricing - Mistral —
mistral.ai/pricing(Next.js RSC payload — JSON extracted via regex) - Groq —
groq.com/pricing(server-rendered HTML table) - Together AI —
www.together.ai/pricing(Webflow list items) - DeepSeek —
api-docs.deepseek.com/quick_start/pricing(Docusaurus markdown table)
Output rows are normalized to USD per 1 million tokens regardless of how the provider publishes the price — per-1k prices are auto-multiplied by 1000 in the parser.
| Field | Type | Description |
|---|---|---|
provider | string | Provider literal (openai, anthropic, google, ...) |
provider_display_name | string | Human-readable name (e.g. OpenAI) |
model_id | string | Provider-canonical ID (e.g. gpt-4o-2024-08-06) |
model_display_name | string | null | Human label from the pricing page |
pricing_unit | string | Always per_1m_tokens |
input_usd_per_1m | number | null | Standard input price per 1M tokens |
output_usd_per_1m | number | null | Standard output price per 1M tokens |
cache_read_usd_per_1m | number | null | Cached input read price |
cache_write_usd_per_1m | number | null | Cache write price |
batch_input_usd_per_1m | number | null | Batch API input price |
batch_output_usd_per_1m | number | null | Batch API output price |
context_window_tokens | integer | null | Max context window |
max_output_tokens | integer | null | Max output tokens per request |
tier | string | null | Sub-tier label (e.g. standard) |
source_url | string | Exact pricing page URL scraped |
scraped_at | string | ISO 8601 UTC timestamp |
🔥 Features
- Seven providers, one schema — drop straight into a spreadsheet or BI tool with no per-provider normalization on your end.
- Per-1k auto-conversion — every
*_usd_per_1mfield is normalized regardless of how the provider lists prices on the page. - Per-provider isolation — one provider failure (Cloudflare block, page restructure) does not abort the run; the other six still produce data.
- OpenAI Cloudflare-aware —
curl-cffiimpersonation rotation plus optional Apify Proxy; partial-success status message when the challenge cannot be cleared. - No browser — pure HTTP with
curl-cffibrowser TLS fingerprint impersonation; low compute footprint and fast runs. - Pydantic v2 validation — input and output are model-validated; invalid input fails fast with a clear error before any network call.
- Filter knobs — drop deprecated/legacy models, enforce a minimum context window, or restrict the provider list to just the ones you care about.
- Exponential backoff on
429/503withRetry-Afterhonoured. - Companion to
huggingface-hub-scraperas the AI Stack Intelligence suite — pair pricing with hub-side model adoption signals.
💡 Use cases
- FinOps cost dashboard — schedule weekly runs, write to a named dataset, and chart
input_usd_per_1mover time per model. CloudZero reports the average AI company spends $85k/month on LLMs — a 10% saving is meaningful. - AI buyer comparison sheets — feed the JSON into a spreadsheet and rank by
(input_usd_per_1m + output_usd_per_1m * 2)weighted for the typical 2:1 output/input ratio of your workload. - Procurement bake-offs — when evaluating Anthropic vs Google vs OpenAI for a new feature, pull the current pricing snapshot rather than relying on a stale screenshot in a PDF.
- Cache-aware budgeting — DeepSeek and Anthropic publish cache-hit pricing separately; this Actor surfaces it (
cache_read_usd_per_1m) so you can model the effective rate after caching. - Batch-mode arbitrage — OpenAI and Anthropic offer ~50% discounts via their batch APIs; surface
batch_input_usd_per_1m/batch_output_usd_per_1mdirectly in your dashboard. - Investor research — track price-per-token compression at the frontier (Groq, Together, DeepSeek) versus the incumbents (OpenAI, Anthropic, Google) over quarters.
- Open-source pricing leaderboards — feed a public site that ranks the cheapest model meeting a context-window or quality threshold.
⚙️ How to use it
- Open the Actor input form.
- (Optional) Pick Providers — leave empty to scrape all seven, or list a subset like
["groq", "deepseek"]. - (Optional) Toggle Include legacy models — off by default; rows flagged
deprecated/legacy/retiredare dropped. - (Optional) Set Minimum context window (tokens) — e.g.
128000to drop everything below 128K context. - Leave Use Apify Proxy off unless OpenAI is in your list — its Cloudflare challenge occasionally clears with a residential exit.
- Click Start. Results stream into the default dataset.
Quick examples
All seven providers, default settings:
{"providers": [],"includeLegacyModels": false}
Groq + DeepSeek only (no Cloudflare risk — the QA fixture):
{"providers": ["groq", "deepseek"],"includeLegacyModels": false,"useProxy": false}
Frontier models only (>= 128K context), all providers, with proxy for OpenAI:
{"providers": [],"includeLegacyModels": false,"minContextWindow": 128000,"useProxy": true}
📥 Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
providers | array of provider literals | no | [] (all seven) | Subset of openai, anthropic, google, mistral, groq, together, deepseek |
includeLegacyModels | boolean | no | false | Keep rows flagged deprecated/legacy/retired |
minContextWindow | integer | null | no | null | Drop rows with non-null context window below this value |
useProxy | boolean | no | false | Route via Apify Proxy (BUYPROXIES94952) |
📤 Output
One dataset row per (provider x model_id x tier). Example record — Anthropic Claude Sonnet 4.6 as of 2026-05-16:
{"provider": "anthropic","provider_display_name": "Anthropic","model_id": "claude-sonnet-4-6","model_display_name": "Claude Sonnet 4.6","pricing_unit": "per_1m_tokens","input_usd_per_1m": 3.0,"output_usd_per_1m": 15.0,"cache_read_usd_per_1m": null,"cache_write_usd_per_1m": null,"batch_input_usd_per_1m": null,"batch_output_usd_per_1m": null,"context_window_tokens": 1000000,"max_output_tokens": 64000,"tier": "standard","source_url": "https://docs.anthropic.com/en/docs/about-claude/models/all-models","scraped_at": "2026-05-16T13:40:00.000Z"}
Download the dataset as JSON, CSV, Excel, or XML from the Export button on the run page.
💰 Pricing
Pay-Per-Event (PPE):
| Event | Rate (USD) | Trigger |
|---|---|---|
actor-start | $0.05 | Once per Actor run at boot |
result-row | $0.005 | Per pricing row pushed |
A typical run (all seven providers, 80 total rows) costs **$0.45**. Per-1,000-row extrapolation: $5.05 — 6.5x cheaper than the only multi-provider competing actor on the Store (parseforge/openrouter-models-pricing-scraper at $32.85/1k, which only covers OpenRouter's re-routing layer, not the authoritative provider pages).
🚧 Limitations
- OpenAI Cloudflare challenge —
openai.com/api/pricing/returns HTTP 403 withcf-mitigated: challengeto most plain HTTP requests.curl-cffi+ Apify Proxy clears it most of the time; when it does not, OpenAI rows are skipped and the run continues with the other six providers (status message indicates partial success). A v2 Camoufox path is planned if the challenge becomes consistent. - Text-token models only — image generation, speech-to-text, embeddings, and other modality prices are out of scope for v1.
- Authoritative pages only — Azure OpenAI, AWS Bedrock, Vertex AI, and OpenRouter pass-through prices are out of scope.
- No historical tracking — schedule runs and export to your own storage for time-series. Apify's default dataset retention is 7 days on the free plan.
- Provider page restructures — pricing pages change occasionally. Fields that cannot be parsed emit
nullrather than crashing; the QA fixture (groq + deepseek) catches parser breakage on every publish.
❓ FAQ
Why these seven providers? They are the seven biggest providers of text-token LLM APIs by inference revenue as of Q1 2026. Cohere, AI21, and Perplexity are deliberately out of scope for v1; open a feature request if you need them.
Why scrape the pricing pages instead of using each provider's API?
None of the seven providers publish their pricing via an authenticated API. The pricing pages are the single source of truth. We hit the authoritative URL for each provider (e.g. docs.anthropic.com, not the marketing redirect at claude.com/pricing).
Why is OpenAI sometimes missing from the output?
OpenAI's pricing page sits behind Cloudflare's JavaScript challenge (cf-mitigated: challenge). curl-cffi with browser TLS impersonation plus an Apify Proxy residential exit usually clears it, but not always. When it does not clear, the Actor logs the block, sets a status message, and continues with the other six providers — a partial result is more useful than a hard failure.
Are per-1k prices converted to per-1M?
Yes. pricing_unit is always "per_1m_tokens". Parsers detect per-1k pricing from column headers and multiply by 1000 before constructing the row.
Does this Actor track price changes across runs? No — every run is a fresh snapshot. Schedule runs and export to your own storage (BigQuery, S3, a named dataset, etc.) to build a time series. Apify's default run-scoped storage is purged after 7 days on the free plan.
Companion Actor?
Yes — huggingface-hub-scraper is the other half of the AI Stack Intelligence suite. Pair model adoption (HF downloads, GGUF availability) with live pricing for full-stack AI cost-and-coverage dashboards.
💬 Your feedback
Found a parser that broke after a provider's pricing page restructure? Want a new provider added? Open an issue on the Actor's Apify Store page or contact us at apify.com/DevilScrapes. We monitor publish-day QA failures and ship patches the same week.