LLM Model Prices & Deprecation Change Tracker avatar

LLM Model Prices & Deprecation Change Tracker

Pricing

Pay per event

Go to Apify Store
LLM Model Prices & Deprecation Change Tracker

LLM Model Prices & Deprecation Change Tracker

One table of LLM model ids, context windows, USD prices per million tokens and provider deprecation/shutdown dates, from models.dev and the OpenAI, Anthropic and Gemini deprecation pages. Reports what changed since your last run. Plain HTTP, pay per row.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Mohammed Samaan

Mohammed Samaan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Keeping a model list current by hand is slow: prices move, context windows change, and providers announce shutdown dates on separate pages. This actor reads four public sources, puts them into one row schema, and tells you what changed since your last run.

Use it to:

  • see which models you depend on have a shutdown date, and what the provider recommends instead;
  • compare input and output prices (USD per million tokens) and context windows across providers;
  • run it on a schedule and get a change report: new or removed models, price changes, context changes, deprecation announced, retirement date changed.

Every row names its source URL and the time it was read. A field a source does not give is null. A retirement date is never inferred from a model name.

Sources

SourceGives
models.dev catalog (api.json)provider-native model ids, context window, base prices, deprecated/beta/alpha status
OpenAI deprecations pageshutdown dates, announcement date (from the dated section heading), recommended replacement
Anthropic model deprecations pagestate, deprecation date, retirement date or "not sooner than" note, replacement
Gemini API deprecations pageshutdown date, recommended replacement

