LLM Provider Price and Latency Monitor
Pricing
Pay per usage
LLM Provider Price and Latency Monitor
Normalize model pricing, context length, capabilities, and provider routing data for LLM gateways, AI builders, and FinOps teams.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
George Kioko
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Pricing across 200+ LLMs changes weekly. Tracking it by hand stopped scaling at the 3rd FinOps spreadsheet.
This actor turns public model data into a normalized JSON feed for AI builders, LLM gateways, agent platforms, model marketplaces, and finance teams that need repeatable pricing and capability snapshots. OpenRouter is the primary source because its public models API exposes canonical model IDs, pricing, context length, architecture, supported parameters, and provider routing data. Direct provider pages are used only as limited fallbacks when OpenRouter does not have a model.
The actor runs in Apify Standby mode, so it can be called like a small API. It also supports batch input for scheduled snapshots.
Quick Start
Filter models that support tool calling:
curl "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"models","capability":"tools","provider":"anthropic","limit":5}'
Benchmark a family for chat routing:
$curl "https://YOUR_STANDBY_URL/benchmark?model_family=claude-3&task=chat&limit=2"
Standby Endpoints
| Endpoint | Purpose | Billing |
|---|---|---|
GET / | Service info and endpoint list | Free |
GET /health | Readiness and service info | Free |
GET /models | Filter model snapshots by provider, capability, price, context, and limit | model-snapshot per row |
GET /model?id= | Return one full model profile with provider routings | model-snapshot once |
GET /benchmark | Compare provider routes for a model family and task | benchmark-row per row |
GET /pricing-change | Return current v1 pricing history status | Free in v1 |
POST /watchlist | Enrich up to 50 requested model IDs | model-snapshot per returned model |
All endpoints honor health check values such as ping, test, example.com, and URL forms like https://example.com/status. These short circuit to a mocked LLM shaped response and do not charge.
Model Snapshot Schema
| Field | Type | Notes |
|---|---|---|
model_id | string | Canonical OpenRouter slug when available |
name | string | Display name |
provider_org | string | Source organization such as anthropic, openai, meta, or mistral |
providers_serving | string array | Routes serving the model, including OpenRouter and endpoint provider tags |
pricing_per_1m_tokens | object | Prompt, completion, image input, and flat request prices |
context_length | number | Token context window |
max_output_tokens | number or null | Advertised max completion tokens |
supports_vision | boolean | Based on model architecture input modalities |
supports_tools | boolean | Based on tools or tool_choice support |
supports_json_mode | boolean | Based on response_format or structured_outputs support |
modality | string | text, multimodal, image, or audio |
source | string | Current primary source is openrouter |
fetched_at | ISO date | Snapshot time |
Benchmark Row Schema
| Field | Type | Notes |
|---|---|---|
benchmark_id | string | Stable hash of family, task, model, and providers |
model_family | string | Family requested, such as claude-3 |
task | string | chat, vision, tools, or json |
providers | object array | Provider, model ID, token pricing, context, and chat pair cost |
cheapest_provider | string | Lowest cost route for a 500 prompt plus 500 completion pair |
fastest_advertised_provider | string or null | Uses OpenRouter endpoint latency when present |
best_context_provider | string | Route with the largest context window |
cheapest_vs_most_expensive_multiplier | number | Most expensive route divided by cheapest route |
The total_per_1k_chat_pair_usd metric assumes 500 prompt tokens and 500 completion tokens. It is a simple apples to apples price for one common chat exchange.
Pipeline
flowchart LRA[Input or Standby request] --> B[OpenRouter models API]A --> C[Limited direct provider fetchers]B --> D[Normalize model schema]C --> DD --> E{Benchmark requested}E -->|yes| F[Provider route aggregation]E -->|no| G[Model snapshots]F --> H[Dataset and JSON response]G --> H
Pricing
| Event | Price | Charged when |
|---|---|---|
actor-start | $0.50 | Once per paid Standby request or batch run |
model-snapshot | $0.025 | Per enriched model profile returned |
benchmark-row | $0.15 | Per model family comparison row returned |
Charges fire only after real work succeeds. Health checks and empty not found responses are not billed.
Comparison
| Option | Best for | Gap |
|---|---|---|
| OpenRouter (aggregator UI, not an ingestion API) | Browsing and routing through OpenRouter | Teams still need normalized export, filtering, and Apify scheduling |
| Internal FinOps spreadsheets | Manual reviews and finance notes | Slow updates, inconsistent capability fields, and weak automation |
| This actor (the normalized feed) | JSON snapshots, model admission checks, and recurring cost reviews | v1 has current snapshots only, not historical deltas |
Use Cases
- LLM gateway routing decisions by price, context, and capability.
- AI agent platform model admission checks before enabling a new model.
- FinOps cost per task budgeting for weekly model spend reviews.
- AI engineering team weekly digest of price and capability changes.
- Third party model marketplace listing data.
FAQ
How often should I run it? Weekly is enough for most teams. Daily is useful when you expose model choice to paying customers.
How accurate is capability detection? It follows OpenRouter fields. Vision uses architecture modality and input modalities. Tool and JSON support use advertised supported parameters.
Can provider data lag? Yes. OpenRouter is the primary normalized source, and direct provider pages are only fallback checks. Treat the feed as operational data, not a contract.
Does v1 include historical pricing? Not yet. /pricing-change returns a clear no history response. Schedule this actor and store snapshots if you need history today.
Can I get a refund for bad source data? Contact the actor owner with the run ID and affected model IDs. Refunds are reviewed case by case.
How do I request coverage changes? Send the model ID, provider URL, and desired field to the actor owner through Apify.