How we measure and publish prices.
The pricing data is built from public snapshots plus curated official-source reviews. The raw static outputs are public, and this page documents what is automated today versus planned next.
How prices get on this site
OpenRouter data is refreshed from its public Models API. Official provider prices are curated manually in V1 with source URLs and review timestamps. Generalized provider scraping is planned after the first data pipeline is stable.
OpenRouter snapshot
npm run pricing:fetch calls the OpenRouter public Models API and saves the raw response under data/snapshots/openrouter for auditability.
Official provider rows
V1 official prices are maintained in data/manual/official-prices.json with sourceUrl, observedAt, confidence, and optional validUntil fields.
Normalize and merge
npm run pricing:build normalizes the latest OpenRouter snapshot, skips sentinel rows, merges official rows, and writes data/models.json, data/providers.json, and data/meta.json.
Changes and future scraping
Large diffs can be marked needsReview: true in data/changes.jsonl. Generalized provider page scraping comes after this first pipeline is stable.
What is planned after pricing coverage
V1 publishes auditable price data only. Latency, uptime, and region checks will be added after the pricing pipeline is stable and the measurement harness is documented.
Measurement harness
Define prompts, request parameters, timeout policy, and failure semantics before exposing reliability numbers.
Regional checks
Keep region-specific results separate so developers can compare deployment fit without hidden averages.
Raw summaries
Publish machine-readable summary files beside pricing data once the reliability pipeline exists.
Methodology first
No provider score is shown until the data collection method and review policy are public.
What we don't do
Worth being explicit. These are deliberate limits, not gaps.
- xWe don't measure quality. We don't run eval suites or vibe checks. V1 focuses on price data.
- xWe don't accept paid placement. Listing order in tables is sortable; default sort is cheapest, not highest bidder. There is no enterprise tier that buys row position.
- xWe don't list providers we can't actually call. If your API requires a sales call, an enterprise NDA, or a manually approved key, you're not eligible. Self-serve only.
- xWe don't credit-bias. All test traffic is paid. We don't use free trial credits, design partner programs, or special rates.
- xWe don't editorialize prices. If a provider raises prices, the green pill turns red. We don't bury bad news; we don't celebrate cuts. Just numbers.
Everything is downloadable
The public site reads static data outputs. Pull the files directly, audit the source metadata, or rebuild them locally with the documented npm scripts.
When the methodology changes, you see it here
Methodology shifts can move historical numbers. We document every revision so old comparisons stay interpretable.
Pricing pipeline v1
Added OpenRouter snapshots, normalized public JSON, curated official prices, metadata, and change-log review flags.
Official rows separated
Official provider prices now carry source URLs, observedAt timestamps, confidence, and optional validUntil windows.
Sentinel rows excluded
Routing-only rows with negative OpenRouter prices are skipped before data/models.json is written.
Static outputs documented
The public site now documents data/models.json, data/providers.json, data/meta.json, data/changes.jsonl, and local rebuild commands.
Current static build inputs
The values below come from data/meta.json at build time.
generatedAt
2026-05-12T05:09:56.660Z
modelCount
362
providerCount
3
sourceSnapshot
2026-05-12T05-03-17-704Z.json