Skip to main content

Fetch, normalise, snapshot, and diff official LLM API token pricing.

Project description

llm-price-tracker

PyPI version License: MIT Downloads LinkedIn

llm-price-tracker fetches official published API token prices for major LLM providers, normalises them into one schema, and supports JSON snapshots and snapshot diffs.

Prices are collected from official provider pages only. Provider page structures can change without notice, so review fetched prices before using them for production billing or customer-facing estimates.

Supported providers

Installation

pip install llm-price-tracker

For local development:

python3 -m pip install -e ".[dev]"

Python 3.10 or newer is required.

Python usage

from llm_price_tracker import (
    diff_snapshots,
    fetch_all_prices,
    fetch_provider_prices,
    load_snapshot,
    save_snapshot,
)

prices = fetch_all_prices()
openai_prices = fetch_provider_prices("openai")
save_snapshot(prices, "prices.json")

old = load_snapshot("prices-old.json")
new = load_snapshot("prices.json")
diff = diff_snapshots(old, new)

CLI usage

llm-price-tracker list-providers
llm-price-tracker fetch --provider openai --output openai-prices.json
llm-price-tracker fetch --provider all --output prices.json
llm-price-tracker diff --old prices-old.json --new prices.json
llm-price-tracker diff --old prices-old.json --new prices.json --fail-on-change

The CLI exits non-zero when fetching, parsing, validation, or diff --fail-on-change checks fail. Use --ignore-errors with fetch --provider all to write successful providers while reporting skipped provider errors.

Output schema

Snapshots are JSON arrays of ModelPrice objects. Decimal prices are serialized as strings to avoid floating-point precision loss.

[
  {
    "provider": "openai",
    "model": "gpt-4.1",
    "input_per_1m": "2.00",
    "output_per_1m": "8.00",
    "cached_input_per_1m": "0.50",
    "cache_write_5m_per_1m": null,
    "cache_write_1h_per_1m": null,
    "cache_storage_per_1m_hour": null,
    "currency": "USD",
    "unit": "1M tokens",
    "source_url": "https://developers.openai.com/api/docs/pricing",
    "source_type": "html",
    "fetched_at": "2026-06-12T09:00:00Z",
    "modality": null,
    "billing_tier": null,
    "price_condition": null,
    "notes": null
  }
]

Some providers publish tiered or modality-specific prices. Those variants use optional modality, billing_tier, and price_condition fields instead of inventing new model names.

Provider adapters include lightweight required-model sanity checks for current official pages. Those checks are adapter arguments so downstream users can override them when providers rename, add, or deprecate models.

Development

python3 -m pip install -e ".[dev]"
pytest
ruff check .
black --check .

Normal tests use saved fixtures and do not call live provider pages. Live tests, when added, should be opt-in:

LLM_PRICE_TRACKER_LIVE_TESTS=1 pytest tests/live

Author

Eugene Evstafev hi@eugene.plus

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_price_tracker-2026.6.121355.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_price_tracker-2026.6.121355-py3-none-any.whl (23.9 kB view details)

Uploaded Python 3

File details

Details for the file llm_price_tracker-2026.6.121355.tar.gz.

File metadata

File hashes

Hashes for llm_price_tracker-2026.6.121355.tar.gz
Algorithm Hash digest
SHA256 d7c405c1cc50e4c1ed01380de426b82fb9e54ebab029d42a8f13b333a5ebc809
MD5 b24e1dde5f57485f6f6df5b2fec7ab13
BLAKE2b-256 0992b224212667135381a03aba0d36ae563328e95bc4216d2a6e0898cc716449

See more details on using hashes here.

File details

Details for the file llm_price_tracker-2026.6.121355-py3-none-any.whl.

File metadata

File hashes

Hashes for llm_price_tracker-2026.6.121355-py3-none-any.whl
Algorithm Hash digest
SHA256 ea8b38b57b86658d496ad8dbb86f9d606698fb2be4a9767fa732741d52d5262b
MD5 86b67e4cf3f7276b97c463a20573c3e2
BLAKE2b-256 e9b1deb834344f9fda6774f679d0a4a32df4f83aca1def903333d9bec87d4525

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page