The OpenAI, Anthropic and Gemini data is read from those providers' public documentation pages. The actor requests each page once per run, after reading the site's robots.txt and stopping if it disallows the page, with an identifying User-Agent (ApifyActor-llm-model-catalog-changes/0.1 (+https://apify.com/leadharbor/llm-model-prices-deprecation-tracker)). It extracts facts only (model ids, dates, replacement ids) and copies no prose. You are responsible for how you use the output and for any terms that apply to you.

Rows for the same model id from models.dev and a deprecation page are merged into one row (sources lists both).

Attribution: the Gemini API deprecations page states its content is licensed under the Creative Commons Attribution 4.0 License; rows built from it carry that page's URL in sourceUrls. models.dev data is MIT licensed (see credits).

Sample input

{
"providers": ["anthropic", "openai", "google"],
"sources": ["models-dev", "openai-deprecations", "anthropic-deprecations", "google-deprecations"],
"includeDeprecated": true,
"compareToPrevious": true,
"maxRows": 500
}

Input

FieldTypeDefaultMeaning
providerslist of textallProvider keys to keep, lower case, as models.dev spells them (anthropic, openai, google, ...). An unknown name fails the run, names the field, suggests the closest match and lists the valid ones. Empty means every provider (thousands of rows, each billed).
sourceslistall fourmodels-dev, openai-deprecations, anthropic-deprecations, google-deprecations.
includeDeprecatedbooleantruefalse drops rows whose status is deprecated or retired.
sinceDateYYYY-MM-DDnoneKeep only rows with a deprecation or retirement date on or after it.
compareToPreviousbooleantrueStore a snapshot and emit a change report on later runs.
maxRowswhole number 1-200001000Cap on model rows (and on billing). A fractional value is rejected.

Output

Four kinds of dataset record, told apart by recordType:

  • model-row: one per model. id (raw provider id), provider, name, status, contextTokens, inputPricePerMTokens, outputPricePerMTokens (USD per 1,000,000 tokens, base price; context-size price tiers are not expanded), deprecationDate, retirementDate, retirementNote, replacement, sources, sourceUrl, sourceUrls, observedAt, warnings, schemaVersion.
  • source-status: only when a source failed or looked incomplete. status: "error", kind (failed or suspect), source, sourceUrl, httpStatus, error with the specific reason. Never billed.
  • change-report: only when a diff exists. changes[] with type (new, removed, price_changed, context_changed, deprecation_announced, retirement_date_changed), from, to, plus counts.
  • run-summary: always, last. sourceStatus for every source (status, HTTP code, rows, bytes, error), counts, warnings, whether the charge limit stopped the run. The same object is saved as SUMMARY in the default key-value store.

Real row from a run on 21 Oct 2026:

{
"recordType": "model-row",
"schemaVersion": 1,
"id": "gpt-4o-2024-08-06",
"provider": "openai",
"name": "GPT-4o (2024-08-06)",
"status": "deprecated",
"contextTokens": 128000,
"inputPricePerMTokens": 2.5,
"outputPricePerMTokens": 10,
"deprecationDate": "2026-10-14",
"retirementDate": "2027-01-14",
"retirementNote": null,
"replacement": "gpt-6-luna",
"sources": ["models-dev", "openai-deprecations"],
"sourceUrl": "https://models.dev/api.json",
"sourceUrls": ["https://models.dev/api.json", "https://developers.openai.com/api/docs/deprecations"],
"observedAt": "2026-10-21T10:57:59.729Z",
"warnings": []
}

Date fields, exactly

  • deprecationDate: the day the provider announced or marked the deprecation (the Anthropic "Deprecated" column, or the date in an OpenAI/Anthropic section heading such as 2026-10-14: ...).
  • retirementDate: the day the provider says the model stops working. Null when none is announced.
  • retirementNote: Anthropic's "Not sooner than ..." statement for current models. It is a floor, not a commitment, so it is kept out of retirementDate.
  • replacement: the replacement text as the page writes it. It is usually a model id, but a page can give prose or a footnote mark (for example gpt-5 or gpt-4.1*); it is not cleaned.

Change report and safeguards

The first run with compareToPrevious only stores a baseline (named key-value store llm-model-catalog-snapshots, one baseline per combination of providers and sources). Later runs add one change-report record when something changed.

A source that answers 200 but with half a page does not cause false removals. A source is treated as suspect and ignored for that run when it returns fewer than 70 percent of its row count from the last run, or fewer rows than a complete answer has (models.dev 500, OpenAI 30, Anthropic 15, Gemini 30), and a page without its closing </html> counts as failed. Failed and suspect sources get a source-status row, contribute no model rows, are not billed, and their part of the snapshot is kept unchanged for the next comparison.

Pricing

Pay per event:

EventPriceWhen
model-row$0.0005per model row written
change-report$0.01once per run, only when there is a diff

source-status and run-summary records are free. A row is billed only after it is written, and only rows built from healthy sources exist. If every source fails the run fails and bills nothing. If your maximum charge per run is reached the run stops and says so in the status message and the summary.

Worked example: the sample input above returns 316 rows on 21 Oct 2026 = 316 x $0.0005 = $0.158 on the first run. A later run with 3 changes costs the rows ($0.158) plus $0.01 for the report. Set maxRows or narrow providers to spend less; ["anthropic"] with models-dev and anthropic-deprecations is 39 rows.

Use with AI agents / MCP

Send {"providers": ["anthropic"], "sources": ["anthropic-deprecations", "models-dev"], "maxRows": 100}. Read recordType: "model-row" records: id, status, retirementDate, replacement. To list upcoming shutdowns add "sinceDate": "2026-10-21". Always read the last record (run-summary) and any source-status records before trusting an absence.

FAQ

Are the numbers exact? They are copied from the sources and not converted. A price in a source can lag the provider's own price list; check the provider before committing spend.

Why is a price null? The source gave no number, or gave a non-number or negative value. The reason is in the row's warnings.

Why do I see warnings about dates that differ between two tables? The OpenAI page lists some ids under more than one dated section (for example code-davinci-002). The first, newest section wins and the warning shows the other value.

Does it need a login, cookie or proxy? No. Plain HTTPS GET of four public URLs plus two robots.txt files.

Limits

  • Prices are base prices. Models with context-size price tiers show the base tier only.
  • Only the four listed sources are read. retirementDate: null means "no source here announced one", not "none exists".
  • Provider page layouts change. When one does, that source reports error with "layout changed" and the others still deliver.
  • While a source is failed or suspect, price and date changes for models that depend on it are not detected until it recovers.
  • Models that appear only on a deprecation page have null prices and context.

Tests

npm test runs the offline suite against responses recorded on 21 Oct 2026 (JSON entries and tables copied verbatim from the live sources into test/fixtures/, trimmed for size). LIVE=1 node --test test/live.test.js fetches the real sources, including their robots.txt.

Open-source credits

PackageLicence (from its LICENSE file)Use
apify 3.7.2 (SDK)Apache-2.0Actor runtime, dataset, key-value store, charging
caniuse-lite (transitive via apify)CC-BY-4.0data package inside the SDK tree, not used by this code
map-stream (transitive)MIT (LICENCE file; no license field in package.json)SDK dependency
pause-stream (transitive)dual MIT and Apache-2.0 (LICENSE)SDK dependency

All other production packages in the tree report MIT, ISC, BSD, 0BSD, Apache-2.0, BlueOak-1.0.0 or MIT/CC0 in their package.json. No GPL, AGPL or share-alike package is installed.

Data credits:

  • models.dev: "MIT License, Copyright (c) 2025 models.dev" (github.com/sst/models.dev).
  • Gemini API deprecations page, ai.google.dev/gemini-api/docs/deprecations: content licensed under Creative Commons Attribution 4.0.
  • OpenAI and Anthropic deprecation pages: public documentation, read for facts only as described under Sources.